@ub60 hab ich natürlich auch probiert, ändert sich aber nichts, nur die Zugriffszeiten werden extrem lang, warum auch immer.
Habe ein kleines Testprojekt gebastelt, das Schema und die TESTTABLE sind mit Charset
utf8mb4 angelegt.
Das Merkwürdige ist, dass 'Öffnungsüberwachung' nicht korrekt abgebildet wird, andere Worte mit Umlauten aber schon.
Bsp funktionert 'Öffnungüberwachung' (ohne das s) und auch 'Öffnungs-überwachung'.
Aber '
Äffnungsüberwachung' und '
Üffnungsüberwachung' funktionieren nicht.
Egal ob in der Connection-Komponente "AutoEncodeStrings" ein- oder ausgeschaltet ist.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95:
| unit UMain;
{$mode objfpc}{$H+}
interface
uses Classes , SysUtils , Forms , Controls , StdCtrls , ZConnection , ZDataset
;
type
TForm1 = class(TForm) BtnDoIt : TButton; EDIn : TEdit; EDOut : TEdit; MemoIn : TMemo; MemoOut : TMemo; ZConnection1 : TZConnection; QIn : TZQuery; QOut : TZQuery; Label1 : TLabel; procedure BtnDoItClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ZConnection1AfterConnect(Sender: TObject); private LID : Integer; public
end;
var Form1: TForm1;
implementation
{$R *.lfm}
procedure TForm1.BtnDoItClick(Sender: TObject); begin EDOut.Clear; MemoOut.Clear;
With QIn do begin SQL.Clear; SQL.Add('INSERT INTO ANCA.TESTTABLE SET '); SQL.Add('KTEXT = :KTEXT, LTEXT = :LTEXT '); ParamByName('KTEXT').AsString := EDIn.Text; ParamByName('LTEXT').AsString := MemoIn.Text; ExecSQL; SQL.Clear; SQL.Add('SELECT last_insert_id() AS LID '); Open; LID := FieldByName('LID').AsInteger; Close; end; With QOut do begin SQL.Clear; SQL.Add('SELECT * FROM ANCA.TESTTABLE WHERE ID = :ID '); ParamByName('ID').AsInteger := LID; Open; EDOut.Text := FieldByName('KTEXT').AsString; MemoOut.Text := FieldByName('LTEXT').AsString; Close; end;
EDIn.SetFocus; end;
procedure TForm1.FormCreate(Sender: TObject); begin ZConnection1.Connected := True; end;
procedure TForm1.ZConnection1AfterConnect(Sender: TObject); begin Label1.Caption := 'Connected'; end; |
Verwende ich aber statt dessen die Konvertierung bei der Übergabe der Parameter
funktioniert es. Da muss es also irgendwo einen versteckten Konverter geben, der die
Konvertierung vom Inhalt abhängig macht, schon eigenartig.
Delphi-Quelltext
1: 2:
| ParamByName('KTEXT').AsUTF8String := EDIn.Text; ParamByName('LTEXT').AsUTF8String := MemoIn.Text; |
Bitte nicht über meine Formatierung oder "with" wundern, das ist halt so drin, in den Fingern