![]() |
AW: Parameter unter Firedac
Der Index geht zwar schneller, aber wenn du z.B. mal am SQL was veränderst, dann ändert sich auch der Index, aber über den Namen gibt es niemals Probleme und im Code siehst auch schneller wo auf was zugegriffen wird.
Man nimmt ja auch meistens FieldByName und nicht Fields, wenn man auf die Felder zugreift. Fallen gelassen wird nichts. Der Parser geht von vorne nach hinden durch den String und die Parameter werden in der Reihenfolge in die Liste eingetragen, wie sie gefunden werden. Kommt ein Parameter mehrmals im String vor, dann steht natürlich nur der "erste" Fund an seiner Stelle in der Liste und die nachfolgenden Funde werden nicht nochmal angehängt, da der Parameter dann ja schon existiert. :zwinker:
SQL-Code:
SELECT :a, :b, :a, :c
Delphi-Quellcode:
Params[0] = ParamByName('a')
Params[1] = ParamByName('b') Params[2] = ParamByName('c')
SQL-Code:
SELECT :c, :b, :a, :a
Delphi-Quellcode:
Params[2] = ParamByName('a')
Params[1] = ParamByName('b') Params[0] = ParamByName('c') |
AW: Parameter unter Firedac
Liste der Anhänge anzeigen (Anzahl: 4)
Hi zusammen
Zitat von Sir Rufo: Zitat:
Ich häng hier einige jpegs an, die hoffentlich meine Suche etwas dokumentieren können. Gruss Delbor PS: Da muss ich wohl ziemlich geschlafen haben: Zitat:
|
AW: Parameter unter Firedac
Diese Klasse/Unit ist auch in Seattle nicht dokumentiert.
Nimm doch einfach den Debugger und stepp durch den Code. Wenn dir das zu langweilig ist, dann suche die Parameter-Klasse und setze einen Breakpoint im
Delphi-Quellcode:
. Wenn dann dort angehalten wird, gehst du einfach durch den Callstack durch und findest die Stellen, die das aufrufen.
Create
So mache ich das wenigtens und das führt eigentlich immer zum Erfolg. |
AW: Parameter unter Firedac
Hi zusammen
Zitat:
Delphi-Quellcode:
Ursprünglich hatte ich den Datentyp für das Feld mit ftguid angegeben, aber da meckerte Delphi einige seltsame (unbekannte) Zeichen an.
function TFDMySQLDml.BildInsertQuery(LThumbMemory: TMemoryStream; LFolderID: TMemoryStream): integer;
var SQLString: string; AUser,APass :string; begin SQLString := 'Insert Into Bildtabelle(Thumbnail, FolderID) Values (:LThumbMemory, :LFolderID)'; FDQueryMain.SQL.Text := SQLString; FDQueryMain.Params[0].LoadFromStream(LThumbMemory, ftgraphic); FDQueryMain.Params[0].LoadFromStream(LFolderId, ftstring); //<== FDQueryMain.ExecSQL(false); ... Erzeugt wird die Guid so:
Delphi-Quellcode:
Was mache ich falsch?
....
if not FileExists(LPath+'IdentFile.cgf') then begin // ist in dem Ordner kein IdentifikationsFile FolderID := CreateIDFile(LPath); Self.FIDFile := FolderID; /// wird eines angelegt end; function TOpenFileFrame.CreateIDFile(LPath : String): String; var IdFile : TFileStream; ID_GUID: TGUID; UniqueName: String; Len: Longint; begin if CreateGUID(ID_GUID) <> 0 then Result := 'Creating GUID failed!' else begin UniqueName := GUIDToString(ID_GUID); IdFile := TFileStream.Create(LPath,fmCreate); try Len := Length(UniqueName); IdFile.Write(Len, SizeOf(Len)); IdFile.Write(PChar(UniqueName)^, Len); finally IdFile.Free; end; Result := 'IdentFile.cgf'; end; end; Gruss Delbor |
AW: Parameter unter Firedac
LFolderId = IdentFile.cgf ?
Binärdaten in einen String laden?
Delphi-Quellcode:
:roll:
Params[0]
Params[0]
Delphi-Quellcode:
FDQueryMain.Params[1].AsAString := TFile.ReadAllText(LFolderId); // natürlich nur, wenn da wirklich nur "Text" in der Datei ist
|
AW: Parameter unter Firedac
Hi Himitsu
Danke für den Tip! Entsprechend habe ich das wie folgt abgeändert
Delphi-Quellcode:
und
function TFDMySQLDml.BildInsertQuery(LThumbMemory: TMemoryStream; FolderId: string): integer;
var SQLString: string; AUser,APass :string; begin SQLString := 'Insert Into Bildtabelle(Thumbnail, FolderID) Values (:LThumbMemory, :FolderID)'; FDQueryMain.SQL.Text := SQLString; FDQueryMain.Params[0].AsStream := LThumbMemory; FDQueryMain.Params[1].AsString := FolderID; FDQueryMain.ExecSQL(false); ....
Delphi-Quellcode:
Meine letzte Fehlermeldung:
function TOpenFileFrame.CreateIDFile(LPath : String): String;
var IdFile : TFileStream; ID_GUID: TGUID; UniqueName: String; Len: Longint; begin if CreateGUID(ID_GUID) <> 0 then Result := 'Creating GUID failed!' else begin UniqueName := GUIDToString(ID_GUID); IdFile := TFileStream.Create(LPath,fmCreate); try Len := Length(UniqueName); IdFile.Write(Len, SizeOf(Len)); IdFile.Write(PChar(UniqueName)^, Len); finally IdFile.Free; end; Result := UniqueName; end; end; Zitat:
Gruss Delbor |
AW: Parameter unter Firedac
hmmmmmmmmm :gruebel:
Etwas in dieser Richtung geht auch nicht?
Delphi-Quellcode:
FDQueryMain.SQL.Text := 'SELECT Thumbnail, FolderID FROM Bildtabelle WHERE 0'; // LIMIT 0
FDQueryMain.Open; FDQueryMain.Insert; FDQueryMain.FieldByName('Thumbnail').AsStream := LThumbMemory; FDQueryMain.FieldByName('FolderID').AsString := FolderID; FDQueryMain.Post; |
AW: Parameter unter Firedac
Hi Himitsu
Ich bin überzeugt, dass es mit der SQL-Syntax nichts zu tun hat. Es hat ja nicht nur unter DBExpress, sondern auch unter FireDac funktioniert, bis ich der Tabelle das zusätzliche Feld verpasst habe. Beim letzten Versuch habe ich mal ein Showmessage eingebaut. Das Resultat: [Window Title] Zitat:
Gruss Delbor |
AW: Parameter unter Firedac
Wenn da 4 bei raus kommt, dann ist irgendwas "kaputt".
TField.Size = bei VARCHAR(MaxLength) sollte MaxLength raus kommen TField.DataSize = bei VARCHAR(MaxLength) als WideStringField sollte 2+MaxLength*2 raus kommen |
AW: Parameter unter Firedac
Zitat:
Du schreibst da einen GUID-String in eine Datei ... aber wozu? Um diesen String als Stream zu haben? Nicht wirklich, oder etwa doch? :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:12 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