AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADOQuery: nur eine Anfrage möglich???
Thema durchsuchen
Ansicht
Themen-Optionen

ADOQuery: nur eine Anfrage möglich???

Ein Thema von vit4l · begonnen am 10. Feb 2009 · letzter Beitrag vom 10. Feb 2009
Antwort Antwort
vit4l

Registriert seit: 10. Jun 2008
72 Beiträge
 
#1

ADOQuery: nur eine Anfrage möglich???

  Alt 10. Feb 2009, 15:48
Datenbank: MS SQL Server 2008 • Zugriff über: ADOQuery
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.
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#2

Re: ADOQuery: nur eine Anfrage möglich???

  Alt 10. Feb 2009, 15:51
Zitat von vit4l:
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.
bekommst ne fehlermeldung?

vieleicht ein sql.clear davor ausführen?

Gruss KH
Karl-Heinz
  Mit Zitat antworten Zitat
vit4l

Registriert seit: 10. Jun 2008
72 Beiträge
 
#3

Re: ADOQuery: nur eine Anfrage möglich???

  Alt 10. Feb 2009, 15:53
Das mache ich bereits. Nein es kommt keine Fehlermeldung meine GridView bleibt leer.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: ADOQuery: nur eine Anfrage möglich???

  Alt 10. Feb 2009, 15:54
Zeig mal deinen Code
Markus Kinzler
  Mit Zitat antworten Zitat
vit4l

Registriert seit: 10. Jun 2008
72 Beiträge
 
#5

Re: ADOQuery: nur eine Anfrage möglich???

  Alt 10. Feb 2009, 16:01
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;
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: ADOQuery: nur eine Anfrage möglich???

  Alt 10. Feb 2009, 16:04
active:=true und open brauchst du nicht hintereinander.

Edit: Und hier sind ein paar Hochkommas zu viel:
Where_Part2 := Where_Part2 + '(LOWER(' + Strings[i] + ') LIKE :''' + Strings[i] + ''')'; Und ob das gut geht, Tabellenname und Parametername gleich zu wählen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: ADOQuery: nur eine Anfrage möglich???

  Alt 10. Feb 2009, 16:06
Und bei der Zuweisung von .Text kein .Clear.
Lass dir mal das erzeugte Statement anzeigen
Markus Kinzler
  Mit Zitat antworten Zitat
vit4l

Registriert seit: 10. Jun 2008
72 Beiträge
 
#8

Re: ADOQuery: nur eine Anfrage möglich???

  Alt 10. Feb 2009, 16:13
Zitat von sirius:
Und ob das gut geht, Tabellenname und Parametername gleich zu wählen.
Das sind keine Tabellennamen, das sind Feldernamen einer Tabelle. Geht wunderbar.

Zitat von mkinzler:
Und bei der Zuweisung von .Text kein .Clear.
Ich lösche zuerst den Text und weise den neuen Text zu. Oder verstehe ich grundsätzlich etwas falsch?

Zitat von mkinzler:
Lass dir mal das erzeugte Statement anzeigen
Ich lade das erzeugte Statement in eine Memo und führe es dann im MS SQL Server Management Studio aus. Die Anfrage wird ausgeführt.
  Mit Zitat antworten Zitat
vit4l

Registriert seit: 10. Jun 2008
72 Beiträge
 
#9

Re: ADOQuery: nur eine Anfrage möglich???

  Alt 10. Feb 2009, 16:18
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: ADOQuery: nur eine Anfrage möglich???

  Alt 10. Feb 2009, 18:47
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.
Andreas
  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 15:56 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