AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Übergabe von Parameters "funktioniert nicht"
Thema durchsuchen
Ansicht
Themen-Optionen

Übergabe von Parameters "funktioniert nicht"

Ein Thema von p80286 · begonnen am 11. Aug 2010 · letzter Beitrag vom 12. Aug 2010
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

Übergabe von Parameters "funktioniert nicht"

  Alt 11. Aug 2010, 16:11
Datenbank: oracle • Version: egal • Zugriff über: ADO / dbGo
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
PMM

Registriert seit: 17. Feb 2005
101 Beiträge
 
#2

AW: Übergabe von Parameters "funktioniert nicht"

  Alt 12. Aug 2010, 08:23
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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Übergabe von Parameters "funktioniert nicht"

  Alt 12. Aug 2010, 12:02
@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;
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: Übergabe von Parameters "funktioniert nicht"

  Alt 12. Aug 2010, 12:09
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Übergabe von Parameters "funktioniert nicht"

  Alt 12. Aug 2010, 13:12
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

AW: Übergabe von Parameters "funktioniert nicht"

  Alt 12. Aug 2010, 13:15
Stimmt, das hatte ich übersehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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