hipfzwirgel
Goto Top

Prüfen ob eine Seriennummer im Datenfeld vorhanden ist

Hallo Gemeinde,

in meiner Hardware-Datenbank möchte ich per vba innerhalb einer Sub herausfinden, ob eine in ein Textfeld eingegebene Seriennummer in der Tabelle Artikel vorhanden ist. Bei Verwendung von

snumr = DLookup("[Seriennummer]", "Artikel", "[Seriennummer]=" & "'" & varwert & "'")  

poppt eine Systemmeldung auf, dass die Verwendung von Null nicht zulässig ist, wenn die Seriennummer aus der Variable varwert, nicht in der Tabelle ist. Die Variable snumr bleibt dabei leer. Eigentlich sollte Dlookup einen Rückgabewert liefern...

Wie kann ich, am liebsten in einem VBA-Einzeiler, herausfinden ob die Seriennummer(varwert) in der Tabelle Artikel existiert oder nicht?

Hab es auch mit SQL versucht war aber nicht erfolgreich. Das Feld Seriennummer hat den Felddatentyp kurzer Text.

Content-Key: 6757376788

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

Printed on: April 27, 2024 at 09:04 o'clock

Member: SlainteMhath
Solution SlainteMhath Apr 14, 2023 at 06:09:41 (UTC)
Goto Top
Moin,

nz() ist dein Freund...
snumr = nz(DLookup("[Seriennummer]", "Artikel", "[Seriennummer]=" & "'" & varwert & "'"),"")  

lg,
Slainte
Member: hipfzwirgel
hipfzwirgel Apr 14, 2023 at 06:54:53 (UTC)
Goto Top
Hallo Slainte,

vielen lieben dank für den Hinweis. ich habe ihn getestet. Wenn ich damit eine S/N suche die in der Db ist bekomme ich mit debug.print snumr die S/N zurück und bei einer Seriennummer die nicht in der Db ist kommt nichts zurück und die Meldung unterbleibt.

Ist das so richtig?

Nach der Microsoft-Beschreibung sollte Dlookup doch ein Rückgabewert haben...
Member: SomebodyToLove
SomebodyToLove Apr 14, 2023 at 07:54:23 (UTC)
Goto Top
Hiho hipfzwirgel,

deine Variable "snumr" ist hier das Problem, die ist wahrscheinlich vom typ string und dieser kann kein NULL Wert speichern.
Du kannst entweder die nz Funktion verwenden wie von SlainteMhath vorgeschlagen oder du definierst die Variable als typ Variant dann kann diese auch NULL Werte speichern.

Ich bin selber noch neuling und lerne aktuell erst das coden, aber wenn ich eins gelernt habe dann ist Stack Overflow dein Freund face-smile

Die Jungs können das besser erklären:
https://stackoverflow.com/questions/56412034/invalid-use-of-null-when-us ...

Grüße
Somebody
Member: SlainteMhath
SlainteMhath Apr 14, 2023 at 07:58:23 (UTC)
Goto Top
Nach der Microsoft-Beschreibung sollte Dlookup doch ein Rückgabewert haben...
Ich weis nicht welche Beschreibung du gelesen hast, aber hier https://learn.microsoft.com/de-de/office/vba/api/access.application.dloo ... steht das so:

"Wenn kein Datensatz die Kriterien erfüllt oder die Domäne keine Datensätze enthält, gibt die DLookup-Funktioneinen Null-Wert zurück."
Member: hipfzwirgel
hipfzwirgel Apr 14, 2023 at 11:20:47 (UTC)
Goto Top
Hallo Somebody,
hallo Slainte,

vielen lieben Dank für eure Erklärungen. Das mit dem Datentyp stimmt so. Die Variable sumnr ist tatsächlich String.

@ Slainte: ich kann dir auch nicht mehr sagen welche Beschreibung das war. Jedenfalls stand da nur etwas von Rückgabewert und nichts von Nullwert. So ging ich fälschlicher Weise davon aus, dass da z.B. 0 für Erfolg und
1 für Failure zurückgegeben wird.

Wie dem auch sei. Mein Problem ist gelöst und die Prüfung ob eine Seriennummer existiert funktioniert und somit bin ich mit der Sub beinahe fertig. Ich markiere den Post als gelöst. Vielen lieben Dank für eure Mühen nochmal und schönes WE...
Member: SlainteMhath
SlainteMhath Apr 14, 2023 at 11:29:53 (UTC)
Goto Top
Prüfung ob eine Seriennummer existiert
Das würde ich dann aber eher so machen:

Dim bolHasSerial  as boolean
bolHasSerial = Not IsNull(DLookup("[Seriennummer]", "Artikel", "[Seriennummer]=" & "'" & varwert & "'"))  

:D