Neuigkeiten:

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

Mobiles Hauptmenü

Daten aus ungebundenem Textfeld speichern

Begonnen von kfl, August 20, 2023, 14:17:27

⏪ vorheriges - nächstes ⏩

kfl

Hallo,

ich habe im Formular Textfelder welche ich mit Daten aus einem Kombinationsfeld füllen lasse. (Kombinationsfeld ist aus Adressdatenbank) die Textfelder sind die Postleitzahl, Namen, Ort etc. und holt sich die Daten aus den jeweiligen Kolummnen des Kombifeldes. Das funktioniert super.

Nun muss ich aber in meiner Tabelle das Ergebnis daraus speichern.
Wenn ich den Datensatz erfasse bleiben jetzt die Felder in der Tabelle leer, klar, weil die Textfelder ja einem Steuerungselement zugeordnet sind sondern dem Kombi feld. Da ich nun in der Tabelle leer Felder habe kann ich nicht weiter damit arbeiten.
Aufgrund des Kombifeldes soll angezeigt werden z.b. Wien und Wien gespeichert werden unter Tabelle - Ort. Wenn ich dann den Datensatz aufrufe muss ich unter Ort Wien stehen haben damit ich z.b. Abfrage erstelle was ist alles in Wien. Hoffe Ihr versteht was ich meine.

Geht es, dass ich das die Daten welche im Textfeld angezeigt werden auch in meiner Tabelle speichere?

Danke für Hilfe.
Günther

MzKlMu

Hallo,
das Vorhaben ist in allen Punkten ersatzlos überflüssig.
Auch die Felder über Column(n) zu füllen braucht es nicht.

Die Tabelle mit den Adressen benötigt einen Primärschlüssel und nur dieser wird in Deiner jetzigen Tabelle gespeichert.
Mit einer Abfrage aus beiden Tabellen kannst Du dann alle Felder (auch die der Adressen) anzeigen.

Hast Du Beziehungen angelegt ?
Wenn ja, Bild des Beziehungsfensters hier zeigen.
Wenn nein sollte das nachgeholt werden. Eine Datenbank ohne Beziehungen ist nicht funktionsfähig.

Du solltest Dir die Grundlagen zu Access aneignen. Access muss man lernen.

Hier mal ein Link:
https://www.access-tutorial.de/

Gruß Klaus

kfl

Hallo,

ich arbeite seit fast 20 Jahren mit Access, bin kein Experte aber denke ich kenne mich nicht schlecht aus damit.
Ist mir alles bekannt mit Schlüssel, Abfragen etc. Das Problem hierbei ist das ich ein bestehendes Programm ändere. Vorher hatte ich die Ortsdaten in meiner Tabelle eingetragen, nun jedoch will ich mit Adressdatei arbeiten. Bedeutet, die bestehende Tabelle wird benutzt für umfangreiche weitere Anwendungen. Ich wickle mit diesem Programm rund 5000 Aufträge ab. Verrechnung, Statistik, und und. Fast alles läuft über die Tabelle selbst.

Daher, so glaube ich halt, brauche ich in der Tabelle diese Eintragungen, ich müsste sonst alles, und das ist extrem umfangreich umprogrammieren basierend auf die neue dann entstehende Abfrage.

lg günther

MzKlMu

Hallo,
Zitatich arbeite seit fast 20 Jahren mit Access,
Umso schlimmer, dass Du das so machen willst. Das ist ein kapitaler Fehler.
Da muss auch nichts umprogrammiert werden. Du musst der Abfrage nur den gleichen Namen geben wie den der Tabelle.
Vorher Tabelle umbenennen.
Das ist viel einfacher als Du gerade denkst.

Ansonsten musst Du die Adressenfelder binden und per VBA die Inhalte über Column(x) zuweisen.



Gruß Klaus

kfl

Hallo,

