Sorry, das ich mich hier immer reindrängel, aber der Thread passt halt prima auf meine eigene Situation/Fragestellungen
Ich hab' jetzt mal INSERT via FieldByParam in meinem Übungsprojekt umgesetzt:
Delphi-Quellcode:
zQueryArtikel.SQL.Text = 'INSERT INTO '+sql_tbl_ArticleIO+' ('+
sql_fn_Location+','+
sql_fn_ArticleNo+','+
sql_fn_ArticleDesc+','+
sql_fn_PackCount+','+
sql_fn_Packing+','+
sql_fn_Quantity+','+
sql_fn_QuantityUnity+','+
//...da kommt noch einiges...
sql_fn_Remarks+
') VALUES ('+
':'+CutQuotes(sql_fn_Location)+','+
':'+CutQuotes(sql_fn_ArticleNo)+','+
':'+CutQuotes(sql_fn_ArticleDesc)+','+
':'+CutQuotes(sql_fn_PackCount)+','+
':'+CutQuotes(sql_fn_Packing)+','+
':'+CutQuotes(sql_fn_Quantity)+','+
':'+CutQuotes(sql_fn_QuantityUnity)+','+
//...da kommt genausoviel
':'+CutQuotes(sql_fn_Remarks)+
');
Bei mir sind alle Feldnamen als Konstante gespeichert (incl. "..."). Damit ich nicht doppelte Konstanten hab', muss ich jetzt für Parameter-Namen die Quotes wieder entfernen.
Insert via ParamByName:
Delphi-Quellcode:
with zQueryArtikel do begin
ParamByName(CutQuotes(sql_fn_Location)).AsString := EditLocation.Text;
ParamByName(CutQuotes(sql_fn_ArticleNo)).AsString := EditArticleNo.Text;
ParamByName(CutQuotes(sql_fn_ArticleDesc)).AsString := EditArticleDesc.Text;
ParamByName(CutQuotes(sql_fn_PackCount)).AsString := EditPackCount.Text;
ParamByName(CutQuotes(sql_fn_Packing)).AsString := EditPacking.Text;
ParamByName(CutQuotes(sql_fn_Quantity)).AsString := EditQuantity.Text;
ParamByName(CutQuotes(sql_fn_QuantityUnity)).AsString := EditQuantityUnity.Text;
// usw...
ExecSQL;
end;
INSERT wie ich es vorher hatte, als Funktionsaufruf:
Delphi-Quellcode:
function InsertArtikel(Location, ArticleNo, ArticleDesc [...] String):Integer;
// In der Funktion wird Insert generiert und abgesetzt
// als Feldwerte die Parameter der Funktion übernommen
[...]VALUES ('+
QuotedStr(Location)+','+
QuotedStr(ArticleNo)+','+
QuotedStr(ArticleDesc)+','+
Eventuelle Tipp-Fehler mal ignorieren, Copy+Paste ist gerade nicht verfügbar (deshalb auch stark gekürzt)...
Das sind ja (in meinem Fall) gut 15 weitere Methodenaufrufe pro Datenfeld. CutQuotes() gleicht sich mit QuotedStr() aus. Wirklich übersichtlicher ist es für mich auch nicht.
Mir stellt sich jetzt die Frage, wo die Vorteile von FieldByParam sind?
PS: Mein
SQL-Buch behandelt Parameter nicht wirklich, wie sie in TQuery's verwendet werden. Zugriff via Delphi, C/C++ etc. ist da überhaupt kein Thema.