![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: IBX
IBTable.Locate funktioniert nicht bei FB Dialekt 3
Hallo!
Ich stelle gerade eine Anwendung um die zum Teil Daten über einen TIBTable einfügt. Zuerst wird geschaut ob die Daten schon da sind und dann halt entweder ein neuer Eintrag (Insert) angelegt oder der alte aktualisiert (Edit). Der Code sieht so aus:
Delphi-Quellcode:
Seltsamerweise liefert das Locate immer ein False, auch wenn der Eintrag eindeutig schon da ist. Und das nur wenn ich's an einer DB die mit Dialekt 3 erzeugt wurde teste, bei einer alten DB geht's. :wall:
with DADataMod.tblPatients do
begin Open; if Locate('Patient_Id', fPatGuid, []) then Edit else insert; <Snip> Hilfe!?!? |
AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3
Hallo,
und wie sieht es mit TIBQuery aus ? Vielleicht hilft ja ein FetchAll ? Heiko |
AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3
Zitat:
Also, Mini-Table:
Code:
drin eine Zeile mit den Daten 123 / "123" / "abc"
CREATE TABLE NEW_TABLE (
INTFIELD INTEGER, STRFIELD CHAR(5), VARCHARFIELD VARCHAR(5) ); Die Query "Select * From New_TAble where StrField='123'" liefert den Eintrag. Lies ich dann allerdings das Feld "StrField" aus, krieg ich "123_________________" -> "123" und 17 Leerzeichen Frag ich die Länge via SQL ab ("Select Char_Length(StrField) ...") liefert Firebird den Wert 5. (das kann ich noch verstehen, ist halt kein VarChar) Und zu allem Überdruss: Bei folgendem Code funktioniert das Locate am integer- und am VarChar-Field, nicht aber am Char-Field. Kacke!
Delphi-Quellcode:
IBTable1.Open;
if IBTable1.Locate('IntField', 123, []) then ShowMessage('Int found!'); // OK! if IBTable1.Locate('StrField', '123', []) then ShowMessage('Str found!'); // not found if IBTable1.Locate('VarCharField', 'abc', []) then ShowMessage('VarChar found!'); // OK IBTable1.Close; |
AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3
Zitat:
Firebird scheint zu meinen char(5) ist ein 20-Zeichen langer String und padded (wie ![]() Nur: Wie kommt fb auf die blöde Idee das Feld zu verlängern?!? Versteh das nicht. Soll ich nun die ganzen Char-Felder in VarChar umbauen?!? |
AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3
Hallo,
habe schon lange nichts mehr mit IBX gemacht, aber Jeff Overcash hat IMHO TIBTable und TIBQuery ausschließlich dafür gemacht, damit BDE-Anwendungen schnell konvertiert werden können, mit der Maßgabe TIBTable und TIBQuery dann durch TIBDataset zu ersetzen. Was passiert bei TIBDataset (anstelle von TIBQuery)? ![]() Grüße P.S.: Ich sags nochmal, bringt zwar nichts, aber dennoch: IBX und Firebird sind nicht wirklich kompatibel bzw. Jeff hat schon 2000 klar gestellt, dass er Firebird mit den IBX nie unterstützen wird. |
AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3
Zitat:
mit loPartialKey würd's gehen, aber da bleibt das Problem, dass beim Auslesen der viel zu lange String zurückgegeben wird. In den Feldern sind in der App an der ich arbeite GUIDs drin, immer 32 Zeichen lang. Das Feld ist als Char(32) definiert, und jetzt spinnt Delphi herum und gibt die Guids mit ewig vielen trailing spaces zurück :( Beim Auslesen an zig-hundert Stellen ein Trim() herumzuwickeln ist eine potentielle Fehlerquelle, gefällt mir garnicht. |
AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3
Zitat:
|
AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3
Hi,
habe das eben mal mit den IBDAC nachvollzogen und mit den IBX verglichen (Delphi XE): Die IBX zeigen das Verhalten, die IBDAC nicht, d.h. das liegt nicht an Firebird sondern an den IBX. Wobei wir dann wieder da wären was ich oben schon geschrieben habe: IBX und Firebird passen halt einfach nicht mehr zusammen... Grüße |
AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3
Habe es hier auch mal mit FibPlus getestet. Die IBX haben keine Option die Felder direkt zu trimmen. Bei mir heisst die : poTrimCharFields. Standard ist da true, deshalb fiel mir das Verhalten bisher auch nicht auf. Getestet mit D7. In D2009 finde ich Interbase gerade nicht. :mrgreen: Vielleicht gibts ja da was.
|
AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3
Mönsch Hansa ;-)
Recht hast Du. Ist bei IBDAC auch so... da gibts auch ne entsprechende Option... Allerdings ist mir jetzt noch aufgefallen, dass die CHAR(30) genau 30 Zeichen lang sind, da wird aber keine weiteren Chars angehängt wie oben beschrieben... seltsam... hängt dann vielleicht auch noch an der IBX-Version? Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz