Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBExpress DateTime Parameter: dbExpress-Fehler:[0x0003] (https://www.delphipraxis.net/85325-dbexpress-datetime-parameter-dbexpress-fehler-%5B0x0003%5D.html)

GuenterS 29. Jan 2007 11:55

Datenbank: MSSQL Server • Version: 2000 • Zugriff über: dbExpress

DBExpress DateTime Parameter: dbExpress-Fehler:[0x0003]
 
Hallo!

Ich verwende Delphi7 mit ServicePack1.

Ich versuche in eine Tabelle Datensätze einzutragen und bekomme folgende Fehlermeldung:

Zitat:

dbExpress-Fehler: [0x0003]: Ungültiger Feldtyp.
Um einzugtragen verwende ich folgenden Code:

Delphi-Quellcode:
  InsQry.ParamByName('a').AsInteger := 2;
  InsQry.ParamByName('b').AsString := '2';
  InsQry.ParamByName('c').AsDateTime := now;
  InsQry.ExecSQL;
Parameter a habe ich als Integer, b als String mit Länge 255 und c als DateTime deklariert. Alle Parameter als Input Parameter.

Der SQL String in der InsQry Komponente schaut folgendermassen aus:
Zitat:

INSERT INTO TEST (a, b, c) VALUES (:a, :b, :c)
Wenn ich das letzte Feld (c) nicht setze, also aus dem InsertStatement entferne und damit auch der Parameter weg ist, funktioniert es, sonst nicht. Daher schließe ich daraus, dass es am Datumstyp liegen muss.

Das Feld ist in der Datenbank als datetime definiert.

Udontknow 29. Jan 2007 13:09

Re: DBExpress DateTime Parameter: dbExpress-Fehler:[0x0003]
 
Hi!

Schau dir mal die Params-Eigenschaft des Datasets an, der Parameter muß höchstwahrscheinlich den Datatype ftTimeStamp eingestellt bekommen, und nicht ftDateTime.

Cu,
Udontknow

GuenterS 29. Jan 2007 13:11

Re: DBExpress DateTime Parameter: dbExpress-Fehler:[0x0003]
 
Danke für den Tipp,

aber leider liefert das den gleichen Fehler.

Ich habs dann auch gleich mal mit ftDate versucht, allerdings mit gleichem negativen Ergebnis.

Udontknow 29. Jan 2007 13:21

Re: DBExpress DateTime Parameter: dbExpress-Fehler:[0x0003]
 
Hmmm, ich habe leider kein MS-SQL zur Hand, aber vielleicht wird ein DateTime dort als String hinterlegt? Einfach mal alles durchprobieren...

Cu,
UDontknow

shmia 29. Jan 2007 13:31

Re: DBExpress DateTime Parameter: dbExpress-Fehler:[0x0003]
 
Der richtige Datentyp auf dem SQL Server 2000 ist "datetime".
"Smalldatetime" ist nicht zu empfehlen, da es zu Range-Errors kommen kann, die
von Delphi Programmierer nicht vorhersehbar oder vermeidbar sind.
Der Datentyp "timestamp" ist nicht zum Speichern von Datum & Uhrzeit vorgesehen, sondern dient
eher als eindeutiger Schlüssel.
Zitat:

timestamp ist ein Datentyp, der automatisch generierte binäre Zahlen offenlegt, die in einer Datenbank garantiert eindeutig sind. timestamp wird normalerweise als Mechanismus für die Erstellung einer Versionskennung von Tabellenzeilen verwendet. Die Speichergröße beträgt 8 Byte.

GuenterS 29. Jan 2007 13:33

Re: DBExpress DateTime Parameter: dbExpress-Fehler:[0x0003]
 
Zitat:

Zitat von shmia
Der richtige Datentyp auf dem SQL Server 2000 ist "datetime".
"Smalldatetime" ist nicht zu empfehlen, da es zu Range-Errors kommen kann, die
von Delphi Programmierer nicht vorhersehbar oder vermeidbar sind.
Der Datentyp "timestamp" ist nicht zum Speichern von Datum & Uhrzeit vorgesehen, sondern dient
eher als eindeutiger Schlüssel.
Zitat:

timestamp ist ein Datentyp, der automatisch generierte binäre Zahlen offenlegt, die in einer Datenbank garantiert eindeutig sind. timestamp wird normalerweise als Mechanismus für die Erstellung einer Versionskennung von Tabellenzeilen verwendet. Die Speichergröße beträgt 8 Byte.


Danke für deine Informationen. Ich habe in der Datenbank DateTime als Spaltentyp verwendet.

Udontknow 29. Jan 2007 15:25

Re: DBExpress DateTime Parameter: dbExpress-Fehler:[0x0003]
 
Höre ich da einen sarkastischen Unterton? :mrgreen:

Probiere es mal hiermit.

Cu,
Udontknow

GuenterS 29. Jan 2007 15:44

Re: DBExpress DateTime Parameter: dbExpress-Fehler:[0x0003]
 
Hallo, danke damit funktioniert das wohl, bedeutet aber wohl auch einen ziemlichen Aufwand, alle queries umzuschreiben.

Wird das jemals von Borland gefixt dieser Bug, das kann ja wohl nur ein workaround sein und nicht die endgültige Lösung.

Udontknow 29. Jan 2007 15:46

Re: DBExpress DateTime Parameter: dbExpress-Fehler:[0x0003]
 
Hallo!

So wie sich das hier liest, ist es kein Problem von Borland, sondern von Microsoft. Nicht das erste Mal, daß sie sich nicht an Standards halten. :roll:

Cu,
Udontknow

GuenterS 29. Jan 2007 15:50

Re: DBExpress DateTime Parameter: dbExpress-Fehler:[0x0003]
 
Zitat:

Zitat von Udontknow
Hallo!

So wie sich das hier liest, ist es kein Problem von Borland, sondern von Microsoft. Nicht das erste Mal, daß sie sich nicht an Standards halten. :roll:

Cu,
Udontknow


In Deinem Beitrag mit dem Link zum bdn wird aber eine Lösung für Oracle angeboten mit dem TSQLTimeStamp. Die funktioniert jetzt auch für den SQL Server. Deshalb denk ich schon eher, dass das ein Problem von Borland bzw. dem Hersteller von dbExpress ist. Denn mit anderen Zugriffsmethoden BDE, ADO, SQL-Direct funktioniert das ja.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz