Schrift
[thread]3579[/thread]

zum verzweifeln... :-( SQL hängt..

Leser: 1


<< >> 7 Einträge, 1 Seite
master
 2005-06-06 10:52
#33319 #33319
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
MSSQL:

Die "ID" wird noch ausgegeben, "erledigt" seh ich jedoch nie...

Wenn ich einen "select" (verschachtelt) mache dann klappts!
egal ob ich via $dbh->do .. oder prepare & execute zugreiffe..
Selects gehen.. aber Updates und DELETES sobald sie verschachtelt sind nicht.

--
Früher hatte ich einmal eine methode um auf einen Hash
direkt zuzugreiffen... also Zeile einlesen. und nacher per $result{'ID'} statt $result->{'ID'} zugreiffen...
Kennt die ev. noch jemand? ev. liegts ja an der neuen methode :-(
--

&open_sql und &close_sql sind fehlerfrei.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$dbh2 = DBI->connect($DB_DSN);
$dbh3 = DBI->connect($DB_DSN);
$dbh4 = DBI->connect($DB_DSN);

&open_sql("SELECT Feld32,ID FROM READY2 WHERE bearbeitet is NULL",$DB_DSN); #Start MSSQL
while (  $result = $sth->fetchrow_hashref() )
{
$x++;
$ID=$result->{'ID'};
print "$ID\n";
$sth3 = $dbh3->prepare("UPDATE READY2 SET bearbeitet=1 WHERE ID=$ID");
$sth3->execute; $sth3->finish();
print "erledigt";
exit;
}

&close_sql; #END MSSQL

$dbh2->disconnect();
$dbh3->disconnect();
$dbh4->disconnect();
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
renee
 2005-06-06 11:00
#33320 #33320
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du solltest vielleicht etwas mehr mit Fehlerbehandlung arbeiten...
Außerdem brauchst Du nicht so viele Datenbank-Handler...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
my $dbh = DBI->connect($DB_DSN);

&open_sql("SELECT Feld32,ID FROM READY2 WHERE bearbeitet is NULL",$DB_DSN); #Start MSSQL
while ( $result = $sth->fetchrow_hashref() )
{
my $ID=$result->{'ID'};
print "$ID\n";
my $sth3 = $dbh->prepare("UPDATE READY2 SET bearbeitet=1 WHERE ID=?") or die $dbh->errstr();
$sth3->execute($ID) or die $dbh->errstr();
$sth3->finish();
print "erledigt";
exit;
}

&close_sql; #END MSSQL

$dbh->disconnect();


und use strict; solltest Du auch nicht vergessen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
master
 2005-06-06 11:27
#33321 #33321
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Ja müsste eigentlich mit nur einer $dbh gehen..
jedoch merkert er dann, dass "$dbh->prepare" noch mit anderen ergebnissen belegt ist.

Dein code bringt mir leider keine fehlermeldung... er hängt einfach nur auf... wie vorher...



In den Subs steht folgendes:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
sub open_sql                


#SQL öffnen
{
$dbh = DBI->connect($_[1]);
   $sth  = $dbh->prepare($_[0]);
   $sth->execute;
}
sub close_sql { $sth->finish(); $dbh->disconnect();} #SQL schliessen....



ich habe nun den code nochmal vereinfacht
Hier der komplette Code:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use DBI;
use DBD::ODBC;
use strict;

my $dbh = DBI->connect('dbi:ODBC:driver={SQL Server}; server={192.168.0.118}; database=TWIXGAMS');
my $sth  = $dbh->prepare("SELECT Feld32,ID FROM READY2 WHERE bearbeitet is NULL");
$sth->execute;
while (my  $result = $sth->fetchrow_hashref() )
{
          print "$result->{'ID'}\n";
          my $sth3 = $dbh->prepare("UPDATE READY2 SET bearbeitet=1 WHERE ID=?") or die $dbh->errstr();
          $sth3->execute($result->{'ID'}) or die $dbh->errstr();
          $sth3->finish();
          print "erledigt"; exit;
}

$sth->finish();$dbh->disconnect();


dazu kommt wie gesagt folgende fehlermeldung:
---
DBD::ODBC::st execute failed: [Microsoft][ODBC SQL Server Driver]Die Verbindung
ist mit Ergebnissen von einem anderen hstmt belegt (SQL-HY000)(DBD: st_execute/S
QLExecute err=-1) at usw.
----

Darum habe ich auch es auch mit mehreren connects($dbh3) versucht. Das seltsame.. mit select gehts.. :-(
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
master
 2005-06-06 11:28
#33322 #33322
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Ich vermute, dass unser SQL-Server nicht optimal eingerichtet ist...
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
master
 2005-06-06 13:25
#33323 #33323
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Alles okey... Problem gelöst..
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
renee
 2005-06-06 13:34
#33324 #33324
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wäre nett, wenn Du auch noch sagen würdest, woran es lag...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
master
 2005-06-06 15:34
#33325 #33325
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Kein Problem: MSSQL-Serverrechte.....
Da waren nur SELECT-Rechte gesetzt Update & delete deaktiviert. Wie ich vermutet hatte.

Gibt dort Einstellungen für "Benutzer".
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
<< >> 7 Einträge, 1 Seite



View all threads created 2005-06-06 10:52.