Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Parameter bei AdoQuery (https://www.delphipraxis.net/16047-parameter-bei-adoquery.html)

ahachmann 9. Feb 2004 15:17


Parameter bei AdoQuery
 
Hallo,
Mein Wunsch ist es, daß ich für 5 verschiedene Artikeltabellen ein und dieselbe Query nutzen will. Dazu dachte ich mir, daß jede Prozedure, die das ADOQUERY nutzt seinen gewünschten SQL-String eingibt. Irgendwann habe ich das auch mal hinbekommen. Nun muß ich aber leider immer die Parameter fest erstellen. Bei dem Aufwand hat man ja Seiten weniger Code, wenn man für jede Tabelle ein Update Object baut. (uahhh, das ist ja nicht schön).
Muß ich wirklich immer die Parameter anlegen, oder bekommt das ADOQUERY Object dies auch von alleine hin? Will am libsten jedesmal nur folgendes machen:
Delphi-Quellcode:
    dmDbTools.qryTubes.SQL.Clear;
    intResult := dmDbTools.qryTubes.SQL.Add('UPDATE tubes SET name=:Pname '+ 
                 'WHERE article_id=:Particle;');
    dmDbTools.qryTubes.Parameters.ParamByName('Pname').Value := name;
    dmDbTools.qryTubes.Parameters.ParamByName('Particle').Value := article;
    intResult := dmDbTools.qryTubes.ExecSQL;
Ohne den Parameter anzulegen, da ja jede Tabelle andere hat.
Bin der Meinung, das das mal so lief.
Hoffe die Frage ist verständlich.
Vielen Dank,
Alexander

Mario 9. Feb 2004 19:26

Re: Parameter bei AdoQuery
 
Fast genau so sollte es gehen. Und wenn Du statt der AdoQuery noch AdoCommand nimmst, ist es perfekt. Das sollte dann ca. so aussehen (jetzt nicht kompiliert, sondern nur so getippt):
Delphi-Quellcode:
dmDbTools.qryTubes.CommandText := 'UPDATE tubes SET name=:Pname '+
  'WHERE article_id=:Particle;');
dmDbTools.qryTubes.Parameters.ParamByName('Pname').Value := name;
dmDbTools.qryTubes.Parameters.ParamByName('Particle').Value := article;
dmDbTools.qryTubes.Execute;

Robert_G 9. Feb 2004 19:49

Re: Parameter bei AdoQuery
 
Ich benutze kein ADO, würde aber trotzdem gerne wissen welche Vorteile ADOCommand gegenüber einer ADOQuery hat?
Ich hätte es sonst so geschrieben:
Delphi-Quellcode:
  With qryTubes Do
  Begin
    SQL.Text :=
      'UPDATE Tubes' + #10 +
      'SET   NAME = :PName' + #10 +
      'WHERE Article_ID = :PArticle';
    Parameters.ParamByName('PName').Value := Name;
    Parameters.ParamByName('PArticle').Value := Articel;
    intResult := ExecSQL;
  End;

Mario 10. Feb 2004 06:59

Re: Parameter bei AdoQuery
 
AdoCommand ist zum Absetzen von SQL-Anweisungen gut, wenn der Rückgabewert nicht in einer DataSource dargestellt werden muss. Man kann zwar auch die Datenmenge auslesen, aber nicht so gut wie mit einer Query oder Table. Dafür ist es theoretisch schneller, weil es viel weniger Overhead bietet. Also gerade für Update, Insert und Select Count Anweisungen per SQL ideal...

Mario 10. Feb 2004 07:02

Re: Parameter bei AdoQuery
 
Die beiden Routinen habe ich mir im DataModul hinterlegt:
Delphi-Quellcode:
function TDataModuleServer.GetCommandValue(Commando: String): Variant;
var rs: _Recordset;
begin
 WITH TADOCommand.Create(Self) DO
  TRY
   Connection := ADOConnection????;
   CommandText := Commando;
   rs := Execute;
   IF (rs <> NIL) AND
      (NOT (rs.BOF AND rs.EOF))
    THEN Result := rs.Fields[0].Value;
  FINALLY
   rs := NIL;
   Free;
  END;
end; // GetCommandValue

procedure TDataModuleServer.ExcecuteCommand(Commando: String);
begin
 WITH TADOCommand.Create(Self) DO
  TRY
   Connection := ADOConnection????;
   CommandText := Commando;
   Execute;
  FINALLY
   Free;
  END;
end; // ExcecuteCommand
Einfach, aber effektiv :-D

ahachmann 10. Feb 2004 11:45

Re: Parameter bei AdoQuery
 
Hallo,
Das trifft das problem leider noch nicht. Aus irgendeinem Grund, will da ADOQuery und auch das ADOCommand, daß ich ihm im Objectexplorer oder per code die Parameter übergebe. Ich muß die jedes mal nicht nur per ParamByName belegen, sondern auch vorher dem Objekt hinzufügen.
Und ihr macht das immer ohne das Anmelden, was bei mir auch mal funktioniert hat. Warum läuft das jetzt nicht mehr bei mir?
Gruß und Thx,
Alexander

Robert_G 10. Feb 2004 11:46

Re: Parameter bei AdoQuery
 
Vielleicht einfach prepared auf True setzten. :gruebel:

ahachmann 10. Feb 2004 11:49

Re: Parameter bei AdoQuery
 
Hmm,
Das hatte ich eigentlich auch schon probiert. Da hatte es nicht geklappt.
Jetzt funtzt es. :oops:
Vielen Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 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