Hallo,
Meine EXE funktioniert gut mit SQLite, MySQL und PostgreSQL. Nun wollte ich auch MSSQL unterstützen. Soweit werden die Daten auch gezeigt, aber beim Feld "DATETIME" kann Zeos nicht posten.
ich mache einen Insert und TZSQLMonitor zeit mir den SQL Befehl der generiert wurde:
INSERT INTO "elelatest"."dbo"."param" (ParNr,AendDatum) VALUES (3,'2013.03.19 14:40:50:423')
Wenn ich das in die SQL Eingabe von MSSQL eingebe, dann gibt es Mecker, da das Datumsformat falsch ist. Aber das funktioniert:
INSERT INTO "elelatest"."dbo"."param" (ParNr,AendDatum) VALUES (3,'2013-19-03 14:40:50.423')
Nun die Frage: Wie kann ich Zeos parametrieren, dass für alle Datumsfehler eine andere Formatierung zu verwenden ist?
Auch sollten die Spaltennamen in " gesetzt werden, was ich auch noch nicht herausgefunden habe.
Weiß jemand Rat?
Grüße Markus.
Zeos7 und MSSQL - DATETIME Felder
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Zeos7 und MSSQL - DATETIME Felder
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 340
- Registriert: Di 12. Sep 2006, 08:57
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten:
Re: Zeos7 und MSSQL - DATETIME Felder
Es ist nie ratsam, Datümer als Strings in der VALUES-Klausel einzubringen. Bei Oracle gibt es deshalb die TO_DATE()-Funktion. Leider verwenden gängige Beispiele diese Funktion oft nicht. MSSQL sollte ein Pendant dazu haben. Dieses sollte dann auch verwendet werden. Mein Professor schüttelte immer den Kopf über solche Datum-Inserts ohne die passende Funktion, weil sie eben stark von der Localization der Datenbank abhängig sind.
Ist das ein Tippfehler?
Ist das ein Tippfehler?
Code: Alles auswählen
INSERT INTO "elelatest"."dbo"."param" (ParNr,AendDatum) VALUES (3,'2013.03.19 14:40:50[b][u]:[/u][/b]423')
Wenn ich das in die SQL Eingabe von MSSQL eingebe, dann gibt es Mecker, da das Datumsformat falsch ist. Aber das funktioniert:
INSERT INTO "elelatest"."dbo"."param" (ParNr,AendDatum) VALUES (3,'2013-19-03 14:40:50[b][u].[/u][/b]423')
Grüße, Antrepolit
care only if your os is really burning
care only if your os is really burning
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Zeos7 und MSSQL - DATETIME Felder
Der Punkt/Doppelpunkt am Ende interessiert nicht, es ist das Datum und die Reihenfolge der Werte.
Ich habe das mal abgeändert, ob das gut ist weiß ich jetzt nicht, da muss EgonHiergeist noch mal drüber schauen:
ZDbcDbLibUtils.pas
Ich habe das mal abgeändert, ob das gut ist weiß ich jetzt nicht, da muss EgonHiergeist noch mal drüber schauen:
ZDbcDbLibUtils.pas
Code: Alles auswählen
function PrepareSQLParameter(Value: TZVariant; ParamType: TZSQLType;
ConSettings: PZConSettings; PlainDriver: IZDBLibPlainDriver): ZAnsiString;
var
TempBytes: TByteDynArray;
TempBlob: IZBlob;
begin
: : :
stDate:
if SameText(PlainDriver.GetProtocol, 'mssql') Then
Result := ZAnsiString('''' + FormatDateTime('yyyy"-"dd"-"mm',
SoftVarManager.GetAsDateTime(Value)) + '''')
else Result := ZAnsiString('''' + FormatDateTime('yyyy/mm/dd',
SoftVarManager.GetAsDateTime(Value)) + '''');
stTime:
Result := ZAnsiString('''' + FormatDateTime('hh":"mm":"ss":"zzz',
SoftVarManager.GetAsDateTime(Value)) + '''');
stTimestamp:
if SameText(PlainDriver.GetProtocol, 'mssql') Then
Result := ZAnsiString('''' + FormatDateTime('yyyy"-"dd"-"mm hh":"mm":"ss":"zzz',
SoftVarManager.GetAsDateTime(Value)) + '''')
else Result := ZAnsiString('''' + FormatDateTime('yyyy/mm/dd hh":"mm":"ss":"zzz',
SoftVarManager.GetAsDateTime(Value)) + '''');
EleLa - Elektronik Lagerverwaltung - www.elela.de