![]() |
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:
Ohne den Parameter anzulegen, da ja jede Tabelle andere hat.
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; Bin der Meinung, das das mal so lief. Hoffe die Frage ist verständlich. Vielen Dank, Alexander |
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; |
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; |
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...
|
Re: Parameter bei AdoQuery
Die beiden Routinen habe ich mir im DataModul hinterlegt:
Delphi-Quellcode:
Einfach, aber effektiv :-D
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 |
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 |
Re: Parameter bei AdoQuery
Vielleicht einfach prepared auf True setzten. :gruebel:
|
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 23:17 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-2025 by Thomas Breitkreuz