![]() |
Datenbank: BDE • Version: k.a • Zugriff über: k.a
SQL error : type mismatch
Hallo!
Also ich habe eine SQL Abfrage und möchte das Ergebnis in einem DBGrid anzeigen lassen. Als ich nur
Delphi-Quellcode:
hatte, hat es wunderbar funktioniert :S
WHERE Inventarnummer = "'+(nummer)+'"
jz hab ich die Abfrage erweitert und bekomme folgende fehlermeldung: Project Kustodius.exe raised exeption class EDBEngineError with message 'Type mismatch in expression.'. Process stopped. Use Step or Run to continue. Hier der Quellcode:
Delphi-Quellcode:
Hat jemand eine Idee wo der Fehler liegt ?
procedure TForm1.Button8Click(Sender: TObject);
var nummer: string; begin nummer:=Edit1.Text; Query1.Active:=false; Query1.SQL.Clear; Query1.SQL.Add('SELECT Inventarnummern.Inventarnummer, Geratetyp.Typ, Raume.Raumnummer, Raume.Raumbezeichnung, Details.Modell, Details.Baujahr, Inventarnummern.Status FROM Inventarnummern, Raume, Geratetyp, Details WHERE (Inventarnummern.Inventarnummer = "'+(nummer)+'") AND (Raume.ID = Inventarnummern.ID_Raum) AND (Geratetyp.ID = Inventarnummern.Geratetyp) AND (Details.ID = Inventarnummern.ID_Details)'); Query1.Active:=true; end; Danke , alex-91 |
AW: SQL error : type mismatch
Von welchem Typ ist denn Inventarnummer?
|
AW: SQL error : type mismatch
alpha
|
AW: SQL error : type mismatch
Versuch es einmal mit SQL-Parametern.
Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
var nummer: string; begin nummer:=Edit1.Text; Query1.Close; Query1.SQL.Text := 'SELECT Inventarnummern.Inventarnummer, Geratetyp.Typ, Raume.Raumnummer, Raume.Raumbezeichnung, Details.Modell, Details.Baujahr, Inventarnummern.Status FROM Inventarnummern, Raume, Geratetyp, Details WHERE (Inventarnummern.Inventarnummer = :nummer) AND (Raume.ID = Inventarnummern.ID_Raum) AND (Geratetyp.ID = Inventarnummern.Geratetyp) AND (Details.ID = Inventarnummern.ID_Details)'); Query1.ParamByName('nummer').Value := nummer; Query1.Open; end; |
AW: SQL error : type mismatch
dann kommt : [Error] Unit1.pas(260): String literals may have at most 255 elements
|
AW: SQL error : type mismatch
Du kansnt Text auf einmal nur 255 Zeichen übergeben.
|
AW: SQL error : type mismatch
Zitat:
|
AW: SQL error : type mismatch
so weit hob is ah verstaundn, is si hoid vorher ausgunga :S
wos soi i jz mochn ?? |
AW: SQL error : type mismatch
Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
var nummer: string; begin nummer:=Edit1.Text; Query1.Close; Query1.SQL.Text := 'SELECT Inventarnummern.Inventarnummer, Geratetyp.Typ, Raume.Raumnummer, Raume.Raumbezeichnung, Details.Modell, Details.Baujahr, Inventarnummern.Status '; Query1.SQL.Add('FROM Inventarnummern, Raume, Geratetyp, Details '); Query1.SQL.Add('WHERE (Inventarnummern.Inventarnummer = :nummer) '); Query1.SQL.Add('AND (Raume.ID = Inventarnummern.ID_Raum) '); Query1.SQL.Add('AND (Geratetyp.ID = Inventarnummern.Geratetyp) '); Query1.SQL.Add('AND (Details.ID = Inventarnummern.ID_Details)'); Query1.ParamByName('nummer').Value := nummer; Query1.Open; end; |
AW: SQL error : type mismatch
habs jz wieder umgeändert auf .clear .add und .active=true und die anweisung ein bisschen verkürzt.
leider noch imma zu kurz - obwohls vorher geklappt hat :( hab dass jz wieder augf nur 1 bedinungg umgeändert .. jz klappts wieder ... kann man di anweisung vll auf 2 aufteilen ??? lg |
AW: SQL error : type mismatch
Ist Deine Tastatur kaputt oder was soll das Kauderwelsch? Wenn das Literal zu lang ist, versuche es z.B. mal mit Tabellenaliasen, damit lassen sich auch eine Menge Zeichen einsparen. Außerdem kannst Du auf die Klammerung eigentlich verzichten.
|
AW: SQL error : type mismatch
Das Staement wäre ohne die vielen unnötigen Klammern viel übersichtlicher
|
AW: SQL error : type mismatch
Zitat:
|
AW: SQL error : type mismatch
Und Du bist ganz sicher, dass es sich um ein alphanumerisches Feld handelt?
|
AW: SQL error : type mismatch
Zitat:
allerdings sind halt die ID's integer - aber das dürfet doch nicht stören oder ? lg |
AW: SQL error : type mismatch
Wenn alle IDs integer sind, ist das ja auch in Ordnung. Beschränk Dich doch erstmal auf eine Bedingung, füge dann die nächste hinzu usw., bis der Fehler auftritt. Dort kontrollierst Du dann noch einmal die Datenypen.
|
AW: SQL error : type mismatch
Zitat:
Query1.SQL.Add('SELECT Inventarnummern.Inventarnummer, Geratetyp.Typ FROM Inventarnummern, Geratetyp WHERE Inventarnummer = "'+(nummer)+'" AND Geratetyp.ID = Inventarnummern.Geratetyp'); und da kommt die mismatch-fehlermeldung :( lg |
AW: SQL error : type mismatch
Kommt die Meldung auch, wenn Du die Anführungszeichen weglässt? Ich weiß, das Feld ist alphanumerisch, aber vlt. ist da etwas ganz anderes verhuddelt.
|
AW: SQL error : type mismatch
Zitat:
hab das jz mal mit der raumnummer anstatt der geräte-art versucht und so klappts: procedure TForm1.Button8Click(Sender: TObject);
Delphi-Quellcode:
leider weiß ich noch immer nicht was delphi da für ein problem mit dem gerätetyp hat :(
var nummer: string;
begin nummer:=Edit1.Text; Query1.Active:=false; Query1.SQL.Clear; Query1.SQL.Add('SELECT Inventarnummern.Inventarnummer, Raume.Raumnummer FROM Inventarnummern, Raume WHERE Inventarnummer = "'+(nummer)+'" AND Raume.ID = Inventarnummern.ID_Raum'); Query1.Active:=true; trotzdem danke lg |
AW: SQL error : type mismatch
Was für ein Typ hat nummer?
BTW. Ich würde (SQL-)Parameter verwenden |
AW: SQL error : type mismatch
hmm hab jz noch die raumbezeichnung dazu genommen und soweit klappts auch noch :)
doch dann kommt der gerätetyp und die fehlermeldung ist wieder da :(
Delphi-Quellcode:
lg
nummer:=Edit1.Text;
Query1.Active:=false; Query1.SQL.Clear; Query1.SQL.Add('SELECT Inventarnummern.Inventarnummer, Raume.Raumnummer, Raume.Raumbezeichnung, Geratetyp.Typ FROM Inventarnummern, Raume, Geratetyp WHERE Inventarnummer = "'+(nummer)+'" AND Raume.ID = Inventarnummern.ID_Raum AND Geratetyp.ID = Inventarnummern.Geratetyp'); Query1.Active:=true; |
AW: SQL error : type mismatch
:gruebel: warum nutzt du immer noch nicht Parameter wie vorgeschlagen ? Gibt´s bei dir Copy / Paste nicht ? :zwinker:
|
AW: SQL error : type mismatch
Versuch es mal so...
SQL-Code:
Anführungszeichen = Doppelte Hochkommatas (innerhalb eines Delphistrings) sonst natürlich Anführungszeichen = Hochkommata
SELECT Inventarnummern.Inventarnummer, Raume.Raumnummer, Raume.Raumbezeichnung, Geratetyp.Typ
FROM Inventarnummern, Raume, Geratetyp WHERE Inventarnummer = ''' + nummer + '' ' AND Raume.ID = Inventarnummern.ID_Raum AND Geratetyp.ID = Inventarnummern.Geratetyp |
AW: SQL error : type mismatch
Zitat:
habs jz umgeändert auf:
Delphi-Quellcode:
leider kommt jz : missing operator or semicolon .. sieht werd das missing-teil ?
nummer:=Edit1.Text;
Query1.Active:=false; Query1.SQL.Clear; Query1.SQL.Add('SELECT Inventarnummern.Inventarnummer, Raume.Raumnummer, Raume.Raumbezeichnung, Geratetyp.Typ FROM Inventarnummern, Raume, Geratetyp WHERE Inventarnummer = '' ' + (nummer) + ' '' AND Raume.ID = Inventarnummern.ID_Raum AND Geratetyp.ID = Inventarnummern.Geratetyp'); Query1.Active:=true; |
AW: SQL error : type mismatch
Delphi-Quellcode:
Query1.SQL.Text := 'SELECT Inventarnummern.Inventarnummer, Raume.Raumnummer, Raume.Raumbezeichnung, Geratetyp.Typ FROM Inventarnummern, Raume, Geratetyp WHERE Inventarnummer = :nummer AND Raume.ID = Inventarnummern.ID_Raum AND Geratetyp.ID = Inventarnummern.Geratetyp;';
Query.ParamByName('nummer').Value = Nummer; |
AW: SQL error : type mismatch
Zitat:
is mein maturaprojekt (matura = abi), das habn wir so nicht gelernt ich könnts nicht mal erklären ... trotzdem danke |
AW: SQL error : type mismatch
Delphi-Quellcode:
Query1.SQL.Add(
'SELECT Inventarnummern.Inventarnummer,'#13 + ' Raume.Raumnummer, Raume.Raumbezeichnung,'#13 + ' Geratetyp.Typ'#13 + 'FROM Inventarnummern, Raume, Geratetyp'#13 + 'WHERE Inventarnummer = ''' + nummer + ''''#13 + ' AND Raume.ID = Inventarnummern.ID_Raum'#13 + ' AND Geratetyp.ID = Inventarnummern.Geratetyp' ); |
AW: SQL error : type mismatch
Zitat:
- ein Parameter wird im SQL String mit : eingeleitet - der Name des Parameters ist frei wählbar (reservierte Worte sollte man trotzdem vermeiden) - der Wert des Parameters wird seperat übertragen (Stichwort SQL Injection verhindern) Vorteile: - der ganze Hochkomma Kram fällt weg - keine SQL Injection - übersichtlicher im Quelltext ...und noch mehr :zwinker: PS: Zitat:
|
AW: SQL error : type mismatch
Zitat:
|
AW: SQL error : type mismatch
PS:
Zitat:
das bedeutet dass ich mit der parameterform/parameterdarstellung nicht viel anfangen kann, weil ich es nicht verstehe bzw. nie gelernt habe. somit schlage ich daraus keinen vorteil. war das vorhin schon zu österreichisch oder wie ? ;) lg |
AW: SQL error : type mismatch
Herr Doktor, alle ignorieren mich..... Der nächste Bitte ! :stupid:
Edit: ... nehme ich zurück mangels rotem Kasten ! |
AW: SQL error : type mismatch
Ich hoffe nicht, dass der Verzicht auf die Verwendung einer Technik, die viele Probleme aus der Welt schafft österreichisch ist
|
AW: SQL error : type mismatch
Zitat:
|
AW: SQL error : type mismatch
Hi,
hab mir deine SQL-Query mal angeguckt... Sieht an sich ganz richtig aus... Du kannst auch gerne Query1.SQL.Text verwenden. Query1.SQL ist ja auch nur eine TStringList und mit der kannst du umgehen, wie mit jeder anderen StringList auch. Ich vermute den Fehler an einer anderen Stelle als bei
Delphi-Quellcode:
.
WHERE (Inventarnummern.Inventarnummer = "'+(nummer)+'")
Welchen Typ hat denn Inventarnummern.Geratetyp? Ist das Feld auch ein Integer? Probiers mal so:
Delphi-Quellcode:
Kurze Anmerkung:
procedure TForm1.Button8Click(Sender: TObject);
var nummer: string; begin nummer:=Edit1.Text; Query1.Active:=false; Query1.SQL.Text := 'SELECT ' + ' inv.Inventarnummer, ' + ' typ.Typ, ' + ' raum.Raumnummer, ' + ' raum.Raumbezeichnung, ' + ' det.Modell, ' + ' det.Baujahr, ' + ' Inv.Status ' + 'FROM Inventarnummern inv ' + ' INNER JOIN Raume raum ON raum.id = inv.ID_Raum ' + ' INNER JOIN Geratetyp typ ON typ.id = inv.Geratetyp ' + ' LEFT JOIN Details det ON det.id = inv.ID_Details ' + 'WHERE inv.Inventarnummer = ' + QuotedStr(nummer); Query1.Active:=true; end; - Die Aufteilung der einzelnen Felder in einzelne Zeilen dienen zum einen der Übersichtlichkeit, als auch dass sie dem Problem mit den 255 Zeichen in der Text-Eigenschaft vorbeugt. - Die JOINS helfen dir beim einfachen Zusammenführen der Tabellen. Ein INNER JOIN setzt vorraus, das ein entsprechender Datensatz (wie in dem ON-Teil definiert) vorhanden ist. Wenn ein Feld kein Mussfeld ist, dann bietet sich hier ein LEFT JOIN (s. Details) an. - Die Funktion QuotedStr(s: String) erzeugt einen Pascal String, in dem auch ' (Hochkomma) vorkommen dürfen. Diese werden von der Funktion durch '' (doppeltes Hochkomma) ersetzt. Dann brauchst du dir um die Formatierung des Strings keine Sorgen mehr machen. OK, ich gebs ja zu, die Anmerkung ist doch etwas länger geworden :) |
AW: SQL error : type mismatch
Zitat:
|
AW: SQL error : type mismatch
Zitat:
und leider kommt mit deinem Quellcode immer noch der typmismatch-blödsinn :'( trotzdem danke lg |
AW: SQL error : type mismatch
Zitat:
Zitat:
|
AW: SQL error : type mismatch
Ich habe bestimmt schon 3 mal in diesem Thread nach dem Datentyp gefragt. Sollte das jetzt plötzlich doch integer sein, beiße ich ein Loch in meine Tischkante.
|
AW: SQL error : type mismatch
Zitat:
Wenn nicht, dann liegt hier der Type mismatch. Wenn du in einem SQL-Statement Felder vergleichst müssen diese immer vom gleichen Typ sein. Also ein Alpha = Integer wird nicht funktionieren. Probier doch mal in deine Inventarnummern-Tabelle das Feld "ID_Geratetyp", entsprechend mit der ID des Gerätetyps, einzufügen. Dann sollte es klappen... //EDIT: Oh, da war ich wohl zu langsam =) |
AW: SQL error : type mismatch
Zitat:
ich hab jz den typ von Inventarnummern.Geratetyp auf Integer umgeändert und es funktioniert wunderbar :) sry dass ich so auf der leitung gstanden bin bzw. so blind war - das müssen die blonden strähnen sein ;) lg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:54 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