Delphi7 SQL Server 2008 - Datentypen varchar und text sind nicht miteinander vereinbar größer-als-oder-gleich-operator
Bitte helfen,
Habe ich immer diese Fehlermeldung, wenn ich Werte übergeben, um einen parameter mithilfe von code ähnlich:
parameters.paramByName('ParamVal1').value := trim(TextBox1.Text);
parameters.paramByName('ParamVal2').value := trim(TextBox2.Text);
So, wenn eine der Textboxen leer ist, dann der Fehler:
Den Datentypen varchar und text sind nicht miteinander vereinbar größer-als-oder-gleich-operator
erscheint.
Was falsch sein könnte?
Nach dem Ausführen des sqlprofiler, wie unten vorgeschlagen
exec sp_executesql N'Select * from BLOtherChargeDetails
where Field1 = @P1 and Field2 >= @P2 and Field2 <= @P3 and
Field3 >= @P4 and Field3 <= @P5 and
Field4 >= @P6 and Field4 <= @P7 and
Field5 = @P8
Order By Field2, Field3
',N'@P1 varchar(50),@P2 text,@P3 varchar(5),@P4 text,@P5 varchar(5),@P6 varchar(8),@P7 varchar(8),@P8 smallint','Value_P1','','ZZZZZ','','ZZZZZ','20130401','20130611',0
go
- Würde es helfen, wenn Sie geben Sie einige weitere Informationen, welche Daten geben Sie die Parameter sind, aber der Fehler ist ziemlich klar: irgendwo, die Sie vergleichen
varchar
undtext
direkt, was nicht möglich ist. Wenn Sie nicht sicher sind, wo dies passiert ist, verwenden Sie SQL Profiler auf die Spur, die die Ausführung auf dem server helfen könnte. Obwohl seittext
ist jetzt veraltet, möchten Sie vielleicht in Erwägung ziehen, um(n)varchar(max)
statt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht so sehr eine Delphi-Beschränkung, als eine SQL Server-limtation.
Was Sie tun, ist etwas, was linke dies:
aber die Verwendung von Parametern:
Für Zeichen-Literale und Zeichen-Parameter, SQL-Server auswählen, VARCHAR oder NVARCHAR sein, wie der Datentyp.
SQL Server wird Ihnen nicht erlauben, um TEXT-oder NTEXT-Parameter, also entweder Zeichen-Literale oder-Zeichen Parameter erhalten den Datentyp VARCHAR oder NVARCHAR.
Gibt es zwei workarounds, adaptiert von SQL SERVER – Fix: Fehler : 402 Die Datentypen ntext und varchar sind unvereinbar, in der gleich-operator
Dies ist die bevorzugte Art und Weise, wie TEXT-und NTEXT -, wurden verworfen, für eine Weile, sehen nvarchar(max), NText vs
Für die, die yo haben, um ändern Sie Ihre Tabelle so Aussehen:
Dies ist die am einfachsten zu arbeiten und ist eine Kurzfristige Lösung.
CREATE TABLE
für Sie). 2), die Delphi-Komponenten, die Sie für den Zugriff auf Ihren Tisch. 3) einige Beispiel-Daten. 4) die design-Zeit-text (einfach kopieren-einfügen-Abfrage von deinem TForm/TDataModule und fügen Sie es hier)Schließlich habe es funktioniert;
Für einige seltsamen Grund, dass einige select-Abfragen mit Parametern geben immer einen Fehler, obwohl die Aussage richtig ist.
Tests während der design-Zeit, wird der Fehler "Ungültiger Parameter" wird angezeigt.
Fix:
Entfernen Sie den Parameter {während der design-Zeit}, d.h. der Abschnitt mit
"where Feld1 = :parameter1 und Feld2 >= :parameter2"
dann aktivieren Sie die TADOQuery, indem Sie den status aktiv auf aktiv.
Rückkehr der Parameter {während der design-Zeit} und aktivieren Sie dann die TADOQuery wieder.
Versuchen Sie, die Abfrage während der Laufzeit und dieses mal sollte es funktionieren.
VARCHAR
oderNVARCHAR
, aber die design-time-Delphi-Parameter angeben, ein Feld-TypTEXT
. Es immer noch nicht, da Sie nicht kompatibel sind, aber nur anders herum. Ein Szenario, das verursachen kann, ist dass der code wurde ursprünglich in einer Delphi-version, die noch Annahmen text-wie in einem parameter werden musste tagged as TypTEXT
Hatte gerade dieses problem mit ftString. Verändert den Typ des Parameters an ftFixedChar mit einer Größe von 50 (meine Größe-Anforderung), und alles war gut danach.
BEARBEITEN
Modifizierte ich die Abfrage angeben, eine variable für den Einsatz innerhalb der Abfrage-Ausdruck anstelle der parameter:
welche gestattet, die ftString parameter geben.
BTW, Delphi 2010, SQL2008 R2, ADO