Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi NexusDB Select eines Strings geht nicht (https://www.delphipraxis.net/133870-nexusdb-select-eines-strings-geht-nicht.html)

Roadrunner.1 11. Mai 2009 09:39

Datenbank: NexusDB • Version: 2 • Zugriff über: NexusDB Enterprise Manager

NexusDB Select eines Strings geht nicht
 
Hallo zusammen,

scheinbar bin ich einfach zu blöd, oder seh' den Wald vor Bäumen nicht.
OK es ist meine erste Datenbank die ich (versuche) zu programmieren, aber
so ganz unwissend bin ich trotzdem nicht.

Also, nachdem ich NexusDB (embendded) installiert und via SQL auch eine Tabelle
angelegt sowie einige Datensätze angelegt habe, versuche ich nun
via SELECT darauf zuzugreifen, und scheitere. Und das selbst mit dem
DBBrowser.

Ich habe eine einfache Tabelle mit 2 Spalten angelegt:
Delphi-Quellcode:
    SQL.Add('CREATE TABLE TREIHE (');
    SQL.Add('TREIHEID AUTOINC NOT NULL PRIMARY KEY, ');
    SQL.Add('REIHE VARCHAR(16) );');
Wenn ich nun folgenden SQL-Befehl via DBBrowser losschicke
funktioniert alles so wie gewünscht:

SELECT * FROM "TREIHE" Where TReiheID < 100;

Versuch ich aber:
SQL-Code:
SELECT * FROM "TREIHE" Where Reihe = 'Classic';
dann erhalte ich keine Datensätze zurück obwohl mehrere tausend
dem Suchkriterium entsprechen. Was mach ich falsch? :gruebel:

[edit=mkinzler]Diverse Tags eingefügt Mfg, mkinzler[/edit]

mkinzler 11. Mai 2009 09:47

Re: NexusDB Select eines Strings geht nicht
 
Steht da genau 'Classic' drin? Groß-/Kleinschreibung?

Elvis 11. Mai 2009 09:51

Re: NexusDB Select eines Strings geht nicht
 
Zitat:

Zitat von mkinzler
Steht da genau 'Classic' drin? Groß-/Kleinschreibung?

Oder sogar Leerzeichen vorne/hinten?
Wenn die Spalten als Char und nicht als VarChar angelegt werden, werden die Werten hinten mit Leerzeichen aufgefüllt.

Roadrunner.1 11. Mai 2009 10:26

Re: NexusDB Select eines Strings geht nicht
 
Ja, Groß/Kleinschreibung ist richtig, ich habe sogar den String per
Copy&Paste aus der Tabelle in die SQL-Abfrage kopiert.

Leerzeichen denke ich sollen nicht drin sein, wobei ich Leerzeichen
hinten auch damit ausgeschlossen habe indem ich in die Abfrage bis
zu 16 Leerzeichen hinzugefügt habe.

Das mit Char war sogar mein 1. Versuch. Aber auch dort funktionierte
es nicht, selbst wenn ich in den Select Leerzeichen hinten anfügte.

btw. Ich mach mit diesem Select nun schon ca. 4h rum, und hab' alles
ausprobiert was mir eingefallen ist, bevor ich hier postete.

Hier noch der Insert Befehl mit dem ich die Zeilen erstelle
vielleicht ist ja dort noch ein Fehler, mit diesem String zusammensetzen
in Delphi hab' ich es nicht so. Insbesondere wenn dort ' Zeichen mit drin
vorkommen.

Delphi-Quellcode:
    SQL.Clear;
    SQL.Add('INSERT INTO TREIHE ');
    SQL.Add('(REIHE)');
    SQL.Add('VALUES (''');
    SQL.Add(_s);
    SQL.Add(''');');
    ExecSQL;
wobei _s sich aus einem Array of String ergibt:

CS_Reihe : array[TModellreihe] of string = (
'',
'*****',
'Classic',
'Modern',
'Elegant',
'*****'
);

Und nur die 3 Einträge mit sinnvollem Inhalt in der DB gespeichert werden.

[edit=mkinzler] Mfg, mkinzler[/edit]

DeddyH 11. Mai 2009 10:36

Re: NexusDB Select eines Strings geht nicht
 
Steht das jetzt alles in einem Feld? Was kommt denn bei einem
SQL-Code:
SELECT Reihe FROM TReihe
heraus? 3 Datensätze oder nur einer?

Roadrunner.1 11. Mai 2009 10:57

Re: NexusDB Select eines Strings geht nicht
 
Nein nein, da kommen fast 50.000 Einträge raus. In _s ist immer nur
einer der Strings drin. Und dieser wird direkt daraus kopiert.

Code:
pseudocode: _s:=CS_Reihe[TModellreihe(1)];
Ich wollte damit nur zeigen das die Einträge in der DB konstante
Strings sind (aus Delphi Sicht), und (unter Delphi) da nichts davor
oder danach kommt (Leerzeichen, Tabulatoren, Zeilenendezeichen, usw.).
SQL-Code:
Begin von SELECT * FROM TREIHE:
TREIHEID REIHE
1 Elegant
2 Classic
3 Classic
4 Classic
5 Classic
6 Classic
7 Classic
...

Das zeigt der DBBrowser ja auch alles richtig an. Da aber niemand sonst
darüber berichtet das in NexusDB keine Selects funktionieren, denk ich
das ich den Fehler mach, nur seh' ich nicht wo.

[edit=mkinzler]Diverse Tags eingefügt Mfg, mkinzler[/edit]

DeddyH 11. Mai 2009 11:07

Re: NexusDB Select eines Strings geht nicht
 
Moment, ich dachte, TReihe ist eine Stammdatentabelle. Dann macht es aber keinen Sinn, dieselben Einträge mehrfach zu speichern.

mkinzler 11. Mai 2009 11:11

Re: NexusDB Select eines Strings geht nicht
 
Es geht doch nichts über (richtiges) Vertändnis der Noramlisierung :zwinker:

hoika 11. Mai 2009 11:38

Re: NexusDB Select eines Strings geht nicht
 
Hallo,

zeig doch mal deinen Delphi-Code rund um das Select.


Heiko

Roadrunner.1 11. Mai 2009 12:38

Re: NexusDB Select eines Strings geht nicht
 
1. Das soll meine Stamdatendatei werden, da soll später auch nur
für jede Zeile was anderes stehen, aktuell versuch ich erstmal
überhaupt einen Select auszuführen.

2. Normalisieren, ist das was ich machen will, denn die Ausgangsdaten
sind nichtmal in 1. Normalform. Aber gerade dafür brauch ich einen
Select um herauszufinden ob der entsprechende Eintrag schon exsistiert.

3. Delphicode rund um den SELECT ist insoweit irrelevant, da der von mir
verwendete SELECT Befehl schon im DBBrwoser von Nexus nicht funktioniert.
Genau das ist ja mein aktuelles Problem. Das dann in Delphi auch hinzubekommen,
das wäre dann der 2. Schritt.

Was ich also nicht schafe ist das, was ich ganz zu anfang schon schrieb,
im DBBrowser den Befehl
SQL-Code:
SELECT * FROM "TREIHE" Where Reihe = 'Classic'
auszuführen und dabei auch ein ergebnis zu erhalten.

Irgentwelche Ideen was man dabei beachten muss?

[edit=mkinzler]SQL-Tag eingefügt Mfg, mkinzler[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr.
Seite 1 von 2  1 2      

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