Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensatz wird nicht gefunden (https://www.delphipraxis.net/44060-datensatz-wird-nicht-gefunden.html)

Gambit 12. Apr 2005 20:12

Datenbank: FoxPro, MySQL • Version: 8, 4 • Zugriff über: ADO, Zeos

Datensatz wird nicht gefunden
 
Hi,

ich bin hier fast am verzweifeln. Eigentlich ne völlig einfache Sache: Eine FoxPro Tabelle enthält eine Spalte mit Zahlen, Spaltenname FNR. Spaltentyp ist String.

Jetzt gibt es einen DS mit FNR = 4858

wenn ich aber:

Delphi-Quellcode:
Query.Close;
Query.SQL.Text:='select * from Filme where FNR = '+quotedStr('4858') ;
Query.Open;
wird kein Datensatz gefunden.

Versteh ich nicht, ihr?

Gruß

Gambit

Hansa 12. Apr 2005 22:40

Re: Datensatz wird nicht gefunden
 
Zitat:

Zitat von Gambit
Versteh ich nicht, ihr?

Ne. :mrgreen: Welchen Typ hat FNR ?

Gambit 12. Apr 2005 22:48

Re: Datensatz wird nicht gefunden
 
Habe ich doch geschrieben, FNR ist vom Typ String oder besser Character in FoxPro ist das C

Christian Seehase 12. Apr 2005 22:56

Re: Datensatz wird nicht gefunden
 
Moin Gambit,

wenn FNR den Wert 4858 als string enthält, wiese fragst Du dann nach "4858" ab?

Hansa 12. Apr 2005 23:19

Re: Datensatz wird nicht gefunden
 
Zitat:

Zitat von Christian Seehase
wenn FNR den Wert 4858 als string enthält, wiese fragst Du dann nach "4858" ab?

Stop ! Sofern sich Foxpro an den SQL Standard hält, dann braucht man für strings schon quotes. Aber keine doppelten.

Gambit 13. Apr 2005 12:36

Re: Datensatz wird nicht gefunden
 
so wird der Datensatz gefunden:

Delphi-Quellcode:
Query.SQL.Text:='select * from Filme where TRIM (FNR) = '+quotedStr('4858') ;

Hansa 13. Apr 2005 12:55

Re: Datensatz wird nicht gefunden
 
Warum speicherst du eigentlich eine Nr. als string ? :shock: Ist ja hier schön zu sehen, daß man sich dadurch tatsächlich in einer einzigen Zeile Code 2 potentielle Stolperfallen einhandelt. Ganz zu schweigen von dem überflüssigen Code. Hoffentlich gilt das nicht auch für den Rest deines Programmes. :mrgreen:

Gambit 13. Apr 2005 13:00

Re: Datensatz wird nicht gefunden
 
Hansa, mal daran gedacht, dass die Tabelle nicht auf meinem Mist gewachsen sein könnte und ich keinen Einfluss darauf habe?

Scheinbar nicht...

RavenIV 13. Apr 2005 13:10

Re: Datensatz wird nicht gefunden
 
Zitat:

Zitat von Gambit
so wird der Datensatz gefunden:

Delphi-Quellcode:
Query.SQL.Text:='select * from Filme where TRIM (FNR) = '+quotedStr('4858') ;

ich versteh nicht, was der TRIM hier soll bzw. bewirkt.

Treffnix 13. Apr 2005 13:16

Re: Datensatz wird nicht gefunden
 
Das liefert den Wert des DB-Feldes ohne Leerzeichen am Anfang oder am Ende. Vermutlich sind die Werte aus irgendwelchen Gründen im Format '12345 ' statt '12345' in die Datenbank gelangt. Sowas kommt mal vor, wenn die Felder z.B. feste Längen haben oder auch mal beim rumimportieren...
Mit Integer wär das nicht passiert ;) So muss man sich halt ne Krücke bauen

Gambit 13. Apr 2005 13:27

Re: Datensatz wird nicht gefunden
 
genau! Ich hätte auch einen Integer genommen, weiß auch nicht, was sich die DB-Entwickler dabei gedacht haben...diese Datenbank hat auch noch viele andere Krücken wie zB doppelte DS, keine Normalisierung usw...

Hansa 13. Apr 2005 17:01

Re: Datensatz wird nicht gefunden
 
Zitat:

Zitat von Gambit
Hansa, mal daran gedacht, dass die Tabelle nicht auf meinem Mist gewachsen sein könnte und ich keinen Einfluss darauf habe?

Warum wird das dann nicht ausdrücklich erwähnt ? :shock: Also eine fremde Tabelle. 8) Das macht nicht viel aus. Du kennst ja offensichtlich schon die Felder, wie die heißen usw. ? Also ist ja wohl ein Zugriff darauf möglich und du kannst diese Krücke auch umbauen.

Gambit 13. Apr 2005 17:19

Re: Datensatz wird nicht gefunden
 
Ich habe der Einfachheit halber eine Select-Anweisung geschrieben. Es geht darum, bestimmte Datensätze aus dieser Tabelle zu löschen. Natürlich könnte ich auch Datensatz für Datensatz auslesen, gucken, ob die Zahl meinen Kriterien entspricht und dann diesen DS löschen.
Ich hätte es aber lieber mit einer schnellen Delete-Anweisung gemacht. Da werde ich um diese Krücke wohl kaum herumkommen...vorausgesetzt es handelt sich immer um konvertierbare Zahlen:

Delphi-Quellcode:
Query.SQL.Text:= 'delete from table where Int(TRIM (FNR)) > 1250';
Query.Open;


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