![]() |
Datenbank: MS SQL Server 2008 • Zugriff über: ADOQuery
ADOQuery: nur eine Anfrage möglich???
hallo Leute,
habe ein Problem. Mithilfe von TADOQuery schicke ich eine Anfrage an die MS SQL Datenbank, die problemlos ausgeführt wird. Wenn ich aber weitere Anfragen schicke, bekomme ich jedesmal keine Ergebnisse. Woran liegt das? Wie kann ich das Problem beheben? Ich habe rumexperementiert und bemerkt, dass wenn ich die TADOQuery-Komponente vor der Anfrage neu erstelle, funktioniert alles. |
Re: ADOQuery: nur eine Anfrage möglich???
Zitat:
vieleicht ein sql.clear davor ausführen? Gruss KH |
Re: ADOQuery: nur eine Anfrage möglich???
Das mache ich bereits. Nein es kommt keine Fehlermeldung meine GridView bleibt leer.
|
Re: ADOQuery: nur eine Anfrage möglich???
Zeig mal deinen Code
|
Re: ADOQuery: nur eine Anfrage möglich???
Delphi-Quellcode:
var
ADOQ: TADOQuery; ... procedure TfrmMain.KundenSuchen; var strKundennummer: string; strVariante: string; Where: string; Where_Part1, Where_Part2: string; OrderBy: string; Select: string; i : integer; begin try ADOQ.Active := false; if (Length(txtKundennummer.Text) > 0) or (Length(txtVariante.Text) > 0) then begin strKundennummer := LowerCase(txtKundennummer.Text + '%'); strVariante := LowerCase('%' + txtVariante.Text + '%'); with TStringList.Create do try Delimiter := ';'; StrictDelimiter := true; DelimitedText := AktuellerBenutzer.Einstellungen.TABELLE_KUNDEN_SUCHFELDER; ADOQ.Parameters.Clear; with ADOQ.Parameters.AddParameter do begin Name := 'kundennummer'; Value := strKundennummer; end; Where_Part1 := 'WHERE (LOWER(u_kn) LIKE :kundennummer) AND ('; for i := 0 to Count - 1 do begin with ADOQ.Parameters.AddParameter do begin Name := Strings[i]; Value := strVariante; end; if Length(Where_Part2) > 0 then Where_Part2 := Where_Part2 + ' OR '; Where_Part2 := Where_Part2 + '(LOWER(' + Strings[i] + ') LIKE :''' + Strings[i] + ''')'; end; finally Where := Where_Part1 + Where_Part2 + ')'; Free; end; case cbSortierenNach.ItemIndex of 0: OrderBy := 'ORDER BY u_kn'; 1: OrderBy := 'ORDER BY u_name'; 2: OrderBy := 'ORDER BY u_vorname'; 3: OrderBy := 'ORDER BY u_plz'; 4: OrderBy := 'ORDER BY u_ort'; 5: OrderBy := 'ORDER BY u_land'; end; Select := 'SELECT * FROM KUNDEN ' + Where + ' ' + OrderBy; ADOQ.SQL.Clear; ADOQ.ParamCheck := true; ADOQ.SQL.Text := Select; ADOQ.Active := true; ADOQ.Open; end; except end; end; |
Re: ADOQuery: nur eine Anfrage möglich???
active:=true und open brauchst du nicht hintereinander.
Edit: Und hier sind ein paar Hochkommas zu viel:
Delphi-Quellcode:
Und ob das gut geht, Tabellenname und Parametername gleich zu wählen.
Where_Part2 := Where_Part2 + '(LOWER(' + Strings[i] + ') LIKE :''' + Strings[i] + ''')';
|
Re: ADOQuery: nur eine Anfrage möglich???
Und bei der Zuweisung von .Text kein .Clear.
Lass dir mal das erzeugte Statement anzeigen |
Re: ADOQuery: nur eine Anfrage möglich???
Zitat:
Zitat:
Zitat:
|
Re: ADOQuery: nur eine Anfrage möglich???
Ich habe jetzt ADOQ.SQL.Clear auskommentiert und es klappt alles problemlos. Was aber für mich seltsam ist bzw. für mich nicht ganz verständlich.
Naja danke trotzdem für euere Mühe mir geholfen zu haben. |
Re: ADOQuery: nur eine Anfrage möglich???
Das ist unschön, was du da mit den Parametern machst.
Hier der richtige Ablauf: 1.) Property SQL zuweisen ADOQ.SQL.Text := .... ;// SELECT ..... Dabei wird die Query automatisch geschlossen (falls sie vorher offen war) 2.) Parameter zuweisen ADOQ.Parameters.ParamValues['Parametername'] := ....; Der Aufruf von AddParameter ist überflüssig. Es gibt nur wenige Ausnahmen, bei denen man von Hand eingreifen muss. In diesen Fällen reicht aber meist ADOQ.Parameters.Refresh aus um alle Parameter anhand der Abfrage mit richtigem Typ aufzubauen. 3.) Query öffnen. Entweder ADOQ.Open oder .Active := True Wenn man Parameterwerte ändert, muss man die Query schliesen und dann neu öffnen. Statt .Close gefolgt von .Open kann man in diesem Fall auch .Requery aufrufen; das ist schneller. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz