PDA

Vollständige Version anzeigen : Suchabfrage und Null-Werte


elnino
06.08.2004, 16:23
Hallo,

ich habe einige Suchabfragen die über Formulare gesteuert werden.

In der Abfrage habe ich also Kriterien der Art:

Wie "*" & [Formulare]![FOR_13_Akteure]![Organisation] & "*"

Bis jetzt werden ja nur DS ausgegeben, die in keinem Feld einen Nullwert enthalten, für die ein Kriterium angegeben ist. Wenn für ein Feld kein Kriterium in dem Formular angegeben wurde, sollen aber alle DS angezeigt werden (auch die, bei denen in diesem Feld Null steht).

Ich habe das also wie in donkarls FAQ mit


[Forms]![DeinFormular]![DeinFeld] Oder [Forms]![DeinFormular]![DeinFeld] Ist Null


gemacht.

Beim nächsten Öffnen der Abfrage in der Entwurfsansicht war ich allerdings etwas erstaunt... da hat Access ja die Anweisung getrennt und alle möglichen Kombinationen als ODER-Kriterium untereinander geschrieben... das ganze ist bei mehreren Suchfeldern nun natürlich sehr lang geworden... gibts denn da keine andere Möglichkeit?

Vorher hatte ich bereits die Möglichkeit, dass die Suchfunktion auf eine Abfrage zurückgreift, die alle Nullfelder in leere Zeichenfolgen ersetzt... das wird dann aber bei vielen Datensätzen sehr langsam...

Danke schonmal...

Johnny Loser
06.08.2004, 16:29
Ich weiß natürlich jetzt nicht, wie Deine Formularsuche gestaltet ist, aber was hältst Du davon Deine Abfarge dynamisch in VBA zu gestalten und hiermit die Datenherkunft zu aktualisieren? Dies erspart Dir die IMHO unendlich langen Parameterabfragen, besonders, wenn in manchen Feldern keine Suchkriterien angegeben sind.

elnino
06.08.2004, 16:30
nur nochmal zur Verdeutlichung...

Die Suchergebnisse kommen jetzt sehr schnell, aber ich habe in der Entwurfsansicht nur eine Zeile für obige Anweisung verwendet und bei erneutem öffnen der Abfrage ist sie in der SQL-Ansicht etwa 8 Bildschirmseiten lang... sowas wiederstrebt einfach meiner Vorstellung von effektivem programmieren... ;)

elnino
06.08.2004, 16:32
mmh... mit Abfragen in VBA hab ich mich noch nicht wirklich auseinandergesetzt... aber so wie sich das anhört komm ich da wohl kaum drum rum.

Ice
06.08.2004, 16:33
Mach als Spaltenname nicht nur einfach "Spalte1" sondern gib folgendes ein:

Spalte1n: wenn(Spalte1 is null;"";Spalte1)

Lanz Rudolf
06.08.2004, 16:56
Hallo
Schau Dir mal DAS (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=121545) an möglich das es Dir hilft.

elnino
07.08.2004, 10:49
Original geschrieben von Ice
Mach als Spaltenname nicht nur einfach "Spalte1" sondern gib folgendes ein:

Spalte1n: wenn(Spalte1 is null;"";Spalte1)

Danke für deine Hilfe... das ist das was ich schon gemacht hab. Ich habe es nur nicht in jeder Abfrage gemacht, sondern habe eine Abfrage für jede Tabelle geschrieben, die genau diese Spalten enthält - also aus jedem Null eine leere Zeichenfolge macht.
Das führt aber bei nun etwa 4000 Datensätzen zu recht langsamen Abfragen.

Lanz Rudolf
07.08.2004, 14:04
Hallo
Ist das mit einem Feld das als String definiert ist?
Wie so fängst Du nicht das ganze bei der erfasung ab? z.b.:
im Formular
- Sandartwert auf "" setzen.
- Nach Aktualisierung
Private Sub Text_AfterUpdate()
Me!Text = Nz(Me!Text, "")
End Sub
und wenn schon Daten vorhanden sind, machst Du eine Aktualisierungs Abfrage!
Dann hast Du keine Daten mit NULL.
Es geht natürlich auch mit vbNullString z.B.
Me!Text = Nz(Me!Text, vbNullString)
so sieht jeder das du einen Leeren-String produzierst allerdindgs nicht beim Standartwert.
Der Standartwert kann natürlich auch schon bei der Tabelle definiert werden was natürlich noch mehr sin mach z.b. wenn jemand direkt in der Tabelle erfasst.