Spaltenbezeichnung mit Leerzeichen
-
Hallo,
ich habe mir ein kleines Tool geschrieben, was alle Tabellen und deren Spalten nach einem vom Nutzer eingegebenen Suchbegriff filtern soll. Dies Funktioniert alles einwandfrei! Problem ist nur, es Tabellen, wo die Spaltenbezeichnung ein Leerzeichen enthält. Beim Auslesen wird dann nur der Teil vor dem Leerzeichen zum filtern verwendet und dann bekomme ich logischerweise eine Exeption, weil es diese Spalte nicht gibt.
Wie kann ich dies Abfangen??Und noch eine Frage:
Wie kann ich Überprüfen welche Spalte welchen Typ(float,int...) hat?Schonma schön Dank
Gruss Dav
-
keiner ne Idee???
-
Hallo Dav,
wenn du eine Antwort auf deine Frage möchtest, würde ich zuerst mal erklären von welchen Tabellen du sprichst. Weiterhin wäre es nicht schlecht, wenn du ein paar Zeilen von deinem Quelltext postest, da unsere Glaskugel mal wieder defekt ist
Gruß Skay
-
Hi,
z.B. in der Tabelle Biolife aus der DB BCDEMOS gibt es eine Spalte "Species Number". Da ist ja ein Leerzeichen enthalten. Beim auslesen wird nur der Teil vor dem Leerzeichen verwenden und der Rest wird weggeschnitten. Wie bekomme ich den kompletten String heraus?
suchbegriff=Edit1->Text; for(int i=0;i<tablelist->Count;i++) { table=tablelist->Strings[i]; Query1->Active = false; Query1->SQL->Clear(); Query1->SQL->Add("Select * from " + table); Query1->Active = true; for(int z=0;z<Query1->FieldCount;z++) { Query1->Filter = Query1->FieldDefList->Strings[z] + "='" + suchbegriff + "'"; Query1->Filtered = true;//Hier ist dann Fehler wegen falschem Spaltennamen .......
Mfg
-
Hast Du schon versucht die Spaltennamen in Anführungszeichen zu setzen?
z.B.:Query1->Filter = "\"" + Query1->FieldDefList->Strings[z] + "\"='" + suchbegriff + "'";
Gruß,
Alexander
-
geht nicht! Bekomme Fehlermeldung wegen ungültigen Filterausdruck, ungültiges Zeichen """!
-
Dann würde mir noch einfallen, das SQL-Statement anders zu formulieren.
Anstatt '*' einfach alle Felder auflisten (das kann man ja zur Not auch
dynamisch machen) und bei allen Feldnamen (Spaltennamen), die ein Leerzeichen
enthalten, einen Alias angeben.
Ich stelle mir das so vor:Query1->SQL->Add("Select \"Species Number\" as Species_Number from " + table);
Vielleicht muß man auch die Anführungszeichen weglassen, ich weiß nicht,
welche Datenbank Du verwendest.Gruß,
Alexander
-
Hmm... Laut MySQL-Syntax werden Feldnamen in " ` " - Anführungszeichen geschrieben. Und Anführungszeichen brauchst du jeden Fall bei mehrwortigen Feldnamen.
-
Dasd schrieb:
Hmm... Laut MySQL-Syntax werden Feldnamen in " ` " - Anführungszeichen geschrieben.
In Sybase Adaptive Server Anywhere werden keine Hochkommas (') sondern
Anführungszeichen (") verwendet. Das ist also scheinbar abhängig von der
verwendeten Datenbank. Wer weiß, welchen Weg Access geht?Gruß,
Alexander
-
Dav schrieb:
ich habe mir ein kleines Tool geschrieben, was alle Tabellen und deren Spalten nach einem vom Nutzer eingegebenen Suchbegriff filtern soll. Dies Funktioniert alles einwandfrei! Problem ist nur, es Tabellen, wo die Spaltenbezeichnung ein Leerzeichen enthält.
Welche SQL Datenbank mit welchem ODBC Treiber fragst Du denn ab?
Dav schrieb:
Wie kann ich Überprüfen welche Spalte welchen Typ(float,int...) hat?
Und auch hier die Frage nach dem SQL Server.
-
@ DMarko
Also ich glaub nicht das der Treiber hier ne wichtige Rolle spielt!
Ich benutze die vom Borland C Builder mitgelieferte DB "BCDEMOS".
Meine Abfragen mache ich über das Query Object vom C-Builder.
Mein Problem ist halt nur, wenn die Spaltenbezeichnungen ein Leerzeichen enthalten.Das mit den Datentypen hab ich hinbekommen, ist ja nur eine eigenschaft von Fielddefs.
Gruss Dav
-
Dav schrieb:
Problem ist nur, es Tabellen, wo die Spaltenbezeichnung ein Leerzeichen enthält.
ähm, dass sollte man eh unterlassen.
-
AndreasW schrieb:
ähm, dass sollte man eh unterlassen.
Ich weiss, ich würde das ja auch nie machen. Nur gibt es da halt solche Tabellen mit solchen Spaltenbezeichnungen. Weiss auch nicht warum man dies gemacht hat?!?!
Gruss Dav
-
So...
Nochma mein Problem bissl anders formuliert:
In der Datenbank BCDEMOS gibt es eine Tabelle "biolife.db". In der Tabelle gitb es eine Spalte mit dem Name "Species Name". Problem ist das Leerzeichen zwischen Species und Name.
Beim SQL String "Select * from biolife.db where Species Name = ..." gibt es einen Fehler.Wie kann ich dennoch die Abfrage machen.
-
Also bei MS_SQL ist in diesem Fall
Select * from biolife.db where [Species Name] = Hund
wohl die Lösung.
Versuchs mal mit den eckigen Klammern...
-
MikeSPK schrieb:
Also bei MS_SQL ist in diesem Fall
Select * from biolife.db where [Species Name] = Hund
wohl die Lösung.
Versuchs mal mit den eckigen Klammern...Hab ich schon Probiert, bekomme aber Fehler:
"Ungültiger Symbol String [Species"
-
SQL = "SELECT * FROM biolife.db WHERE biolife.db.'species name' = 'Variola louti'"; // oder SQL = "SELECT * FROM biolife.db bldb WHERE bldb.'species name' = 'Lutjanus sebae'"; // oder SQL = "SELECT * FROM biolife.db bl WHERE bl.\"species name\" = 'Pterois volitans'";
Getestet am FishFact-Beispielprojekt des BCB.
Quelle: Borland Newsgroups
-
So hab ne Lösung gefunden!
das mit den [ - Klammer hat funktioniert, man muss dies nur als String schreiben.Select "[Species Name]" from biolife.db
Mfg
-
Deinen Vorschlag kann ich nicht nachvollziehen, das funktioniert hier nicht (o.g. FishFactProjekt). Der Spaltenname wird zwar nicht bemängelt, es werden aber keine Ergebnisse zurückgegeben.
Kannst du bitte nochmal einen kompletten SQL-String posten (inklusive Escape-Sequencen für die Anführungszeichen etc.), der sich 1:1 einem TQuery zuweisen lässt?
-
Ja stimmt, du hast recht. Es gibt keine Ergebnisse! Bemängelt wird dieser Ausdruck aber auch nicht!
Mfg