AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL error : type mismatch
Thema durchsuchen
Ansicht
Themen-Optionen

SQL error : type mismatch

Ein Thema von alex-91 · begonnen am 8. Jun 2010 · letzter Beitrag vom 13. Jun 2010
Antwort Antwort
Seite 1 von 2  1 2      
alex-91

Registriert seit: 14. Apr 2010
44 Beiträge
 
#1

SQL error : type mismatch

  Alt 8. Jun 2010, 13:05
Datenbank: BDE • Version: k.a • Zugriff über: k.a
Hallo!

Also ich habe eine SQL Abfrage und möchte das Ergebnis in einem DBGrid anzeigen lassen. Als ich nur  WHERE Inventarnummer = "'+(nummer)+'" hatte, hat es wunderbar funktioniert :S
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:
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;
Hat jemand eine Idee wo der Fehler liegt ?
Danke , alex-91
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: SQL error : type mismatch

  Alt 8. Jun 2010, 13:10
Von welchem Typ ist denn Inventarnummer?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
alex-91

Registriert seit: 14. Apr 2010
44 Beiträge
 
#3

AW: SQL error : type mismatch

  Alt 8. Jun 2010, 13:15
alpha
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#4

AW: SQL error : type mismatch

  Alt 8. Jun 2010, 13:20
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
alex-91

Registriert seit: 14. Apr 2010
44 Beiträge
 
#5

AW: SQL error : type mismatch

  Alt 8. Jun 2010, 13:28
dann kommt : [Error] Unit1.pas(260): String literals may have at most 255 elements
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.873 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: SQL error : type mismatch

  Alt 8. Jun 2010, 13:31
Du kansnt Text auf einmal nur 255 Zeichen übergeben.
Markus Kinzler
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#7

AW: SQL error : type mismatch

  Alt 8. Jun 2010, 13:42
dann kommt : [Error] Unit1.pas(260): String literals may have at most 255 elements
dann versuchs mal mit sql.clear, sql.add anstatt SQL.text.
Karl-Heinz
  Mit Zitat antworten Zitat
c4rtm4n

Registriert seit: 28. Jan 2009
Ort: Oldenburg (Oldenburg)
26 Beiträge
 
Delphi 2009 Enterprise
 
#8

AW: SQL error : type mismatch

  Alt 13. Jun 2010, 18:07
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 WHERE (Inventarnummern.Inventarnummer = "'+(nummer)+'") .

Welchen Typ hat denn Inventarnummern.Geratetyp? Ist das Feld auch ein Integer?

Probiers mal so:

Delphi-Quellcode:
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;
Kurze Anmerkung:
- 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
Carsten
  Mit Zitat antworten Zitat
alex-91

Registriert seit: 14. Apr 2010
44 Beiträge
 
#9

AW: SQL error : type mismatch

  Alt 13. Jun 2010, 18:20
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 WHERE (Inventarnummern.Inventarnummer = "'+(nummer)+'") .

Welchen Typ hat denn Inventarnummern.Geratetyp? Ist das Feld auch ein Integer?

Probiers mal so:

Delphi-Quellcode:
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;
also das Feld inventarnummern.geratetyp ist ein alphafeld
und leider kommt mit deinem Quellcode immer noch der typmismatch-blödsinn :'(

trotzdem danke lg
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.429 Beiträge
 
Delphi 12 Athens
 
#10

AW: SQL error : type mismatch

  Alt 13. Jun 2010, 18:23
Zitat:
also das Feld inventarnummern.geratetyp ist ein alphafeld
und leider kommt mit deinem Quellcode immer noch der typmismatch-blödsinn :'(
... ja logisch ! Weiter vorn spricht du davon, daß die ID Felder Integer sind.
Zitat:
Geratetyp.ID = Inventarnummern.Geratetyp
Hier vergleichst du einen Integer mit einem String.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 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