Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Funktion soll Textfelder füllen

Begonnen von Falke22, August 19, 2010, 17:52:26

⏪ vorheriges - nächstes ⏩

Falke22

Hallo ich habe folgendes Problem.

Ich habe 5 Formulare die im Kopf alle mit den gleichen Kontaktdaten gefüllt werden sollen.
Von daher dachte ich mir, es wäre schön wenn ich eine FUnktion bastle was nach Eingabe der Kundennummer die Felder automatisch füllt (damit ich das nciht in allen Formularen nochmal schreiben muss)

Meine Funktion sieht folgendermaßen aus

Public Sub Kundendaten(KD_NR As String)
    Namen = DLookup("name1", "dbo_Kusta", "frems = " & KD_NR)
    Strasse = DLookup("str1", "dbo_Kusta", "frems = " & KD_NR)
    PLZ = DLookup("plz", "dbo_Kusta", "frems = " & KD_NR)
    Ort = DLookup("ort", "dbo_Kusta", "frems = " & KD_NR)
    Inhaber = DLookup("name2", "dbo_Kusta", "frems = " & KD_NR)
End Sub


Aufrufen funktionert dann ja ganz einfach mit

Modul1.Kundendaten (KD_NR)
wobei KD_NR das Feld ist in dem ich was eingebe

Jetzt ist nur die Frage wie ich es so weit verändere, dass die Variablen an das passende Formular zurückgegeben werden.

Hatte es schon mit
Public Sub Kundendaten(KD_NR As String, Formular As Form)
...

versucht und die Funktion dann mit 2 Werten versucht aufzurufen das hat aber nciht geklappt

Weiß jemand einen Rat oder geht das überhaupt?

Gruß

MzKlMu

Hallo,
ich will Dich ja in Deiner Begeisterung für VBA nicht bremsen, aber das ganze Vorhaben dürfte ziemlich überflüssig sein.
Du kannst mit einem einfachen Kombifeld den Primärschlüssel (KD_NR) des Datensatzes (aus dem Kombi) in der anderen Tabelle/Formular abspeichern. Die restlichen Felder noch mal zu speichern ist auch überflüssig. Das wäre ja redundant. Mit einer einfachen Abfrage mit beiden Tabellen (und der Beziehung) hast Du alle Felder zur Verfügung. Alles sehr komportabel und ohne eine einzeige Zeile VBA.
Es so wie vorgeschlagen zu machen, ist ja gerade der Sinn einer Datenbank.
Gruß Klaus

Falke22

Hi,

Aber dann hätte ich in allen 5 Tabellen den gleichen Kunden hinterlegt. Die Kundennummer ändert sich aber ständig.

Oder versteh ich dich falsch? Hinzu kommt das später noch Daten aus anderen Tabellen geholt werden sollen und will nicht zig abfragen machen ;)

MzKlMu

Hallo,
ZitatOder versteh ich dich falsch?
Vermutlich. Du kannst doch in jeder Tabelle einen anderen Wert eintragen.
In den Formularen ist je ein Kombifeld in dem die Kundennummer ausgewählt und dann als Fremdschlüssel gespeichert wird. Da brauchst Du noch nicht mal einen einzigen Buchstaben eingeben. Oder zur Vorauswahl, das Kombi verfeinert nähmlich automatisch mit jedem Zeichen die Auswahlmöglichkeit.
ZitatIch habe 5 Formulare die im Kopf alle mit den gleichen Kontaktdaten gefüllt werden sollen.
Auch da sehe ich Ungereimtheiten. Wozu 5 Formulare mit den gleichen Kopfdaten?
Gruß Klaus

Falke22

Weil jedes Formular aus "Kundeninformationen" besteht die immer gleich sind und weiteren Ansprechpartnern, etc die sich unterscheiden und unterschiedliche Bezeichnungen haben.

Bei 17000 Kunden ist eine Vorauswahl nicht sinnvoll da man die Nummer dann eh immer komplett eingibt (ist schneller als erst 3 Zeichen einzugeben und dann den Rest per auswahl)

Klar könnt ich die khndendaten auch in einem Formular und alle anderen Daten in einem weiteren Formular, aber jetzt hat man alle Daten auf einen bluck

MzKlMu

Hallo,
das ganze Konzept ist mürbe. Hast Du auch 5 Tabellen und jedes Formular greift auf eine andere Tabelle zu?
Wenn ja warum 5 Tabellen?

Irgentwie habe ich das im Zusammnhang noch nicht verstanden. Auf jeden Fall ist mal die redundante Speicherung von Feldwerten überflüssig. Ich bin auch der Überzeugung Du denkst viel zu kompliziert. Du willst Dinge programmieren, die Access automatisch kann.

Erkläre das mal etwas ausführlicher.
Gruß Klaus

Falke22

Hi,

also folgendes Szenario

Ich habe eine Tabelle da stehen die ganzen Kunden drin
Ich habe eine Tabelle da stehen Ansprechpartner drin
Ich habe eine Tabelle da stehen Inventardaten vom Kunden drin

Jetzt habe ich verschiedene Möglichkeiten
Kunden anlegen (einfach weil alles muss eingetragen werden)
Kunde wird geschlossen (Brauch Kundendaten, Inventardaten und Asprechpartner um diese zu informieren)
Kunde wechselt den Inhaber (Brauch Kundendaten, Inventardaten und Asprechpartner um diese zu informieren)
Kunde zieht um (Brauch Kundendaten, Inventardaten und Asprechpartner um diese zu informieren)

