Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi InterBase 2009, UTF8 und dbExpress (https://www.delphipraxis.net/151417-interbase-2009-utf8-und-dbexpress.html)

mjustin 17. Mai 2010 11:39

Datenbank: InterBase • Version: 2009 • Zugriff über: dbExpress

InterBase 2009, UTF8 und dbExpress
 
Hallo,

hat hier eventuell schon jemand Erfahrung mit dieser Kombination (InterBase 2009, UTF8 und dbExpress)?

Es gibt beim Ausführen eines Updates über diese Komponenten

SQLConnection -> SQLQuery -> DataSetProvider -> ClientDataSet -> DataSource -> DBEdit

den Fehler "Datensatz nicht gefunden oder von einem anderen Benutzer geändert"

Ein direktes Update über eine TSQLQuery dagegen funktioniert.

Der Delphi - Code besteht aus zwei Button-OnClick Handlern

Delphi-Quellcode:
ClientDataSet1.Open;
ClientDataSet1.Edit;
und

Delphi-Quellcode:
ClientDataSet1.Post;
ClientDataSet1.ApplyUpdates(-1);
sowie dem OnReconcile Handler

Delphi-Quellcode:
procedure TMainForm.ClientDataSet1ReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  ShowMessage('Reconcile ' + E.Message);
end;
Update: anscheinend bin ich auf einen alten Bug gestossen, der in Delphi 2010 Update 4 endlich gefixt ist:

http://qc.embarcadero.com/wc/qcmain.aspx?d=71984

Zitat:

When I pull some data into a TClientDataset using a Provider with UpdateMode := upWhereAll, and then i apply updates to a changed record: If some of the string fields in the record being updated are blank (but not null) I get "Record not found or changed by another user" because the update statement is sending `where myStringField is null` instead of `where myStringField = ""`
Der Fehler ist mit WIN1252 Feldern jedoch nicht aufgetreten, fragt mich nicht warum ...

Nachtrag:

Statt zwei Quotes

Delphi-Quellcode:
BindText := '(' + BindTextField + ' is null or ' + BindTextField + ' = "") and'; // <-- Quotes you use will depend on your SQL server.
für InterBase mit 4 Apostroph:

Delphi-Quellcode:
BindText := '(' + BindTextField + ' is null or ' + BindTextField + ' = '''') and'; // <-- Quotes you use will depend on your SQL server.


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