Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Textfelder Verknüpfen und Batch file





Frage

Guten Morgen, Ich habe gleich 2 Probleme vor denen ich stehe :) 1. ist es möglich mehrere Textfelder bzw. Listenfelder zu verknüpfen, dass wenn man in einem Listenfeld z.B. den Nachnamen einer Person auswählt, in den weiteren Feldern automatisch der Vorname, Telenr. usw. von Acces ausgewählt und eingetragen wird ? 2. Ich habe eine Netzwerktabelle, in der Die Rechnernamen und die Ip Addressen stehen. Ich möchte gerne ein File ausgeben können, in dem die aktuellen Ip Addressen stehen und ein vordeffinierter Text, der aber nicht in der Datenbank steht. In Kurzform: ich will ein Batchfile kreigen, das die Rechner anpingt. ich hoffe das kann man verstehen, istso früh am morgen ;) Danke schonmal für eure Hilfe. Gruß Peter

Antwort 1 von DatenKay

Hi Peter,
wenn's nur darum geht, in einem Formular auf den entsprechenden Datensatz zu positionieren, dann benutze die Methoden FindFirst, FindNext, FindPrevious oder FindLast, denen Du als Suckriterium Dein gewünschtes Suchkriterium übergibst.
z.B.:
Du hast im Formular ein Feld (am besten ein gesperrtes Textfeld) in dem die eindeutige (numerische) ID Deines Kunden (oder was auch immer Du Deiner DB verwaltest) steht und ein zweispaltiges Kombinationsfeld(halte ich für besser als ein Listenfeld, da platzsparender). Als Datensatzherkunft für das Kombifeld dient eine Abfrage (oder Tabelle), die die eindeutige ID (Spalte 1) und den gewünschten Texteintrag (Name o.a., Spalte 2) enthält. Die Spaltenbreiten der Kombifeldes sind auf 0 cm;xy cm gesetzt, dann wird nur der Texteintrag angezeigt. Die Eigenschaft "nur Listeneinträge" setzt Du auf "ja".
Beim Ereignis "Nach Aktualisieren" des Kombifeldes schreibst als Du Ereignisprozedur im Code-Editor folgenden Code:
Private Sub DeinKombinationsfelname_AfterUpdate()
SuchString = "DeinIDFeldName = '" & [DeinKombinationsFeldName].Column(0) & "'"
Me.Recordset.FindFirst SuchString[/Code]
End Sub

Die variable "Suchstring" muss Deklarationsbereich des Codefensters (ist ganz oben) als Stringvariable deklariert sein:
[Code] Dim Suchstring as String[/Code]

Immer wenn Du aus dem Kombifeld etwas auswählst, wird im Formular der erste Datensatz angezeigt, der dem Kriterium =ID des gesuchten Objektes entspricht. Wenn in Deiner Formulardatenbasis (Tabelle, Abfrage) mehrere DS mit der entsprechenden ID existierten, kannst Du mit "FindNext (FindPrevious oder FindLast) Suchstring", die Du z.B. der Ereignisprozedur _Click von Schaltflächen zuweist, navigieren.

Natürlich kannst Du der Methode Find... auch dierekt einen Namen oder etwas anderes übergeben (z.B. die zweite Spalte deines Kombifeldes =.Column(1)).

Hinweis:
Die Methode Find... verwendet immer Daten vom Typ "String". Wenn nach Zahlen vom Typ Integer, Long etc. gesucht werden soll, müssen diese in Hochkommata gestellt werden (siehe Mein Beispiel). Wenn Du einen Text übergibst, dann dürfen da keine Hochkommata stehen, der Code sieht dann so aus:
[Code]Suchstring = "DeinSuchfeldName = " & Suchstring.

Versuch's ' mal...

Chiao,
DatenKay

Antwort 2 von Dieter.M.

Hi DatenKay,
Super danke für deine ausführliche Antwort. Habe es gerade ausprobiert. jedoch gibt es ein Fehler wenn ich denn nun einen Namen auswähle und die weiteren Felder gefüllt werden sollen.
Und zwar zeigt ein gelber Pfeil auf Private Sub Name_ID_AfterUpdate()
und markiert ist: Me.Recordset.FindFirst Suchstring.
Nun muss ich leider sagen, das ich mich in diesem Code Editor nicht ganz so gut auskenne und nicht weiterkomme.
Das mit dem Listenfeld hab ich so gemacht wie du vorgeschlagen hast, sieht wirklich besser aus. :)

Gruß Peter

Antwort 3 von DatenKay

Hi Peter,
Du hast Recht, die Findfrist verursacht hier den Fehler. Bitte poste die genaue Fehlermeldung, dann kann man das Problem besser eingrenzen. Außerdem beschreibe bitte genau die Datenbasis des Formulars (Abfrage über welche Tabellen mit welchen Feldern? Tabelle mit welchen Feldern im Formular?).
Sonst tappen wir im Dunklen...

Gruß, DatenKay

Antwort 4 von Dieter.M.

Ok, ich versuchs:

Das Formular bezieht sich auf eine Tabelle die ich Main genannt habe. in dieser Tabelle sind 4 Felder ( Name,Nachname,telefonnummer,Email). Dann habe ich eine zweite Tabelle, in der wiederum diese 4 Felder stehen plus ein Feld das Name_ID heisst, Autowert hat und das ich den Primärschlüssel gegeben habe. Ich habe jetzt jeweils in die Main Tabelle zu den 4 Feldern eine Beziehung gezogen, so dass die Personen mehrmals auftreten können und man sie per Nachschlagefeld einfach reinholen kann.

Aus der main Tabelle habe ich nun ein Formular erstellt. in diesem Formular sind nun die 4 Felder aus der Main Tabelle ( Name,nachname,Telefonnummer,Email) Ich möchte nun unter nachname (kombinationsfeld) z.B. DatenKay auswählen können und es sollen automatisch die dazugehörigen Infos, also noch der vorname, Telefonnumemr und email, eingetragen werden.

der komplette fehlercode ist:

Private Sub Name_ID_AfterUpdate()
Suchstring = "Name1_ID = '" & [Name2_ID].Column(0) & "'"
Me.Recordset.FindFirst Suchstring

hoffe das passt so :)

Gruß Peter

Antwort 5 von DatenKay

Hi Peter,

sorry, ich habe mich wohl missverständlich ausgedrückt. Mit "DeinIDFeldName" ist nicht der Name eines Formularfeldes, sondern der Feldname des dem Formular zugrunde liegenden Recordsets (Tabelle/Abfrage) gemeint! Nochmal sorry, mein Fehler.

Klar, dass dann Dein Code nicht funzt, da in Deiner Tabelle "Main" ja gar kein ..._ID-Feld vorhanden ist.
Bei Dir müsste eigentlich so heißen:
[Code]Suchstring = "Nachname = " & [Name2_ID].Column(1)[/Code]

Übrigens:
Huh??? Dein Datenbankdesign ist aber mächtig daneben...

In Deiner DB sind die Personen nicht eindeutig definiert! Die Tabelle "Main" enthält sowohl Daten zur Person (Vorname,Nachname) als auch untergeordnete Daten wie Telefonnummer und Email, die ja pro pro Person durchaus mehrere Werte haben können. D.h.: wenn eine Person zwei (oder mehr) Telefonnummern hat, stehen in der Tabelle "Main" auch zwei (mehrere) Datensätze, bei denen Vorname und Name identisch sind.
In Deiner zweiten Tabelle stehen im Prinzip die gleichen Datensätze, mit dem Unterschied, dass die Datensätze durch Name_ID(Autowert) für die Datenbank eindeutig gemacht werden. Nur, die Eindeutigkeit des Datensatzes bezieht sich nicht auf die Person (Vorname/Nachname) sondern auf die Kombination Vorname/Nachname/TelefonNr/Email. Das ist absolut redundant!

Wenn Du das so machst, ist Chaos (hoch 3) für alle weiteren Features Deiner Datendank vorprogrammiert(lies 'mal was über relationale Datenbanken)!

KlugModus an:
Normalerweise macht man das etwa so:
In einer Tabelle stehen alle Personen, die durch Vorname, Nachname (und ggf. weitere Felder wie Geburtsdatum, Geburtsort o.a.) eindeutig (!) identifiziert werden können. Diesen Personen wird dann eine Personen_ID (Autowert)zugeordnet. Der Primärschlüssel der Tabelle wird über alle Felder gelegt, die dazu notwendig sind, um die Person wirklich eindeutig zu identifizieren. Z.B. Personen mit gleichem Vornamen und Nachnamen unterscheiden sich durch das Geburtsdatum, einen DR.-Titel oder andere Kriterien, also gehören die Unterscheidungskitrerien auch zum Primärschlüssel.
Untergeordnete Daten wie Adressen, Telefonnummern, Email etc., stehen in einer (mehreren) anderen Tabelle(n). Die untergeordnete Tabelle enthält nur noch die speziellen Daten (z.B. TelefonNr) und die Personen_ID. Über die Personen_ID werden alle Untergeordneten Daten einer Person (und nicht umgekehrt) zugeordnet.

NochMehrKlugModus an:
Im Idealfall einer "normalisierten relationalen Datenbank" enthält jede Tabelle nur noch eine einzige Information und eine ID (z.B. Tabelle Vornamen: Vorname, Vorname_ID; Tabelle Nachnamen: Nachname,Nachname_ID; Tabelle Orte: Ortname, Ortname_ID; Tabelle Telefonnummer, Tel_ID; usw.).
Diese Informationen werden dann über Zwischentabellen, die ausschließlich _ID's enthalten, zusammengeführt.
Z.B.:
Die Zwischentabelle "Personen" enthält nur noch die Felder:
Personen_ID(Autowert),Vorname_ID, Nachname_ID u.s.w...
NochMehrKlugModus aus.
KlugModus aus. :)

Nichts für Ungut, überdenk' 'mal dein Datenmodell...

Gruß,
DatenKay


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: