Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi seltsamer MSSQL 2005 Fehler (https://www.delphipraxis.net/164643-seltsamer-mssql-2005-fehler.html)

Kevin11 23. Nov 2011 09:35

Datenbank: MSSQL • Version: 2005 • Zugriff über: DBX

seltsamer MSSQL 2005 Fehler
 
Hallo,

ich bekomme mitten in meiner while Schleife plötzlich diesen Fehler:
Zitat:

connection is busy with results for another command
Die ersten 13. Datensätze kann ich Problemlos auslesen, nur bei dem 14. kommt dann dieser Fehler. Und ich habe nicht mehr als 5 Abfragen in dieser Schleife. Also kann die Connection ja nicht zu beschäftigt sein.

MfG
Kevin

DeddyH 23. Nov 2011 09:47

AW: seltsamer MSSQL 2005 Fehler
 
5 Abfragen in einer while Schleife? Womöglich mit Abermillionen Datensätzen je Ergebnismenge? Da wäre ich aber auch busy^^. Wie sieht die Schleife denn aus?

Kevin11 23. Nov 2011 10:07

AW: seltsamer MSSQL 2005 Fehler
 
Hier ist die Schleife mit den function's die in ihr benutzt werden.

Delphi-Quellcode:
  while not VPers.Eof do
  begin
    with VPers do
    begin
      log('Pers: %-30s %-30s', [FieldByName('Vorname').AsString, FieldByName('Nachname').AsString]);

      VAbt.Close;
      VAbt.CommandText := 'SELECT * FROM (Per p INNER JOIN ZOrgPer zop ON p.pkPerID = zop.fkPerID) INNER JOIN Abt a ON zop.fkAbtID = a.pkAbtID WHERE p.pkPerID = '+QuotedStr(VPers.FieldByName('pkPerID').AsString);
     VAbt.Open;

      VMain.Insert;
      inc(PersNr);
      VMain.FieldByName('PE_ID').Value := genid('PE_STAMM');
      VMain.FieldByName('PE_NR').Value := Format('%.4d', [PersNr]);

      VMain.FieldByName('PE_AB_INDEX').Value := scalarQueryInt(Form3.DBXFirebird, 'SELECT AB_ID FROM AB_STAMM WHERE AB_ID = '+IntToStr(getAbtID(VAbt.FieldByName('AbtBzng').AsString)));

      VMain.FieldByName('PE_AB_NR').Value := scalarQueryString(Form3.DBXFirebird, 'SELECT AB_NR FROM AB_STAMM WHERE AB_ID = '+IntToStr(getAbtID(VAbt.FieldByName('AbtBzng').AsString)));
      VMain.FieldByName('PE_AB_NAME').Value := scalarQueryString(Form3.DBXFirebird, 'SELECT AB_NAME_LANG FROM AB_STAMM WHERE AB_ID = '+IntToStr(getAbtID(VAbt.FieldByName('AbtBzng').AsString)));

          if not StringIsEmpty(VPers.FieldByName('Nachname').AsString) then
            VMain.FieldByName('PE_NACHNAME').Value        := GetString(VPers.FieldByName('Nachname').Value, 30);

          if not StringIsEmpty(VPers.FieldByName('Vorname').AsString) then
            VMain.FieldByName('PE_VORNAME').Value        := GetString(VPers.FieldByName('Vorname').Value, 30);

         VMain.FieldByName('PE_EI_TAUGLICH').Value         := 1;
         VMain.FieldByName('PE_AS_TAUGLICH').Value         := 1;
         VMain.FieldByName('PE_UB_TAUGLICH').Value         := 1;
         VMain.FieldByName('PE_EH_TAUGLICH').Value         := 1;
         VMain.FieldByName('PE_MASKENBRILLE_MML').Value    := 0;
         VMain.FieldByName('PE_FAHRBRILLE_MML').Value      := 0;


      VMain.Post;
      VMain.ApplyUpdates(0);
      Next;
    end;
  end;
 
 
function scalarQueryString(dbc: TSQLConnection; sql: String;): String;
var
  VQuery: TSQLDataSet;
begin
  VQuery := TSQLDataSet.Create(nil);
  VQuery.SQLConnection := dbc;
  VQUery.CommandText := sql;
  VQuery.Open;
  VQuery.First;
  result := VQuery.Fields[0].AsString

  FreeAndNil(VQuery);
end;

function scalarQueryString(dbc: TSQLConnection; sql: String;): Integer;
var
  VQuery: TSQLDataSet;
begin
  VQuery := TSQLDataSet.Create(nil);
  VQuery.SQLConnection := dbc;
  VQUery.CommandText := sql;
  VQuery.Open;
  VQuery.First;
  result := VQuery.Fields[0].AsInteger

  FreeAndNil(VQuery);
end;

function genid(tablename: String): Integer;
begin
  result := scalarQueryInt(Form3.DBXFirebird, Format('SELECT max(%s_ID) FROM %s', [Copy(tablename, 1, 2), tablename]), true, 0);
  Inc(result);
end;

Der Fehler kommt dann nach 14 durchläufen in der Zeile
Delphi-Quellcode:
VAbt.Open;
.

Bernhard Geyer 23. Nov 2011 10:14

AW: seltsamer MSSQL 2005 Fehler
 
Wie so oft die Frage:

Welche Curserlocation wird verwendet? Für MS SQL-Server sollte man clUseClient verwenden.

omata 23. Nov 2011 10:14

AW: seltsamer MSSQL 2005 Fehler
 
Und in welche Tabelle schreibt VMain?

Kevin11 23. Nov 2011 10:20

AW: seltsamer MSSQL 2005 Fehler
 
VMain schreibt in PE_STAMM. Und ich hab keine Curserlocation festgelegt, also wird warscheinlich der Standartwert verwendet. Im Objektinspektor finde ich auch bei keinen der Verwendeten DBX-Komponenten eine Eigenschaft um die Curserlocation zu setzen.

jobo 23. Nov 2011 10:28

AW: seltsamer MSSQL 2005 Fehler
 
Welches Select (welche Tabellen) stecken hinter VPERS?

Kevin11 23. Nov 2011 10:32

AW: seltsamer MSSQL 2005 Fehler
 
Die Abfrage 'SELECT * FROM Per' steckt hinter VPers.

jobo 23. Nov 2011 10:43

AW: seltsamer MSSQL 2005 Fehler
 
Hm, ich hab vermutet, dass das Update auf die gleiche Tabelle geht wie das Select der Schleife.

Was steckt hinter dem ScalarQuery? Läuft das alles synchron?
Sind die Datenquellen der sichtbaren Queries Tabellen oder Views?

Ach ja, übersehen:
vApt geht auch auf "Per" (was Du updatest)
Das ist generell nicht unbedingt empfehlenswert vom Vorgehen.
Keine Ahnung wie gut MSSQL2005 das verpackt, offenbar nicht so gut.

Kevin11 23. Nov 2011 10:49

AW: seltsamer MSSQL 2005 Fehler
 
Es geht ja alles. Nur beim 14 mal spuckt mein Programm mir hier den o.g. Fehler aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:00 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz