AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi IBTable.Locate funktioniert nicht bei FB Dialekt 3
Thema durchsuchen
Ansicht
Themen-Optionen

IBTable.Locate funktioniert nicht bei FB Dialekt 3

Ein Thema von ralfiii · begonnen am 9. Mär 2011 · letzter Beitrag vom 1. Apr 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#1

IBTable.Locate funktioniert nicht bei FB Dialekt 3

  Alt 9. Mär 2011, 15:59
Datenbank: Firebird • Version: 2.1 • Zugriff über: IBX
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:
with DADataMod.tblPatients do
begin
  Open;
  if Locate('Patient_Id', fPatGuid, [])
  then
      Edit
  else
      insert;
  <Snip>
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.

Hilfe!?!?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3

  Alt 9. Mär 2011, 16:51
Hallo,

und wie sieht es mit TIBQuery aus ?
Vielleicht hilft ja ein FetchAll ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#3

AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3

  Alt 10. Mär 2011, 11:05
und wie sieht es mit TIBQuery aus ?
Funny!

Also, Mini-Table:

Code:
CREATE TABLE NEW_TABLE (
    INTFIELD     INTEGER,
    STRFIELD     CHAR(5),
    VARCHARFIELD VARCHAR(5)
);
drin eine Zeile mit den Daten 123 / "123" / "abc"

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;
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#4

AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3

  Alt 10. Mär 2011, 11:39
Code:
CREATE TABLE NEW_TABLE (
    STRFIELD     CHAR(5)
);
...lies ich dann allerdings das Feld "StrField" aus, krieg ich
"123_________________" -> "123" und 17 Leerzeichen
Genau betrachtet scheint das das Problem zu sein.
Firebird scheint zu meinen char(5) ist ein 20-Zeichen langer String und padded (wie hier beschreiben) mit Leerzeichen.
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?!?
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.395 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3

  Alt 10. Mär 2011, 11:48
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)?

http://entwickler-forum.de/archive/i...p/t-25472.html

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.

Geändert von Lemmy (10. Mär 2011 um 11:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#6

AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3

  Alt 10. Mär 2011, 12:38
Was passiert bei TIBDataset (anstelle von TIBQuery)?
Komplett gleiches Verhalten
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.

Geändert von ralfiii (10. Mär 2011 um 12:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#7

AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3

  Alt 15. Mär 2011, 10:34
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.
Das ist mir leider neu.
Ich hab ein wenig getestet und werd auf IBDAC umrüsten. Das scheint ziemlich flott von statten zu gehen.

Die IBDAC-Jungs müssen nur noch ihr Bestellsystem reparieren, 300$ sind nicht 260Euro sondern 216...

Danke für eure Hilfe!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3

  Alt 10. Mär 2011, 13:46
Soll ich nun die ganzen Char-Felder in VarChar umbauen?!?
Entweder das, oder TRIM beim Abfragen der Datensätze (also im SelectSQL) direkt verwenden, oder eben bei der Verarbeitung im Programm per Delphi,
Gruß
Hansa
  Mit Zitat antworten Zitat
DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3

  Alt 25. Mär 2011, 11:30
Hallo,

habe dieses Problem schon bei Turbodelphi gesehen und irgendwie gelöst.

taucht nun in delphi xe - diesmal für mich unlösbar - wieder auf:

ibtable1.Locate('Name',edit1.text,[loPartialKey]) funktioniert
ibtable1.Locate('Name',edit1.text,[]) funktioniert nicht !!, das heißt, man kann nicht nach genauer Schreibweise suchen!!

Scheint an den tlocateoptions zu liegen!

Wäre nicht schlecht, wenn es dafür eine Lösung gäbe

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#10

AW: IBTable.Locate funktioniert nicht bei FB Dialekt 3

  Alt 25. Mär 2011, 12:16
Wäre nicht schlecht, wenn es dafür eine Lösung gäbe
Gibt es.
Weg von IBX oder Interbase statt firebird verwenden.
Geht leider nicht anders.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 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