Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von mse »

@Matze: Hast du

Code: Alles auswählen

 
params.createparam(ftstring,'X',ptunknown).value:= var1;
 
gesehen?

@EgonHugeist:
MSEide 2.8 hatte Komponenten für Zeos < Version 7 in der Palette falls mit -dmse_with_zeoslib kompiliert. Für MSEide+MSEgui 3.0 musste ich sie leider entfernen, da MSEgui nun ein eigenes db.pas hat. FPC untestützt keine unit alias, wie ich erfahren habe ist das so gewollt, darum müsste in vielen Zeos Dateien weitere {$ifdef} eingebaut werden.
Für Zeos Version 7 erwarte ich einige Probleme, da MSEgui nicht das Lazarus-System von utf-8 in AnsiString sondern wie Delphi 16-bit UnicodeString verwendet.
Dateianhänge
zeos.png

EgonHugeist
Beiträge: 93
Registriert: Di 17. Apr 2012, 22:41

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von EgonHugeist »

@Martin

ja habe schon mitbekommen, daß du deine eigene DB-Interpretation benutzt. Das mit den unit-alias dingens-kirchen versteh ich grad nicht...

Bezüglich ter AnsiString(CP_UTF16) codepage müßtest du nur das globale define UNICODE setzten. Aja und TZConnection.ControlsCodePage := cCP_UTF16. Dennoch geb ich dir Recht, daß es Probleme geben könnte, da der FPC ev. Functionen welche bis jetzt nur mir Delphi-Unicode getestet sind, in der erwarteten Art und Weise ?noch? nicht mit bringt. Auch weiß ich nicht, ob du dir damit etwas Gutes tust (beim derzeitigen Stand der Dinge), da ich be Zeos-7.2 'ne Menge grundlegende RTL functionen durch eigene oder vom FastCode-Project portierte, schnellere ersetzt habe und auf unglaubliche Performance-Löcher mit dem FPC gestoßen bin. Habe alle RTL-Replacements mit Benchmarks versehen und alle direkt mit FPC-UnicodeString interagierenden Funktionen waren mit Delphi HööLLLEN schnell und mit dem FPC genau umgekehrt! Dennoch ist dein GUI wegweisend, da wenn FPC3.0 kommt auch (sehr vermutlich) alles auf den UnicodeString umgestrick wurde. Also weiter SOOOO!

Gibt es ein Globales define wie {$IFDEF LCL}, um deine IDE direkt zu erkennen?

Würde mich freuen, wenn du mal einen Test machen würdest....

Gruß Michael
ZeosDevTeam

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von mse »

EgonHugeist hat geschrieben: Gibt es ein Globales define wie {$IFDEF LCL}, um deine IDE direkt zu erkennen?
Man könnte z.B. beim Kompilieren -dmsegui angeben und {$ifdef msegui} verwenden.
Würde mich freuen, wenn du mal einen Test machen würdest....
Werde mal schauen.

Martin

Matze
Beiträge: 32
Registriert: Di 11. Jun 2013, 17:11

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von Matze »

Hallo Alle,
Danke für die Antworten, aber nun wird es mir zu kompliziert bzw. ich benötige da mehr Zeit um durchzusehen.
Ich bleibe schon hier hängen:
params.createparam(ftstring,'X',ptunknown).value:= var1;
Was setze ich für ftstring und ptubknown ein?

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von hde »

@Matze,
Ich bin sicher dass es eine Lösung gibt, aber irgendwie blick ich bei dir nicht wirklich durch und erkenne deshalb dein Problem nicht.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von mse »

Matze hat geschrieben: params.createparam(ftstring,'X',ptunknown).value:= var1;
Was setze ich für ftstring und ptubknown ein?
Probiere doch mal ftstring und ptunknown. ;-)
tparams.createparam ist so definiert:

Code: Alles auswählen

 
    Function  CreateParam(FldType: TFieldType; const ParamName: string; ParamType: TParamType): TParam;
 
Deine var1 ist vom typ string, daher ist FldType ftstring sicher nicht falsch. TParamType ist

Code: Alles auswählen

  TParamType = (ptUnknown, ptInput, ptOutput, ptInputOutput, ptResult);
 
Mir ist im Moment nicht klar, ob ptIinput meint in Richtung Datenbank oder in Richtung TParam, daher ftUnknown, Zeos wird's schon richten. :-)

Matze
Beiträge: 32
Registriert: Di 11. Jun 2013, 17:11

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von Matze »

Ich bin sicher dass es eine Lösung gibt, aber irgendwie blick ich bei dir nicht wirklich durch und erkenne deshalb dein Problem nicht.

