Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firedac SQLite UserData (https://www.delphipraxis.net/207921-firedac-sqlite-userdata.html)

WoGe 17. Mai 2021 07:38

Datenbank: Sqlite • Version: 3.3 • Zugriff über: Firedac

Firedac SQLite UserData
 
Es erschließt sich mir leider nicht wo und wie man var AUserData an folgende
Procedure übergibt:

Delphi-Quellcode:
    procedure FDSqlFunctionCalculate(AFunc: TSQLiteFunctionInstance;
      AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject);
Diese wird im OnCalulate-Event der SQLFunction aufgerufen, aber anscheindend nicht mit einem passenden Object versehen.
Ich interpretiere die Variable mal dahingehend, das von außerhalb der Query hier Daten in die Funktion gelangen können.

hoika 17. Mai 2021 09:46

AW: Firedac SQLite UserData
 
Hallo,
das var sieht für mich eher dafür aus, dass in der OnCalculate ein Objekt erzeugt werden kann, was dann beim nächsten Aufruf des OnCalculate benutzt werden kann.
Also sowas ähnliches wie eine lokale Variable.

Aber zu finden ist überhaupt nichts dazu im Netz.
(http://docwiki.embarcadero.com/Libra...on.OnCalculate,
http://docwiki.embarcadero.com/Libra...CalculateEvent)


PS: Vielleicht wird das sogar intern von SQLite benutzt?
OK, es würde nicht Userdata heißen ...

WoGe 17. Mai 2021 10:57

AW: Firedac SQLite UserData
 
Der Hinweis war extrem hiflreich:
Man kann in der Routine ein ensprechendes Object erzeugen.
UND man kann auch ein vorher erzeugtes Object hinzufügen und auch von ausserhalb benutzten:


Delphi-Quellcode:
procedure TForm1.FDSqlFunctionCalculate(AFunc: TSQLiteFunctionInstance;
  AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject);
begin
  if not Assigned(AUserData) then
  begin
    AUserData := ATestClass;
    (AUserData as TestClass).MyZahl := 1;
  end;
  if Assigned(AUserData) then
  begin
    (AUserData as TestClass).MyZahl := (AUserData as TestClass).MyZahl +3;
  end;

  AOutput.AsString := SQLregEx(AInputs[0].AsString,AInputs[1].AsString);
end;
Ich hatte übrigens auch nichts gefunden, aber etliche Stellen wo andere Funktionalität über Eigenschaften von Außen hinzugefügt wird.
Aber so geht es ja.


Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz