![]() |
Datenbank: FB • Version: 2 • Zugriff über: IBDAC
D4: Query.ParamByName('').AsBlob := '' ersetzen
Hallo,
ich muss ein grosses Projekt von D2007 auf D4 portieren (jaja ;) ). Benutzt wird IBDAC. Der Code Query.ParamByName('Param1').AsBlob := 'bla'; wird angemeckert richtig ist Query.ParamByName('Param1').AsBlob := BytesOf('bla'); Das sind aber leider sehr viele Stellen. Da wird eine von TIBCQuery abgeleitete eigene Query-Komponente benutzen, könnte ich die erweitern. Im Moment sieht da so aus:
Delphi-Quellcode:
aus
procedure TQuery.StringToBlob(const ABlobFeldName, AWert: String);
begin {$IFDEF VER250} ParamByName(ABlobFeldName).AsBlob := BytesOf(AWert); {$ELSE} ParamByName(ABlobFeldName).AsBlob := AWert; {$ENDIF} end; Query.ParamByName('Param1').AsBlob := 'bla'; wird Query.StringToBlob('Param1', 'bla'); (Der Code soll schrittweise umgestellt werden, soll also mit D2007 und XE4 laufen.) Das ist aber trotzdem noch viel zu viel Aufwand. Bekomme ich denn das ParamByName('').AsBlob nicht irgendwie in meine eigene Klasse rein z.B. function ParamByName2(Name: String); TDAParam2; so dass ich einfach nur Query.ParamByName2('Param1').AsBlob := 'bla'; schreiben muss? Wie bekomme ich aber das ('Param1') in die Klasse rein, oder nehme ich eine Funktion, dass passt aber auch nicht richtig. Klappt das überhaupt, dass aus ich sowas Query.ParamByName2('Param1').AsBlob := 'bla'; mit einer eigenen Klasse hinbekomme? Ich hoffe, jemand kann mir helfen. Noch mal der Wunsch: so wenig wie möglich ändern und das so schnell wie möglich ;) PS: Ich habe den Quellcode von IBDAC, aber ich werden daraus nicht schlau. Danke Heiko So richtig komme ich hier nicht weiter |
AW: D4: Query.ParamByName('').AsBlob := '' ersetzen
Hallo,
so ich habe es selber hinbekommen. Falls es jemand interessiert:
Delphi-Quellcode:
Der Knackpunkt war TDAParamS(ParamByName(Name));
type
TDAParamS = class(TDAParam) procedure SetBlob(S: String); property AsBlob: String write SetBlob; end; procedure TDAParamS.SetBlob(S: String); begin DataType := ftBlob; Value := S; end { TDAParamS.SetBlob } ; type TQuery = class(TIBCQuery) function ParamByNameS(const Name: string): TDAParamS; end; function TQuery.ParamByNameS(const Name: string): TDAParamS; begin Result := TDAParamS(ParamByName(Name)); end; Das S steht übrigens für String ;) . Heiko |
AW: D4: Query.ParamByName('').AsBlob := '' ersetzen
Zitat:
Das kannst du auch in einen Class-Helper packen, dann kann der restliche Code so bleiben.
Delphi-Quellcode:
Den Class-Helper in eine separate Unit packen, über ein IFDEF für D2007 ausblenden bzw. für XE4 einblenden, die Unit an den nötigen Stellen ans Ende der Uses-Anweisung stellen und gut isses.
type
TDAParamHelper = class helper for TDAParam public function GetAsBlob: string; procedure SetAsBlob(const AValue: string); property AsBlob: string read GetAsBlob write SetAsBlob; end; function TDAParamHelper.GetAsBlob: string; begin Result := Value; end; procedure TDAParamHelper.SetAsBlob(const AValue: string); begin DataType := ftBlob; Value := AValue; end; |
AW: D4: Query.ParamByName('').AsBlob := '' ersetzen
Hallo,
hmmmmmm. Aber das AsBlob gibt es doch bereits, dass soll doch nicht überschrieben werden, sondern nur für Strings ersetzt werden? class helper kannte ich zwar (schon eine Weile her, seit ich darüber gelesen habe), aber ich könnte ein AsBlobS machen. Probiere ich mal aus, danke! Warum erschrecken ??? Das erste Projekt (~500.000 Zeilen) ist bereits erledigt, jetzt kommt das große dran (~2.000.0000 Zeilen). Für das leidige FormatSettings habe ich mir jetzt auch was gebastelt ;) Heiko |
AW: D4: Query.ParamByName('').AsBlob := '' ersetzen
Zitat:
|
AW: D4: Query.ParamByName('').AsBlob := '' ersetzen
Zitat:
Delphi-Quellcode:
Du musst nur dafür sorgen, daß der Class-Helper an dieser Stelle im Scope ist, wenn du unter XE4 compilierst. Das macht natürlich auch nur dann Sinn, wenn in den Blobs immer nur Strings gespeichert werden, aber das scheint ja auch so zu sein.
Query.ParamByName('Param1').AsBlob := 'bla';
|
AW: D4: Query.ParamByName('').AsBlob := '' ersetzen
Hallo,
das meinte ich nicht, ich benutze das AsBlob auch mit binären Daten, z.B. direkt aus einem Data-Pointer, dort meckert der Compiler auch nicht. Er meckert nur, wenn ich einen String übergebe. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 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