ich habe auch gerade nachgedacht, vielleicht ist es ja doch einfacher wie ich angenommen habe. Ich schaue mal mit der neuen Abfrage die (z.b. Stadt) als genau das Feld reinzubekommen wo die Stadt stehen muss, ich muss dann aber alle meine sicherlich 100 Abfragen und Verknüpfungen auf die dann neue Abfrage aufbauen und nicht mehr auf die Tabelle.  Jetzt habe ich Abfrage z.b. Städte basierend auf Tabelle und dann muss ich diese Abfrage ja basierend auf der Abfrage Tabelle/Adressliste bauen, denn nur dort steht dann ja die Stadt drinnen. Oder sehe ich da was falsch?
Wie würde das mit dem VBA Code gehen. Ich glaube ich hatte da mal was gelesen ME!(Textfeld im Formular= = ME!Feld in der Tabelle  - weis es aber nicht mehr wie das gegangen ist.

liebe Grüsse Günther und schon jetzt mal vielen Dank für Deine so rasche und fachmännische Antworten.

Beaker s.a.

Zitatich arbeite seit fast 20 Jahren mit Access,...
Fast alles läuft über die Tabelle selbst.
Da möchte mal das Beziehungsfenster sehen ;-)
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

Hallo,
nach Beziehungen hatte ich schon gefragt, wurde aber ignoriert.
Gruß Klaus

kfl

Hallo,

wie kann ich hier einen Screenshot posten?

lg

MzKlMu

Hallo,
mit dem "Antwortbutton" gibt es unten "Attachments and other options".
Dort kannst du ein Bild hochladen.

Nicht "Schnellantwort" verwenden.
Gruß Klaus

kfl

Sie dürfen in diesem Board keine Dateianhänge sehen.

kfl

Hallo,

das ist nur ein Teil. Denke mein Programm ist sehr umfangreich.
Bis jetzt hatte ich eben die Plz, Ort, Namen jedes mal im Auftragsformular eingetragen. Neu ist, ich habe eine Adresstabelle erstellt und fülle im Auftragsformular diese notwenidgen Daten mittels Kombinationsfeld.
Ich benötige aber die Angaben (z.b. den Ort) in meiner Tabelle (Aufträge) um damit weitere Bearbeitungen machen zu können. (nicht nur Abfragen)

Im formular wird mir mit dem Steuerungselement (z.b. Column2) alles schön angezeigt aber in der Tabelle nicht gespeichert. Das ist mein Problem.

lg günther

kfl

zur Erklärung noch:

Ich habe ein Transportunternehmen mit 30 LKW. Das gesamte Auftragsmanagement incl. Verrechnung, Lademittelverwaltung und Statistik läuft über Access.
Es gibt unter anderem die Tabelle Aufträge. Da sind alle Auftragsrelevanten Daten enthalten. Auch die Felder Beladeort und Entladeort.
In den Abfragen für offene Aufträge, Tourenlisten bis hin zur Verrechnung werden diese Felder benötigt. (werden z.b. auf der Rechnung angeführt)
Ich hatte jedes Mal diese Daten eingegeben. Nun machte ich eine Adressdatei und will so viel schneller diese Daten erfassen, es geht noch weiter, künftig will ich dann meinen Fahrern die Aufträge so übermitteln. Bis jetzt hatte ich alle Transportdaten in einem Word Dokument für die Fahrer erfasst und dann auch noch extra in meinem Programm. Also im Grunde doppelt. So spare ich mir künftig einen Schritt, ich erfasse diese Daten nur noch im Programm (auch die Adressdaten sind in der Tabelle Adresse enthalten), übernehme diese Adressdaten per Kombifeld in den Auftrag um dann daraus die Aufträge an die Fahrer zu generieren.
Da die Felder welche aus dem Kombifeld übernommen werden sollten nun aber in der Tabelle leer sind geht das alles nicht.

Hoffe Ihr versteht worum es geht.
lg günther

MzKlMu

Hallo,
O,je da weis man ja gar nicht wo man anfangen soll. Alleine die Anzahl der Abfragen ist schon fragwürdig. Aus den Abfragenamen lässt sich erkennen, dass man die Anzahl durch Parameterabfragen über Formulare gesteuert erheblich verringern könnte.
Das gezeigte Bild ist auch nicht die Beziehungen, sondern der Entwurf einer Abfrage mit Verknüpfungen (die Linien sind keine Beziehungen). Und auch diese Verknüpfungen dürften ungeeignet sein. Über einen Namen lässt sich keine brauchbare Verknüpfung einrichten. Beim 2. Müller hast Du ein Problem.
Beziehungen und Verknüpfungen laufen im Regelfall über den Primärschlüssel (die ID), das ist ja der Sinn der ID.
Außerdem ist in den Beziehungen referentielle Integrität einzustellen. RI ist das A+O einer Datenbank und macht erst aus einem Datenhaufen eine Datenbank.
Hast Du überhaupt Beziehungen angelegt ?

Für 20 Jahre Access hast Du sehr wenig gelernt. Auch wenn die DB funktioniert.

Du solltest Dir die Grundlagen aneignen (siehe Link in #1) und dann noch mal von vorn anfangen.

Um auf Dein Problem zurückzukommen. Das lässt sich nur mit VBA erledigen.

Du musst im Formular auch die Adressfelder aus der Tabelle anzeigen bzw. die Felder binden.

Im Ereignis "Nach Aktualisierung" des Kombis weist Du den Feldern die Werte zu:

ZitatMe.Ort = Me.KombifeldName(Column(1)
Me.PLZ = Me.KombifeldName(Column(2)
'usw.
Deine jetzigen Felder mit Column im Steuerelementinhalt entfallen ersatzlos.
Gruß Klaus

Bernie110

#13
Zitat von: kfl am August 20, 2023, 20:58:13Ich habe ein Transportunternehmen mit 30 LKW. Das gesamte Auftragsmanagement incl. Verrechnung, Lademittelverwaltung und Statistik läuft über Access.
Es gibt unter anderem die Tabelle Aufträge. Da sind alle Auftragsrelevanten Daten enthalten. Auch die Felder Beladeort und Entladeort.
In den Abfragen für offene Aufträge, Tourenlisten bis hin zur Verrechnung werden diese Felder benötigt. (werden z.b. auf der Rechnung angeführt)
Ich hatte jedes Mal diese Daten eingegeben. Nun machte ich eine Adressdatei und will so viel schneller diese Daten erfassen, es geht noch weiter, künftig will ich dann meinen Fahrern die Aufträge so übermitteln. Bis jetzt hatte ich alle Transportdaten in einem Word Dokument für die Fahrer erfasst und dann auch noch extra in meinem Programm. Also im Grunde doppelt. So spare ich mir künftig einen Schritt, ich erfasse diese Daten nur noch im Programm (auch die Adressdaten sind in der Tabelle Adresse enthalten), übernehme diese Adressdaten per Kombifeld in den Auftrag um dann daraus die Aufträge an die Fahrer zu generieren.
Da die Felder welche aus dem Kombifeld übernommen werden sollten nun aber in der Tabelle leer sind geht das alles nicht.

Ich denke dein Vorhaben eine Adresstabelle zu pflegen ist sinnvoll.
Die Unsicherheit besteht also lediglich darin, dass du nicht weisst wie du die daten dann in deine Auftagstagbelle bekommst. Richtig ?

Ich empfehle dir die Adressdaten in deine Auftragstabelle zu speichern.
Grund : Adressdaten können sich immer ändern. Und du benötigst für dein Vorhaben die, die gerade aktuell sind.
Richtig ?

Also lange Rede kurzer Sinn. Lass das mit den Nachschlag / Kombifeldern. Das ist in jedem Fall Murks, denn damit verbaust du dir die Chance Adressen zu filtern und zu suchen.
(Ich hab auch ein Transportprogramm geschrieben.  Meine Adresstabelle hat momentan über 150.000 Adressen.
Alleine über 25.000 sind schon nicht mehr aktuell. :D )
Da willst du nicht mit Kombifeldern arbeiten.

Wenn du kaum Code kannst, dann ist die Antwort auf alle Fragen : Access Abfragen.
Ob Anfüge- oder Aktualiseriungsabfrage.... sie lösen fast alle deine Probleme mit sehr wenig Code.

Beide kann man in VBA wie folgt mit einer Schaltfläche auslösen :

Bei click :
Docmd.setWarnings False
Docmd.openquery "Name_deiner_Anfügeabfrage"
Docmd.setWarnings True


Ich weiss nicht was du alles kannst. hier noch ein kleiner Tipp zur Adress-Tabelle.

Lege folgende Felder an :

ADRESS_ID = PK + Autowert
FirmenName1 = Textfeld
FrimenName2 = Textfeld
Strasse = Textfeld
Land = Textfeld
Plz = Textfeld
Ort = Textfeld
Tel = Textfeld
Internetadresse = Textfeld

( ich mach meistens alles zu Textfeldern. bedenke das bei PLZ auch gerne mal ein Buchstabe mit drin ist ;)


Noch ein weiterer Tip :
Wenn du bei einer Abfrage unten ein Kriterium folgendes eingibst, dann kannst du auch über ein Formular daten Filtern ( Würde ich jederzeit bei kleinen Daten Mengen machen also so bei unter 10.000 Datensätzen)

Kriterium : wie "" & Formulare!DeinFormularName!deinfeldname & "*" 

( Ich hab in meiner Adressdatenbak derzeit fast 150.000 Adressen und es ist immer noch akzeptabel )

Mit diesem Kriterium kannst du eindeutige Datensätze filtern und somit auch ziemlich einfach auslesen :

Hast du im Form Aufträge als Beispiel ein Feld mit dem Namen Absender_Adress_Id und würdest hier eine 100 eingeben,
dann würde die Abfrage den Datensatz mit eben der ID 100 finden.
Nun kannst du die Daten auch im Formular Aufträge auslesen.

Lege noch weitere Ungebundene Felder im Formular Aufträge an :
Beispiel:

Absender_Adress_Id
Absender_FirmenName
Absender_Ort_lang

Im Feld Absender_Adress_Id gibts du dann folgenden Code bei Aktualisierung an :

if me.Absender_Adress_ID > 0 then
  If DCount("*","NameDeinerAdressAbfragemitdemo.g.Kriterium") > 0 then
    me.Absender_FirmenName = Dlookup("Firmenname1","NameDeinerAdressAbfragemitdemo.g.Kriterium")
    me.absender_Ort_lang =  Dlookup("Land","NameDeinerAdressAbfragemitdemo.g.Kriterium") & "-" & Dlookup("Plz","NameDeinerAdressAbfragemitdemo.g.Kriterium") ) & " " & Dlookup("Ort","NameDeinerAdressAbfragemitdemo.g.Kriterium")
end if
end if


Daten von einem Formular zum anderen übergibst du mit dem VB Code :

Forms!Aufträge!Absender_Adress_ID = me.listenfeld.column(0)
oder
Forms!Aufträge!Absender_Adress_ID = me.Adress_ID


usw..

also mit dem kannst schon ziemlich viel anstellen ;)
Naja liegt an dir, wie einfach du es haben möchtest ;) Lg Bernie

Ps. Sorry hab zu schnell abgeschickt :D falsche Taste verdammt .




MzKlMu

Hallo Bernie,

einige Deiner Vorschläge können so nicht stehen bleiben.
ZitatIch empfehle dir die Adressdaten in deine Auftragstabelle zu speichern.
Das ist ganz sicher falsch. Die Adressenfelder haben in der Auftragstabelle nichts zu suchen. In die Auftragstabelle kommt nur ein Feld für den Fremdschlüssel der Adressen. Eine Firma hat ja mehrere Adresssen, Lieferanschrift, Rechnungsanschrift, Postanschrift usw.
Wie willst Du das regeln wenn die Adressenfelder in der Auftragstabelle sind?
Die Adressentabelle muss eine n:m Tabelle werden mit einem Fremdschlüssel zur Adressenart.
Die zutreffende Adresse wird per Kombi ausgewählt. Die aktuelle Adresse wird mit einem Hakenfeld kenntlich gemacht.

Docmd.openquery ist für Aktionsabfragen ungeeignet. Damit werden keine Fehlermeldungen ausgegeben.
Es muss auch unterschieden werden zwischen Warnmeldungen (sie wollen ....) und Fehlermeldungen.
Aktionsabfragen werden mit Execute ausgeführt:
CurrentDb.Execute "Abfragename", DbFailOnErrorDbFailOnError sorgt für die notwendige Fehlermeldung wenn die Abfrage selbst nicht funktioniert.
Gruß Klaus