Bei jedem Vorgang werden unterschiedliche Leute angesprochen.

Was bei allen gleich ist, ist dass die Kundendaten aus der Tabelle geholt werden.

Von daher war meine Überlegung dieses mit einer Funktion und den DLookUp Befehlen zu machen und immer nur die Funktion aufzurufen
Ich will ungern für jeden Fall eine Abfrage machen, weil ich lieber mit VBA arbeite (auch wenn es vielleicht umständlicher ist)

Da der Kunde sich nach mind. 8 Kriterien unterscheidet (die in unterschiedlichen Konstellationen auftreten können) möchte ich ungern Abfragen erstellen

MzKlMu

Hallo,
In die 5 Tabellen kommt nur die Kundennummer. Dann brauchst Du genau 5 Abfragen. In jeder Abfrage kommt noch die Kundentabelle mit einer Beziehung über die Kundennummmer dazu. Das wars. Zukünftig arbeitest Du nur mit den Abfragen. Es ist sowieso nicht empfehlenswert mit den Tabellen direkt zu arebeiten. In Tabellen kann man z.B. nicht zuverlässig sortieren.
Gruß Klaus

Falke22

Wenn ich die Tabellen schreiben würde, wäre es ja möglich. Die Kundeliste bekomme ich per ODBC aus einer anderen Datenbank.
Aber naja werd ich mal weitersuchen wie es möglich ist die Textfelder direkt zu füllen. Hat eigentlich auch wenig mit Redundanz zu tun, weil bei der Funktion doch auch nur aus der Tabelle die Daten der Kundennummer direkt in die Textfelder geschrieben wird.

Hätte ich vielleicht erwähnen sollen, dass es sich in der Funktion nicht um Variablen sondern um Namen der Textfelder handelt?


Gruß

Trotzdem danke für deine Hilfe

MzKlMu

Hallo,
ZitatHat eigentlich auch wenig mit Redundanz zu tun, weil bei der Funktion doch auch nur aus der Tabelle die Daten der Kundennummer direkt in die Textfelder geschrieben wird.
Natürlich ist das Redundanz. Du hast doch die schon mal in einer Tabelle und willst diese noch mal in eine andere Tabelle schreiben.
Du unterschätzt/überschätzt das Problem in seiner Einfachheit.
Gruß Klaus

Falke22

ZitatNatürlich ist das Redundanz. Du hast doch die schon mal in einer Tabelle und willst diese noch mal in eine andere Tabelle schreiben

Ich glaube wir missverstehen uns :)

Ich habe zwar Tabellen aus denen ich diese Informationen ziehe aber diese werden nirgends neu gespeichert.
Die Formulare dienen nur zur Kontrolle der Daten um im Anschluss daran einen Bericht zu generieren der per Email versandt wird.

Danach werden diese Daten nirgends gespeichert.

Gruß

MzKlMu

Hallo,
aber dann ist es doch erst recht überflüssig. Über eine Abfrage kannst Du doch jederzeit die fehlenden Felder anzeigen, wenn die Tabellen mit einer Beziehung über die Kundennummer verknüpft sind.
Gruß Klaus

Falke22

Naja schöner wäre es zwar wenn du mir verraten würdest wie es über VBA gehen würde da es eben nciht nur 2 Abfragen sind, aber gut werd ich weitersuchen müssen.

Ich habe hinterher 30 Felder die insgesamt aus den unterschiedlichsten Feldern gefüllt werden müssen in unterschiedlichen Konstellationen. Da mit Abfragen zu arbeiten ist für mich einfach zu unübersichtlich. Da arbeite ich lieber mit Funktionen und VBA und schon läufts :) Da komm ich besser mit klar

MzKlMu

Hallo,
ich gebe noch nicht auf. Du brauchst genau 5 Abfragen, keine mehr und keine weniger. Du arbeitest auch nach wie vor mit Formularen und nicht mit den Abfragen direkt. Die Formaulare werden an die Abfrage(n) gebunden. Du merkst gar nicht, dass Du Abfragen hast. Da ist nichts unübersichtlich, im Gegenteil.

Im Verhältnis zu den Abfragen ist die VBA Version eine lahme Ente. Im Regelfall ist ohnehin VBA zur Datenmanipulation zu vermeiden. Das ist eine Datenbank und da verwendet man SQL (=Abfragen).
Gruß Klaus

Falke22

Wenn ich dich richtig verstehe brauche ich

Abfrage für die Kundeninformationen
Abfrage für die ANsprehcpartner die immer verschieden sind (sowohl in Anzahl als auch vom Namen her)
Abfrage für weitergehende Informationen zum Kunden (sind ca 20 und immer verschieden)

Die Kundeninformationen kann ich immer aus der gleichen Tabelle holen.
Die Ansprechpartner sind in mehreren Tabellen
Die weitergehenden Informationen sind in anderen Tabellen

Ob ich per VBA DLookup verwende (SQL) oder ob ich ne Abfrage erstelle und darauf zugreife. Wo soll da der Unterschied sein?
Mag ja sein dass VBA langsamer ist, aber Geschwindigkeitsverluste sind mir bisher noch nciht aufgefallen