Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   FDQuery und Kleinschreibung (https://www.delphipraxis.net/189788-fdquery-und-kleinschreibung.html)

Rainer Wolff 21. Jul 2016 09:41

Datenbank: Firebird • Version: 2.5 • Zugriff über: Firedac

FDQuery und Kleinschreibung
 
Ich kann zwar das Problem umgehen, aber ich würde es gern verstehen:

Ich tausche gerade in einem Projekt TSQLQuery durch TFDQuery. An der Query hängt ein Datasetprovider mit Clientdataset. Mein sql-Statement lautet (alles klein geschrieben)

select * from moule

Also ziemlich simpel und einfach. Im Projekt wird irgendwo ein Clientdataset.insert gefolgt von einem Post gemacht. Dabei kommt eine Exception Tabelle nicht gefunden und im Call stack sehe ich, im SQL Statement steht ein:

Insert into "moule" ...

Also Tabellenname in Kleinschrift mit Anführungszeichen. Firebird macht per Default immer Großschrift, daher Tabelle nicht gefunden.
Nun mach ich einen Unit-Test für das Insert, und siehe da, der Test läuft durch. In dem SQL Statement steht

Insert into "MOULE"

Nun stellt sich die Frage: Warum? Projekt und Test benutzen die selbe Verbindung, die selben Parameter.

MichaelT 23. Jul 2016 11:10

AW: FDQuery und Kleinschreibung
 
Liste der Anhänge anzeigen (Anzahl: 2)
Das von dir beschriebene Verhalten ist in Berlin nicht zu reproduzieren. So ich das verstanden habe. Möglw. ist eine Einstellung bei der Query geändert. Deswegen sollten wir mal schauen was ankommt usw...

Monitore einfach das Statement im FireDAC Monitor. Ich habe die TFDQuery einfach genommen wie sie in der Tool Palette verweilte.

rd = TFDMoneRemoteClientLink. Der macht die Verbindung zwischen Applikation und FireDAC Monitor. Du kannst aber genauso ein File mitschreiben. Dann siehst du was ankommt bei der DB.

Delphi-Quellcode:

procedure TForm1.bnMemTabClick(Sender: TObject);
begin

  if not fdc.Connected then fdc.Connected:=true;
(*  cmd.Active:=true;
  cmd.CommandText.Clear;
  cmd.CommandText.add('select * from Customer');
  if not memt.Active then memt.Active:=true;
  lbx.Items.Add(IntToStr(memt.RecordSize));*)
  qry.Close;
  qry.SQL.Clear;
  qry.SQL.Add('select * from customer');
  qry.Active:=true;
  if not cds.Active then cds.Active:=true;

Delphi-Quellcode:

procedure TForm1.bntestClick(Sender: TObject);
begin
  try
    if not rcl.Tracing then rcl.tracing:=true;
    cds.Insert;
    cds.FieldByName('CUST_NO').AsString:='9990';
    cds.FieldByName('CUSTOMER').AsString:='Bunny';
    cds.Post;
    cds.ApplyUpdates(-1);
  finally
    rcl.tracing:=false;
  end;
end;

Zitat:

Zitat von Rainer Wolff (Beitrag 1343117)
Ich kann zwar das Problem umgehen, aber ich würde es gern verstehen:

Ich tausche gerade in einem Projekt TSQLQuery durch TFDQuery. An der Query hängt ein Datasetprovider mit Clientdataset. Mein sql-Statement lautet (alles klein geschrieben)

select * from moule

Also ziemlich simpel und einfach. Im Projekt wird irgendwo ein Clientdataset.insert gefolgt von einem Post gemacht. Dabei kommt eine Exception Tabelle nicht gefunden und im Call stack sehe ich, im SQL Statement steht ein:

Insert into "moule" ...

Also Tabellenname in Kleinschrift mit Anführungszeichen. Firebird macht per Default immer Großschrift, daher Tabelle nicht gefunden.
Nun mach ich einen Unit-Test für das Insert, und siehe da, der Test läuft durch. In dem SQL Statement steht

Insert into "MOULE"

Nun stellt sich die Frage: Warum? Projekt und Test benutzen die selbe Verbindung, die selben Parameter.



Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 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