Leser: 26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
DAO.DBEngine.SetOption dbMaxLocksPerFile, 1500000
Dim Conn As ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strSQL As String
Set Conn = CurrentProject.Connection
Set rst = New ADODB.Recordset
strSQL = "Select * from vicidial_agent_log_temp order by user, event_time"
rst.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
Dim Time, time_alt As Date
Dim summe, summe_alt, differenz, temp As Integer
Dim user_alt As String
Do Until rst.EOF
'Bei neuem Agent springe zum naechsten Datensatz
If .... Then
GoTo naechster_datensatz
End If
summe = rst!pause + rst!wait
If summe_alt ... Then
rst.MovePrevious
rst!gabcom_fehler = "AutoKorrektur"
'ein paar Änderungen ausführen
End If
naechster_datensatz:
'Werte übermitteln in Variable
user_alt = rst!user
time_alt = rst!event_time
summe_alt = rst!pause_sec + rst!wait_sec + rst!dispo_sec + rst!talk_sec
naechster_datensatz:
rst.MoveNext
Loop
rst.Close
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
#!/usr/bin/perl use strict; use warnings; use DBI; #server my $host=''; # DB-Name my $database=''; # Login Benutzer my $user=''; # Login Passwort my $pass=''; my $dbi=DBI->connect( "DBI:mysql:database=$database;host=$hostname", $user, $pass, { # script bei Fehler beenden RaiseError => 1, # Änderungen automatisch übernehmen # (macht das schreiben langsamer) AutoCommit => 1, }, ) or die("ERROR Connect DB".$DBI::errstr."\n"); my $sth = $dbh->prepare('Select * from vicidial_agent_log_temp order by user, event_time'); $sth->execute(); while(my $data=$sth->fetchrow_arrayref) { print join(', ',@$data)."\n"; # mehr code ... } $sth->finish; $dbh->disconnect;
1
2
3
4
5
while(my $data=$sth->fetchrow_arrayref)
{
print join(', ',@$data)."\n";
# mehr code ...
}
Guest PhilipAlso wenn ich alles richtig verstanden habe, habe ich in $data alle Spaltenwerte und kann diese auslesen und direkt verändern (in der Datenbank). Wie genau kann ich denn den Wert auslesen und verändern?
1 2 3
my $sthdml = $dbh->prepare('update vicidial_agent_log_temp set user_alt=? where user=?'); $sthdml->execute($user_alt, $user); $sthdml->finish;
Guest PhilipWie kann ich aber nun z.B. zum Datensatz zuvor springen (VBA: rst.moveprevious)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
#!/usr/bin/perl use strict; use warnings; use DBI; #server my $host=''; # DB-Name my $database=''; # Login Benutzer my $user=''; # Login Passwort my $pass=''; my $dbi=DBI->connect( "DBI:mysql:database=$database;host=$hostname", $user, $pass, { # script bei Fehler beenden RaiseError => 1, # Änderungen automatisch übernehmen # (macht das schreiben langsamer) AutoCommit => 1, }, ) or die("ERROR Connect DB".$DBI::errstr."\n"); my $sth = $dbh->prepare('Select * from vicidial_agent_log_temp order by user, event_time'); $sth->execute(); # alle Zeilen als hash-Referenzen im Array @storage ablegen my @storage; push(@storage,$_) while($sth->fetchrow_hashref); $sth->finish; my ($user_alt, $time_alt, $summe_alt); # das Array durch gehen for(my $pos=0; $pos<@storage; $pos++) { my $row=$storage[$pos]; next if( ... ); my $summe= $row->{pause} + $row->{'wait'}; if(defined($summe_alt) and $last_summe ... ) { # einen Eintrag zurück springen $pos--; $pos=0 if($pos<0); $row=$storage[$pos]; # aktualisieren eines Eintages: $dbh->do('Update vicidial_agent_log_temp Set gabcom_fehler=? Where user=?', undef, "AutoKorrektur", $row->{user}); # weitere Änderungen ... } $user_alt = $row->{user}; $time_alt = $row->{event_time}; $summe_alt = $row->{pause_sec} + $row->{wait_sec} + $row->{dispo_sec} + $row->{talk_sec}; } # Verbindung zur Datenbank beenden $dbh->disconnect;