![]() |
Datenbank: MySQL • Zugriff über: Devarts
DB Parameter
Hi,
Gibt es eine Möglichkeit die DB Parameter:
Delphi-Quellcode:
Einmalig für alle Querys zu definieren oder muss man sie unter jeden Query erneut schreiben?
QueryRead.Params.ParamValues['test']:= Infos.test;
. . . . . . . . |
Re: DB Parameter
Hallo,
wenn du in der Query, deinen SQL-String zuweisen tust, und dort die Parameter angibts (Was Du ja musst), werden die Parameter automatisch gesetzt. (Entwicklungszeit), Da ich aber bis jetzt die ganze Sache so verstanden habe, jede Abfrage etc. eine eigene Query, ist es ja so kein Problem. Gruß Jens |
Re: DB Parameter
Du kannst natürlich eine private Methode schreiben:
Delphi-Quellcode:
Bei vielen Queries und Parameter kann das viel Schreibarbeit sparen.
procedure TForm1.SetzeAlleParameter(qry:TMySQLQuery; Infos:TIrgendEinRecordOderKlasse);
begin Assert(Assigned(qry)); // Sicherheitsabfrage qry.Params.ParamValues['test']:= Infos.test; .. end; |
Re: DB Parameter
Hallo,
und die relevanten Queries kommen noch in eine TList (z.B.), dann geht das ganze per Schleife. Heiko |
Re: DB Parameter
Allerdings tritt da ein Problem bei mir auf.
Wenn ich die Procedure benutze Bsp:
Delphi-Quellcode:
public
Procedure ParamInfo (qry: TMyQuery);
Delphi-Quellcode:
Allerdings nun in einer anderen Unit verwenden möchte per
Procedure TFormMain.ParamInfo (qry: TMyQuery);
Begin Assert(assigned(qry)); //Sicherheitsabfrage qry.Params.ParamValues['histC']:= Infos.Hist; End;
Delphi-Quellcode:
aufruf.
FormMain.ParamInfo(QueryInsert);
Funktioniert es nicht da mir Delphi sagt QueryInsert undeklarierter Bezeichner. |
Re: DB Parameter
Hast Du denn auch in der aufrufenden Unit eine Variable QueryInsert vom Typ TMyQuery instanziert?
|
Re: DB Parameter
Ebend nicht, da das lediglich eine Unit ist ohne eine Form, daher kann ich die Komponente nicht auf die Form.
|
Re: DB Parameter
Wieso Komponente? Ich habe von der Instanz QueryInsert des Typs TMyQuery gesprochen. Auf Deutsch:
Delphi-Quellcode:
Diese Instanz musst Du dann übergeben.
var QueryInsert: TMyQuery;
... QueryInsert := TMyQuery.Create(<Parameter>); |
Re: DB Parameter
Danke das wusste ich gar nicht.
Funktionietr nun auch alles, allerdings eine Frage dazu. Wenn ich nun mehre Parameter angebe, allerdings niht alle verwenden muss in dem Query, dann spuckt Delphi einen Fehler aus über die nicht vrweneten Parameter. Ist das normal bzw kann man dies umgehen ohne die Parameter zu löschen? Da sie in eine Procedure aus gelagert wurden. Ist jetzt nicht sehr wichtig, aber wäre interessant zu wiessen. |
Re: DB Parameter
Das kann ich aus dem Hut nicht beantworten, da ich alle Parameter, die ich definiere, auch verwende. Evtl. könnte man die Werte ja als array of const übergeben, um flexibel zu bleiben (sofern die Procedure für mehrere Queries mit unterschiedlicher Parameteranzahl verwendet wird).
|
Re: DB Parameter
Kennt diese Klasse ein ParamCheck?
|
Re: DB Parameter
Zur Not Bernhard (Geyer) fragen, AFAIK nutzt der genau diese Komponenten auch schon länger.
|
Re: DB Parameter
Ich benutze die InterBase/FireBird Varianten. Aber ich setze auch immer nur die benötigten Parameter
|
Re: DB Parameter
Zitat:
|
Re: DB Parameter
Dann könntest du nachschauen. Ich würde aber das Pferd andersrum aufzäumen: Geh durch die Parameter der Abfrage und bestückre diese dann mit den Werten aus der Liste/dem Array.
|
Re: DB Parameter
Hallo,
Zitat:
Nicht angegebene Parameter müssen also solche definiert werden. (Bounds, IsNull) Zur Not hilft es, alle Parameter als Null zu vordeklarieren, und dann die richtigen nochmal zu setzen. Ist aber unsauber. Die aufrufende Methode sollte doch wissen, was NULL und was nicht NULL ist und das entsprechend so setzen. Heiko |
Re: DB Parameter
Hallo Heiko,
ich habe sein Problem anders verstanden. Er hat Liste von (Parameter-)Werte, welche in verschiedenen Abfragen nur zum Teil vorkommen. Versucht er nun einen nicht vorhandenen Parameter zu belegn kommt natürlich der Fehler. |
Re: DB Parameter
Im Prinzip so:
Delphi-Quellcode:
Bin nicht sicher, ob die Funktion wirklich FindParam() heisst;
Procedure TFormMain.ParamInfo(qry: TMyQuery);
Begin Assert(assigned(qry)); //Sicherheitsabfrage qry.Params.ParamValues['histC']:= Infos.Hist; // hier wird angenommen, dass nicht alle Queries den Parameter "histDate" benötigen // mit FindParam() wird abgefragt, ob es den Parameter wirklich gibt if Assigned(qry.Params.FindParam('histDate')) then qry.Params.ParamValues['histDate']:= Infos.HistDate; End; es gibt aber auf jeden Fall eine Funktion mit der es möglich ist einen best. Parameter abzufragen. Ggf. Online Hilfe befragen. |
Re: DB Parameter
Oder eben anderesherum, nicht schauen, ob es den Parameter zum Wert gibt, sondern die paramter durchgehen und den entsprechenden Wert holen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:39 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