hallo zusammen, mich würde interessieren was schneller ist:
ein dlookup wo man in einer tabelle was sucht
oder
eine gespeicherte abfrage, und dann darauf ein dlookup ?
meine bisherigen tabellendaten sind zu gering um derzeit einen unterschied zu merken, aber mich würds für später interessieren, wenn die tabelle immer größer wird.
danke für euren input
lg michael
Hallo,
wozu brauchst Du DlookUp ?
Zum Suchen braucht es kein Dlookup.
Dlookup sollte man in einer DB eher vermeiden.
hallo, ich tue mir da leichter/ bin ich mit dlookup geübter.
würdest du eher die recordset Sache präferieren ?
Hallo,
ich habe nicht die geringste Ahnung was du mit Dlookup machen willst.
Und was du jetzt mit Recordsetsache meinst ist mir auch schleierhaft.
Bitte mal etwas präziser und ausführlicher schildern.
An Dlookup in einer Datenbank solltest du dich gar nicht erst gewöhnen.
hallo klaus, danke für deinen input.
also es wird der qr code auf einem teil gescannt, anschließend am formular felder gefüllt, bspw artikelnummer, seriennummer, bezeichnung, fertigungsauftragsnummer usw.
dann wird die dazugehörige arbeitsanweisung in einem unterformular angezeigt. sozusagen alles was der mitarbeiter zu dem gescannten teil wissen muss, wird ihm angezeigt
Hallo,
ja und wozu brauchst Du da Dlookup ?
Deine Angaben sind wenig hilfreich um Dir zu antworten.
Ich kann da nicht ansatzweise die Notwendigkeit von DLookup sehen.
Zitatein dlookup wo man in einer tabelle was sucht
oder
eine gespeicherte abfrage, und dann darauf ein dlookup ?
Für das Suchen oder besser das Finden des Ergebnisses muss die gespeicherte Abfrage ja ausgeführt und somit auf die gleiche Tabelle zugreifen. Welchen Effekt würdest Du Dir daraus erwarten, wenn die Abfrage nur einfach den Tabelleninhalt wiedergibt und keine zusätzlichen eigenen Verarbeitungen vornimmt?
Wegen der Geschwindigkeit sollte man eher eine Überlegung in eine ganz andere Richtung führen: Ein DLookup oder auch der entsprechende Ersatz durch ein Recordset liefern genau einen Wert zurück. Bei insgesamt einem nötigen Rückgabewert wird man mit üblichen Rechnern keinen wahrnehmbaren und nur mit großer Mühe messbaren Unterschied feststellen.
Wenn man aber einige tausende Rückgabewerte benötigt, werden beide Varianten mit ihrem Dauerfeuer an Einzelabfragen einer richtigen Abfrage (SQL - alles auf einmal - Massendatenverarbeitung) gnadenlos unterlegen sein.
Es kommt also darauf an, was man EIGENTLICH tun möchte.
hallo eberhard, also eigentlich möchte ich damit in den formularen werte aus den tabellen raussuchen, und diese dem mitarbeiter anzeigen lassen.
ich habe den vorschlag vom klaus aufgegriffen, jedoch bleiben noch ca 10 felder übrig die ich nicht mit der hinterlegten abfrage bedienen kann. somit muss ich mir die informationen von den tabellen/abfragen holen.
und da würde ich halt an dlookup denken.
also ihr meint mit so einer geringen anzahl an feldern (ca. 10) kann ich jedes feld auch mit dlookup füllen ?
derzeit läuft es sehr sehr schnell, aber die unterschiedlichen tabellen werden ja mit der zeit größer
Hallo,
eigentlich ist das eigentliche Problem nicht klar.
Um Werte aus einer Tabelle dem User anzuzeigen, reicht standardmäßig, das Form an diese Tabelle zu binden (Datenherkunft) und die entsprechende Steuerelemente an die Tabellenfelder (Steuereleementinhalt) zu binden.
Wenn Daten aus einer n-Tabelle angezeigt werden sollen, dann bietet sich das UFO-Steuerelement mit passenden Formular an, das an die n-Tabelle gebunden ist.
Wenn aus mehreren Tabellen die Daten in einem Form gleichzeitig angezeigt werden sollen, dann erzeuge eine Abfrage über die beteiligten Tabellen und weise die Abfrage einem entspr. generierten Formular zu. Es kann hier aber passieren, dass die Abfrage "nicht aktualisierbar" ist und demzufolge keine Daten im Formular editierbar sind.
Das alles setzt voraus, dass ein vernünftig normalisierter Tabellenaufbau vorliegt.
Hierbei ist dann keine Notwendigkeit (kein Sinn) für Dlookup gegeben.
Die Verwendung von Dlookup ist nur dann sinnvoll, wenn auf schon existierende Daten in Tabellen geprüft werden soll oder muss.
Oder wenn (Meta-)Daten aus Tabellen gelesen werden sollen, die in keiner direkten Beziehung zu den "Betriebs"-Tabellen stehen, z. B. eine Parameter-Tabelle.
Dabei spielt die Performance keine wesentliche Rolle, weil der Aufruf von Dlookup nur sporatisch und nicht permanent stattfindet.
Hallo,
Du sprichst völlig in Rätseln.
Ich kann bisher nirgends die Notwendigkeit von Dlookup erkennen.
Und wo habe ich da einen Vorschlag gemacht?
Kannst Du mal bitte ein Bild des Beziehungsfensters zeigen?
hallo zusammen, ihr habt recht, ich hab da viel zu kompliziert gedacht.
hab nun das formular an die tabelle gebunden. jedoch möchte ich erst wenn der mitarbeiter den artikel scannt, das dann erst die gebundenen felder ausgefüllt werden.
jetzt ist es so, das wenn man das formular aufruft, sofort der erste datensatz in den gebundenen formularfeldern angezeigt wird. aber angezeigt soll erst was werden, nachdem er den artikel gescannt hat (und dann auf diesen gescannten artikel gefiltert wird).
Zitatjedoch möchte ich ...
Dann tue das.
Franz hat ja gerade den gedanklichen Bogen gezogen. Dieser darf ruhig beachtet statt ignoriert werden.
hallo eberhard, das versuche ich ja.
das formular ist genau an 1 tabelle gebunden. jedoch soll erst der datensatz im formular angezeigt werden, wenn in ein textfeld die artikelnr gescannt wurde.
wie mache ich das, das beim öffnen noch keine werte angezeigt werden, erst halt nach dem scannen ?
Hallo Mike,
Schreibe in die Filtereigenschaft des Formulars 1=0, und
setze die Eigenschaft "Beim Laden filtern" auf "Ja".
Der Scan erfolgt dann normalerweise in ein ungebundenes
Textfeld. In dessen Ereignisprozedur "AfterUpdate" änderst
du dann den Filter auf das gescannte Ergebnis
Private Sub DeinScanfeld_AfterUpdate()
Me.Filter = "DeinTabellenfeld = " & Me.DeinScanfeld
'falls "DeinTabellenfeld vom Typ "Text" ist müssen Quotes drumrum
'Me.Filter = "DeinTabellenfeld = '" & Me.DeinScanfeld & "'"
Me.FilterOn = True
End Sub
gruss ekkehard
Einen Wert "herauszusuchen" und ihn somit zu haben einerseits und ihn andererseits anzuzeigen sind für mich grundverschiedene Dinge. Die Sonne scheint auch, wenn ich die Augen schließe und mir innerlich Dunkelheit verschaffe.
hallo zusammen, hallo ekkehard, vielen dank hat funktioniert !!! danke !
hallo zusammen, aber jetzt habe ich die anforderung, das nach dem gescannten artikel mehrere bedingungen zu prüfen sind. wäre da das schnellste über dlookup auf die daten der tabelle zuzugreifen ?
Hallo,
was sind das für Bedingungen?
ich muss nachschauen ob der gescannte artikel schon mal gescannt wurde (somit in der tabelle aufscheint). anschließend muss nachgeschaut werden, ob er in der baugruppen-tabelle schon mal vorgekommen ist.
dh ein paar (tabellen) checks sind notwendig, bevor der artikel dann in einer tabelle erfasst wird.
(die checks sind notwendig, nicht das es zu doppelscans kommt)
Hallo,
Beispiel:
Sub txtArtScan_Beforeupdate(Cancel as Integer)
If Dcount("*","tblTabelle","ArtNr = '" & Me!txtArtScan.Text & "'") > 0 then
Msgbox "Artikel schon vorhanden"
Cancel =True
Me.Undo
End If
End Sub
top vielen dank ! und von der geschwindigkeit her ist das mit dcount bzw. dlookup eh wahrscheinlich ausreichend, auch für die zukunft gedacht wenn die tabellen immer größer werden ?
Hallo,
haben die Artikel Tabelle und die Baugruppen Tabelle eine Beziehung ?
ja, die ArtikelID kommt in der Baugruppen Tabelle als Fremdschlüssel vor
Hallo,
dann kann es in der Baugruppen Tabelle keine Artikel geben, die in der Artikeltabelle nicht vorhanden sind. Es genügt also nur die Artikeltabelle zu prüfen.
ja ich weiss, mir gehts auch nicht ums wie sondern nur um die geschwindigkeit
welche möglichkeit die schnellste wäre, solche prüfungen durchzuführen
Hallo,
Zitatja ich weiss,
und warum schreibst Du es dann und verleitest zu falschen Überlegungen.
Zitatanschließend muss nachgeschaut werden, ob er in der baugruppen-tabelle schon mal vorgekommen ist.
Hallo,
warum drehst Du Dich dauernd um Deine Geschwindigkeitsphobie?
Das ist Punkt Z in der Prioritätenliste..
Selbst wenn es irgendwann tatsächlich zu einer merklichen Performance-Einbuße kommt, kann immer noch eine der Ersatzlösungen für die Domänen-Funktionen benutzt werden.
Quick and Dirty:
Dim lngPersiD as Long, txtNachname as String
lngPersiD = 10
txtNachname = Dlookup("Nachname", "tblPersonen", "PersID =" & lngPersiD & ")"
' als Ersatz:
txtNachname = CurrentDb.OpenRecordset("Select Nachname from tblPersonen Where PersID = " & lngPersID )(0)