Autor Beitrag
Crowbar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: Mi 19.03.03 11:50 
Hallo,
ich habe eine SQL-Tabelle worin u.a. ein Date-Feld vorhanden ist. Jetzt gibt es einen Fall, dass das Date-Feld leer bleiben muss bzw. kann.
Führe ich den SQL-Befehl aus, erscheint eine Fehlermeldung: "bad date...". Wenn ich irgendein Datum eingegebe funktioniert es.
Wie kann ich es anstellen, ein leeres Date-Feld einzufügen?

Tschüss Crowbar
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 19.03.03 11:58 
Hallo,

versuche mal Datefeld=NULL.

Gruß
Klabautermann
Crowbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: Mi 19.03.03 12:19 
hallo,
dies habe ich auch schon ausprobiert. Da ich aber die Werte für die Tabelle zuerst in eine Variable einlesen muss, gibt es ebenfalls einen Fehler.
"Could not convert variant of type (null)..."

z.B.
wert[1]:=null; oder wert[1]:=datetostr(null);

Crowbar
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mi 19.03.03 15:17 
... einfach das Datum-Feld nicht ansprechen ...

Zitat:
with QueryHistory.SQL do begin
Clear;
Add('UPDATE history SET kndcd = ' + Hkndcd);
if Length(Haadatum) > 9 then Add(',aadatum = ' + Haadatum); Add(' WHERE lfdnr = ' + LfdNrHistory);
end;
QueryHistory.ExecSQL;


Fertig. Ob nu UPDATE oder INSERT oder sonst was ist egal, einfach nur vorher die Gegenprobe ob ein Datum existiert.
Und wenn kein Datum eingegeben wurde, wird auch nichts ins Datum-Feld geschrieben, und es bleibt leer. Punkt. Fertig
Crowbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: Mi 19.03.03 15:41 
Hallo,
wie ist es mit folgenden Code, wenn das Datum leer ist:

ausblenden Quelltext
1:
2:
datum_leer:='';
 Query.SQL.Add('INSERT INTO '+SQLTableName+' (ARTIKEL,DATUM,ARTNUMMER) VALUES (''Testartikel'','+datum_leer+',''TestArtnummer'')');


Hier kommt der oben beschriebene Fehler.

Gruss Crowbar
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mi 19.03.03 17:40 
naja, mach es so wie in meiner antwort!!

und nochmal für dein beispiel:

aus
ausblenden Quelltext
1:
'INSERT INTO '+SQLTableName+' (ARTIKEL,DATUM,ARTNUMMER) VALUES (''Testartikel'','+datum_leer+',''TestArtnummer'')'[/quote]					

wird

ausblenden Quelltext
1:
2:
3:
4:
'INSERT INTO '+SQLTableName+' 
(ARTIKEL,DATUM,ARTNUMMER) 
VALUES 
(''Testartikel'','+datum_leer+',''TestArtnummer'')'

dann klammer datum aus:

ausblenden Quelltext
1:
2:
3:
4:
'INSERT INTO '+SQLTableName+' 
(ARTIKEL,ARTNUMMER) 
VALUES 
(''Testartikel'',''TestArtnummer'')'


und geb ihm ne eigene SQL-Anweisung, aber validiere vorher!

ausblenden Quelltext
1:
2:
if datum_leer <> "" then 
'UPDATE '+SQLTableName+' SET datum = " +datum_leer'


logisch, oder?

oder auch so:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Add ('INSERT INTO '+SQLTableName);
Add (' ARTIKEL, ');
if datum_leer <> "" then Add (' DATUM, ');
Add (' ARTNUMMER ') ;
Add (' VALUES ');
Add (' 'Testartikel', ');
if datum_leer <> "" then Add (, '+datum_leer+', ');
Add (' 'TestArtnummer'');


fertig.

Und nochmal zur Erklärung:
Wenn du weist, eins deiner Datenfelder reagiert sensibel auf Leere Eingaben, dann stelle diese Felder hinten an, und füge sie nur nach einer vorherigen Prüfung ein.

Und noch n Tipp: Mach mehr Leerzeichen. Erstens reagiert SQL auf fehlende Leerzeichen sehr alergisch, und zweitenst siehst du besser durch"!

mfg