OK, ich lasse mal das warum weg und schreibe was ich machen will:
Einen Datensatz anlegen mit dem DBNaviagator.
Der DBNavigator ist mit einer ZQuery Komponente verbunden.
Auch das DBGrid hängt an dieser ZQuery.
Die Eigenschaft UpdateQject von ZQuery wird mit einer ZUpdateSQL Komponente verbunden.
Die Eigenschaft InsertSQL derZUpdate Komponente wird der SQL Text zur Laufzeit übergeben ( InsertSQL.Add(' ............ usw.)
Die Daten für die Felder werden per DBEdit oder DBLookupComboboxen im Formular übergeben.
ABER: Ein Feld, soll den Wert aus einer Variablen übernehmen. Dafür soll es keine DBLookup oder DBEdit Komponente geben, WEIL, dieser Wert ist bekannt.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von mse »

Funktioniert denn

Code: Alles auswählen

 
params.createparam(ftstring,'X',ptunknown).value:= var1;
 
nicht?

Matze
Beiträge: 32
Registriert: Di 11. Jun 2013, 17:11

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von Matze »

Nein, beim Kompilieren wird angezeigt:
start.pas(901,32) Error: Identifier not found "ftstring"
start.pas(901,46) Error: Identifier not found "ptunknown"

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von mse »

ftString und ptUnknown sind in der unit db definiert.

Code: Alles auswählen

 
uses
 [...]db,[...];
 

Matze
Beiträge: 32
Registriert: Di 11. Jun 2013, 17:11

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von Matze »

Danke! Ja, dann gib es beim Kompilieren keine Fehlermeldung mehr. Aber den Wert aus der Variablen bekomme ich immer noch nicht in das Insert Kommando.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von mse »

Dann sieht dein code jetzt so aus:

Code: Alles auswählen

 
  Var1 := 'xyz';
  with DM.ZUpdateSQL do
  begin
[...] 
 
    InsertSQL.Clear;
    InsertSQL.Add('  INSERT INTO tbl_tabelle   ');
    InsertSQL.Add('  (Feld1,                   ');
    InsertSQL.Add('  (Feld2,                   ');
    InsertSQL.Add('  (Feld3,                   ');
    InsertSQL.Add('   Feld4)                   ');
    InsertSQL.Add('  VALUES                    '); 
    InsertSQL.Add('  (:Feld1,                  '); 
    InsertSQL.Add('   :Feld2,                  '); 
    InsertSQL.Add('   :X,                      '); 
    InsertSQL.Add('   :Feld4)                  '); 
    params.createparam(ftstring,'X',ptunknown).value:= var1;
[...]
 
und trotzdem hast du bei einem insert NULL in Feld3? Sind die anderen Felder in Ordnung? Was meinen die Zeos Spezialisten dazu? Unterstützt Zeos keine nicht-Feld-Parameter in SQL statements? Ich werde mal in den Code schauen.

Edit: Da stimmt wohl etwas mit den Klammern nicht...
Zuletzt geändert von mse am Mi 2. Okt 2013, 21:46, insgesamt 1-mal geändert.

Matze
Beiträge: 32
Registriert: Di 11. Jun 2013, 17:11

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von Matze »

Genau.
Ersetze ich das :X durch :Feld3 und fülle Feld3 über ein DBEdit wird der Datensatz ohne Fehlermeldung angelegt.
Mit einer DBLookupCombobox geht es auch.

Und un diesem Beispiel mit ZQuery funktioniert der Parameter X

Code: Alles auswählen

begin
  Var1 := 'xyz';
  with DM.ZQuery do
  begin
    Active := False;
    SQL.Clear;
    SQL.Add('  SELECT                      ');
    SQL.Add('    T.Feld1,                  ');
    SQL.Add('    T.Feld2,                  ');
    SQL.Add('    T.Feld3,                  ');
    SQL.Add('    T.Feld4                   ');
    SQL.Add('  FROM                        ');
    SQL.Add('    tbl_tabelle T,            ');
    SQL.Add('  WHERE                       ');
    SQL.Add('    T.Feld3   LIKE :X         ');
    Params.ParamByName('X').Value := Var1;
    Active := True;
    Open;
  end;
end;  
Zuletzt geändert von Matze am Mi 2. Okt 2013, 20:08, insgesamt 1-mal geändert.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von mse »

Matze hat geschrieben:Genau. Ersetze ich das :X durch :Feld3 und fülle Feld3 über ein DBEdit wird der Datensatz ohne Fehlermeldung angelegt.
Welche Fehlermeldung gibt es denn mit dem :X parameter?

Matze
Beiträge: 32
Registriert: Di 11. Jun 2013, 17:11

Re: Zeos - ZUpdateSQL - Params.ParamByName geht nicht

Beitrag von Matze »

SQL Error: Cannot add or update a cild row: a foreign key constraint fails ........
Habe noch ein Label auf das Formular gesetzt, welches mir den Inhalt der Variablen ausgibt. Und so weiss ich, dass die Variable den Wert zu diesem Zeitpunkt auch hat.

Antworten