Einzelnen Beitrag anzeigen

Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#118

Re: Datenerfassung mit Firebird Datenbank

  Alt 27. Feb 2009, 21:44
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.
  Mit Zitat antworten Zitat