Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Übergabe von Parameters "funktioniert nicht" (https://www.delphipraxis.net/153660-uebergabe-von-parameters-funktioniert-nicht.html)

p80286 11. Aug 2010 15:11

Datenbank: oracle • Version: egal • Zugriff über: ADO / dbGo

Übergabe von Parameters "funktioniert nicht"
 
Hallo zusammen,

Bei dem folgenden Source funktioniert die Parameterübergabe nicht (lt. Debugger ist parameters.items[0] allerdings Liste1[i]).
Die Bastellösung erbringt allerdings das gewünschte Ergebnis.
Könnt Ihr mir auf die Sprünge helfen?

Delphi-Quellcode:
liste1.LoadFromFile('c:\temp\update0a.txt');
  ADOQuery1.Close;
  ADOQuery1.sql.Text:='select idebre from tabbre,tabpay '+
                      'where tabbre.idepay=tabpay.idepay '+
                      'and tabbre.numdlv=:_numdlv ';
  for i:=0 to liste1.Count-1 do begin
    ADOQuery1.parameters.parambyname('_numdlv').value:=liste1[i];
    (* Bastellösung:
    ADOQuery1.sql.Text:='select idebre from tabbre,tabpay '+
                        'where tabbre.idepay=tabpay.idepay '+
                        'and tabbre.numdlv='''+liste1[i]+'''';
                        *)
    ADOQuery1.open ;
    if not ADOQuery1.eof then begin
      inc(cnt1);
      repeat
        liste2.add(ADOQuery1.fieldbyname('idebre').asstring);
        ADOQuery1.next;
      until ADOQuery1.eof;
    end
    else begin
      inc(cnt2,1);
      liste2.Add(liste1[i]+' nicht gefunden!');
    end;

  end;
  ADOQuery1.close;
vielen Dank
K-H

PMM 12. Aug 2010 07:23

AW: Übergabe von Parameters "funktioniert nicht"
 
Versuch mal, nach dem Neuzuweisen des SQL ".parameters.refresh" aufzurufen. Ich meine mich zu erinnern, dass die Parameterkollektion nach einer Zuweisung auf den SQL verworfen wird.
PMM

p80286 12. Aug 2010 11:02

AW: Übergabe von Parameters "funktioniert nicht"
 
@PMM
vielen Dank, aber das hat nichts gebracht, aber ich hab mir die Sourcen daraufin nochmal genau angeschaut,
so funktioniert es:

Delphi-Quellcode:
liste1.LoadFromFile('c:\temp\update0a.txt');
  ADOQuery1.Close;
  ADOQuery1.sql.Text:='select idebre from tabbre,tabpay '+
                      'where tabbre.idepay=tabpay.idepay '+
                      'and tabbre.numdlv=:_numdlv ';
  for i:=0 to liste1.Count-1 do begin
    ADOQuery1.parameters.parambyname('_numdlv').value:=liste1[i];
    (* Bastellösung:
    ADOQuery1.sql.Text:='select idebre from tabbre,tabpay '+
                        'where tabbre.idepay=tabpay.idepay '+
                        'and tabbre.numdlv='''+liste1[i]+'''';
                        *)
    ADOQuery1.open ;
    if not ADOQuery1.eof then begin
      inc(cnt1);
      repeat
        liste2.add(ADOQuery1.fieldbyname('idebre').asstring);
        ADOQuery1.next;
      until ADOQuery1.eof;
    end
    else begin
      inc(cnt2,1);
      liste2.Add(liste1[i]+' nicht gefunden!');
    end;
    ADOQuery1.close;     // muß in der Schleife erfolgen !!!
  end;

DeddyH 12. Aug 2010 11:09

AW: Übergabe von Parameters "funktioniert nicht"
 
Mal was anderes: wieso dieses Konstrukt?
Zitat:

Delphi-Quellcode:
if not ADOQuery1.eof then begin
      inc(cnt1);
      repeat
        liste2.add(ADOQuery1.fieldbyname('idebre').asstring);
        ADOQuery1.next;
      until ADOQuery1.eof;
    end

Und nicht so?
Delphi-Quellcode:
while not ADOQuery1.eof do
  begin
    inc(cnt1);
    liste2.add(ADOQuery1.fieldbyname('idebre').asstring);
    ADOQuery1.next;
  end;

p80286 12. Aug 2010 12:12

AW: Übergabe von Parameters "funktioniert nicht"
 
Gute Frage,

wahrscheinlich weil ich die Abfolge .Next; until .EOF; logisch finde.

Übrigens ist in Deinem Beispiel die Zählung nicht mehr korrekt. Inc(cnt1) wird für jede Abfrage nur einmal ausgeführt, egal wieviele Datensätze zurück kommen.

Gruß
K-H

DeddyH 12. Aug 2010 12:15

AW: Übergabe von Parameters "funktioniert nicht"
 
Stimmt, das hatte ich übersehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr.

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