hipfzwirgel
Goto Top

Datum mit SQL-Anweisung löschen

Hallo Gemeinde,

in meiner Access Datenbank(HW-Verwaltung) habe ich ein Datumsfeld (Formatierung: 99/99/0000;0;_). In dieses trage ich das Ausleih-Datum ein, wenn ein Gerät
ausgeliehen wird. Jetzt möchte ich mit einer SQL-Anweisung dieses Datum bei Rückgabe "löschen".

Das mache ich folgendem (Autoit-)Code:

Local $sRueckgabe = Null

$oConnection = ObjCreate("ADODB.Connection")  
$oConnection.Open("Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ=" & $sDatabaseName & "; Exclusive = 1")  
$oRecordSet = ObjCreate("ADODB.RecordSet")  

$sQuery = "Update " & $sTableName & " SET Leihgerät = False, Ausleihdatum =  '" & $sRueckgabe & "', Rückgabeam = '" & _NowDate() & "'" & "WHERE Seriennummer = " & "'" & $sWert1 & "'"  

$oConnection.Execute($sQuery)

Das Problem: Egal was ich in die Variable $sRueckgabe eintrage(also z.B. "", " ", null, NULL, 0000-00-00-00, etc.) bekomme ich einen TypenKonflikt-Fehler.

Kann mir jemand sagen wie ich das Datum gelöscht bekomme?

Content-ID: 1735637365

Url: https://administrator.de/contentid/1735637365

Ausgedruckt am: 25.11.2024 um 09:11 Uhr

ukulele-7
ukulele-7 18.01.2022 um 12:04:41 Uhr
Goto Top
Also 99/99/0000 ist kein Datumsformat sondern wohl eher eine Zeichenkette mit irgendwelchen Formatierungsregeln, um es mal vornehm auszudrücken.

Dein Problem ist die möchtest = NULL setzen aber effektiv wird daraus = 'NULL', also der Text NULL durch die Hochkomata. Der Text NULL ist vermutlich in diesem sonderbaren Feld nicht möglich, daher der Fehler.
akretschmer
akretschmer 18.01.2022 um 12:23:05 Uhr
Goto Top
Zitat von @ukulele-7:

Also 99/99/0000 ist kein Datumsformat sondern wohl eher eine Zeichenkette mit irgendwelchen Formatierungsregeln, um es mal vornehm auszudrücken.

Dein Problem ist die möchtest = NULL setzen aber effektiv wird daraus = 'NULL', also der Text NULL durch die Hochkomata. Der Text NULL ist vermutlich in diesem sonderbaren Feld nicht möglich, daher der Fehler.

vielleicht ist es auch NOT NULL gesetzt. Und 0000-00-00-00 ist kein Datum, nirgends auf der Welt.
Davon abgesehen: Dein Datenmodell ist für den Eimer, weil Du nie nachvollziehen können wird, wann und wie oft etwas verliehen war. Irgendwann wird Dich aber jemand danach fragen...
SlainteMhath
SlainteMhath 18.01.2022 um 12:30:10 Uhr
Goto Top
Moin,

mal abgesehen von dem was die Kolleg:innen oben schon korrekter weise bemängelt haben:

Wenn "Ausleihdatum" ein Feld vom Type "Datum/Zeit" in Access ist, dann müsste der abgefragte Wert zwischen # stehen. also z.b. #2020-02-22# und das ohne '

Und warum zur Hölle machst du das mit AutoIT Code und nicht per VB[script|A]?

lg,
Slainte
em-pie
em-pie 18.01.2022 um 13:10:25 Uhr
Goto Top
Zitat von @SlainteMhath:
Moin,
Moin,

Und warum zur Hölle machst du das mit AutoIT Code und nicht per VB[script|A]?
FunFact: AutoIT basiert ja auf BASIC (Link)
Ich tippe, die haben mit AutoIT eine GUI gebastelt...
Ich hätte das zwar in Access gemacht und mit der AccessRuntime aufgerufen, aber nun gut...

@hipfzwirgel
Prüfe, ob das DB-Feld NULL erlaubt. Wenn ja: Schreibe deinen Code so um, dass das NULL nicht im Hochkommata steht, ansonsten wird dein NULL als Text und nicht als "Nichts" erkannt:
$sQuery = "Update " & $sTableName & " SET Leihgerät = False, Ausleihdatum =  " & $sRueckgabe & ", Rückgabeam = '" & _NowDate() & "'" & "WHERE Seriennummer = " & "'" & $sWert1 & "'"  
hipfzwirgel
Lösung hipfzwirgel 18.01.2022 um 15:21:33 Uhr
Goto Top
Hallo an Alle und danke für die vielen Tipps,

um die Fragen in einem rutsch zu beantworten:

1. 99/99/0000 ist die Formatierungsregel aus Access. Die anderen Angaben(wie 0000-00...) habe ich im I-Net gefunden...

2. Mein Datenmodell ist nicht im Eimer, da die Ausleihe(Buchungsvorgang) komplett Protokolliert wird. Beim Sachverhalt geht es nur darum, dass dazugehörige Formular, nicht mit "Altlasten" anzuzeigen.

3. Mit AutoIt deshalb, da ich gerade ein Buchungstool damit entwickle, um den Buchungs-Vorgang zu automatisieren. -> Vorgabe Lastenheft

Der Hinweis mit den Hochkommata war im Übrigen der richtige:

$sQuery = "Update " & $sTableName & " SET Leihgerät = False, Ausleihdatum = NULL, [Kunden-Nr] = NULL, Standort = '" & $sPlatz & "', Rückgabeam = '" & _NowDate() & "' " & "WHERE Seriennummer = " & "'" & $sWert1 & "'"  

Der korrigierte Code "leert" das Feld - Perfekt!!!

4. Das Buchungstool läuft den ganzen Tag. Hätte ich das in Access selbst laufen, so wäre die Db dadurch für die "manuelle" Nutzung gesperrt. So greift das Buchungstool via ODBC nur dann auf die Db zu, wenn tatsächlich eine Buchung vorgenommen wird. Ansonsten ist sie nicht geöffnet und damit nicht gesperrt. Zusätzlich frickelt so auch niemand in der DB rum, der da nichts zu frickeln hat. -> Vorgabe Lastenheft

Also nochmal vielen Lieben dank an alle!

Anfrage gelöst...