SQL Newbie braucht Hilfe
-
Hallo,
bekomme immer eine Fehlermeldung bei folgendem SQL String:
"select * from auftraege.db, anwender.db, software.db where kennung=kennung and softwarenummer=softwarenummer and softwarename like 'Corel%'"
Fehlermeldung: Keine Übereinstimmung der Typen im Ausdruck
Hintergrund:
alle 3 Tabellen sind Paradox7 Tabellen
Die Felder Kennung sind sowohl in der auftraege.db und in der anwender.db
Die Felder Softwarenummer sind sowohl in der auftraege.db und in der software.dbDie Query soll nun über die verlinkte softwarenummer nach dem softwarenamen suchen welcher nur in der software.db ist
Wenn ich die Bedingung softwarenummer=softwarenummer weglasse dann geht es aber das Abfrageergebnis stimmt natürlich nicht. Also mit kennug=kennung alleine kommt keine Fehlermeldung..
Der einzigste Unterschied liegt darin das in den Kennungs Feldern echte Strings stehen und in Softwarenummer Zahlen.
Alle Felder sind aber AlphanumerischBitte um Hilfe, Danke
-
Reine SQL-Fragen udgl. gehören nach "Rund um". Verschoben.
-
Ich denke mal daher das aus bcb kommt, dass du auch den bcb benutzt. Das ganze is wahrscheinlich ein AnsiString, oder liege ich da falsch?
Wenn ja kennung = kennung löst meinseerachtens den Fehler aus. Ich würde das volgendermaßer machen
String querystring = "select * from auftraege.db, anwender.db, software.db where kennung="+kennung+" and softwarenummer="+softwarenummer+" and softwarename like 'Corel%'" . softwarenummer und kennung sind in diesem fall beides Ansistrings
-
Danke für die schnelle Antwort leider bekomme ich beim Compilieren nu die Fehlermeldungen:
Undefiniertes Symbol 'kennung'
Undefiniertes Symbol 'softwarenummer'
-
ja klar also fassen wir mal zusammen:
String kennung ="deine kennung"; String softwarenummer ="123"; String Query = "select * from auftraege.db, anwender.db, software.db where kennung="+kennung+" and softwarenummer="+softwarenummer+" and softwarename like 'Corel%'"; usw.
-
ja aber so hätte ich ja feste werte drin stehen.
der soll mir aber nur die Aufträge anzeigen die über die verlinkte softwarenummer (ist ein Feld in der auftraege.db und in der software.db) Corel im Feld softwarename (feld nur in software.db) stehen haben.Wenn ich die Abfrage auf die 2 Tabellen auftraege.db und anwender.db beschränke also:
AnsiString s = "select * from auftraege.db, anwender.db, where kennung=kennung and nachname like 'Maier%'"funktioniert alles prächtig.
In der auftraege.db steht nur die kennung (verlinkt aus der anwender.db) und in der anwender.db stehen kennung und nachname
hier zeigt er mir alle auftraege an bei denen der nachname über das verlinkte kennungsfeld (denn nur das steht in der auftraege.db) mit Maier beginnt.Problem bei softwarenummer=softwarenummer ist wohl nur das in den Feldern Zahlen anstatt Text steht....
Danke nochmal für die Mühe und schnelle Antwort.
-
Nö das kann es eigendlich nich sein. Sind alle 3 Tabellen in einer Datenbank? Wenn nicht dann liegt da das Problem und in allen drei Tabellen muss es auch ein Feld namens Sowtwarenummer geben. Beachte außerdem das ach Zahlen bei SQL in '' stehen müssen (bzw. "" aber das wäre hier ja unpraktisch ;))
-
klar alle 3 Tabellen in einer Datenbank aber Softwarenummer gibt es nur in auftraege und in software.... es funktioniert aber auch nicht wenn ich es auf 2 Tabellen beschränke:
AnsiString s = "select * from auftraege.db, software.db where softwarenummer=softwarenummer and softwarename like 'Corel%'"
Kommt die gleiche Fehlermeldung Keine Übereinstimmung der Typen im Ausdruck, jedoch so:
AnsiString s = "select * from auftraege.db, anwender.db where kennung=kennung and nachname like 'Maier%'"
geht es. Wie gesagt einzigster Unterschied ist das in softwarenummer eine Zahl steht z.B. 112 und in kennung ein Text z.B. MAIERT
zum verrückt werden....
Ups sehe gerade software.softwarenummer ist ein Zählerfeld, auftraege.softwarenummer ein alphanumerisches... nur wie wandle ich die jetzt um innerhalb der SQL anweisung oder geht das nicht bzw. würe es funktionieren wenn ich auftraege.softwarenummer einfach in der Datenbank in ein numerisches Feld wandle..
-
ich glaubs nicht daran lag es..
hab das feld in der datenbank in ein numerisches umgewandelt...danke vielmals für die hilfe...
mein 2. Problem gibts hier falls da noch jmd was weiss
-
Du kannst nicht eine "SELECT " aus 2 Tabellen abfragen.
Auf welche DB bezieht sich der "" Mach z.B. auftraege.db.*SELECT auftraege.db.kennung,software.db.Softwarenummer FROM auftraege.db,software.db where auftraege.db.kennung=anwender.db.kennung
In etwas so. Dies ist jetzt aber keine richtige Anfrage für deine Datenbank.
Aber ein richtiger Syntax für SQL.