PKey/Eingabeformat/Suchen

Hallo,

dieser Artikel wird leider etwas komplizierter. In diesem Formular http://www.bilder-speicher.de/07120223581572.maxdire… wird ganz oben bei ‚Location‘ ein eindeutige Ortsangabe eingegeben.

Die Ortsangabe sieht z.B. so aus, C50:84:37:20. Für dieses Feld habe ich das Eingabeformat ‚\C99:99:99:99‘ definiert. Das bedeutet, in der zugrundeliegenden Tabelle werden lediglich die 8 Zahlen abgespeichert, ohne „C“ und ohne „:“.

Die Ortsangabe dient als PKey. Der Hintergrund der Zahlen ist folgender:
Das „C“ bezeichnet den Server. Es gibt auch noch „A“, „B“, „D“ und in einem Jahr vielleicht „E“.
Die erste Zahl, C"99", bezeichnet die Galaxie. Sie kann von 00 bis 99 alle Werte annehmen.
Die zweite Zahl, C99:„99“, bezeichnet die Region. Kann ebenfalls von 00 bis 99 alle Werte annehmen.
Die dritte Zahl, C99:99:„99“, bezeichnet das System. Geht auch von 00 bis 99.
Die letzte Zahl, C99:99:99:„99“, bezeichnet die Position. Diese Zahl kann nicht alle Werte von 00 bis 99 annehmen sondern nur ganz bestimmte. Die erste, "9"9, geht von 1 bis 5, die zweite von 0 bis 3.

Soweit ok! Zum ersten soll es nun möglich sein, auch den Server mit anzugeben. Als ich die Datenbank erstellt habe, habe ich lediglich Server C berücksichtigt.
Dieses Problem würde ich so lösen, dass ich eine weitere Spalte erstelle, „Server“, wo eben nur der einzelne Buchstabe eingetragen wird. Es wäre auch denkbar, 4 Spalten A,B,C,D mit einem Wahrheitswert zu erstellen. Dort wird dann der entsprechende Server angeklickt. Ist bei einem Formular schneller auszufüllen. Die Spalte(n) „Server“ und „Location“ bilden dann den neuen PKey. Noch besser wäre vielleicht ein Kombifeld mit den vier Servern. Das Ding könnte man ganz einfach um den evtl. kommenden 5ten Server „E“ erweitern.

Jetzt wird’s kompliziert, weil ich etwas ganz bestimmtes möchte.
Wie es vermuten lässt, gibt es eine Unmenge Datensätze. Wenn ich bei „Location“ einen Wert eintrage, der schon vorhanden ist, sagt mir Access das erst, wenn ich mit allen Eintragungen fertig bin und einen nächsten Datensatz anfügen möchte. Das ist natürlich ärgerlich. Darum wäre mir das am liebsten, wenn Access sofort zu dem Datensatz springt (falls vorhanden), dessen Location ich gerade angegeben habe. Ist das irgendwie möglich?

Grüße und vielen Dank für die Hilfe,
Rogge

Hallo,

dieser Artikel wird leider etwas komplizierter. In diesem
Formular
http://www.bilder-speicher.de/07120223581572.maxdire…
wird ganz oben bei ‚Location‘ ein eindeutige Ortsangabe
eingegeben.

Die Ortsangabe sieht z.B. so aus, C50:84:37:20. Für dieses
Feld habe ich das Eingabeformat ‚\C99:99:99:99‘ definiert. Das
bedeutet, in der zugrundeliegenden Tabelle werden lediglich
die 8 Zahlen abgespeichert, ohne „C“ und ohne „:“.

Die Ortsangabe dient als PKey. Der Hintergrund der Zahlen ist
folgender:
Das „C“ bezeichnet den Server. Es gibt auch noch „A“, „B“, „D“
und in einem Jahr vielleicht „E“.
Die erste Zahl, C"99", bezeichnet die Galaxie. Sie kann von 00
bis 99 alle Werte annehmen.
Die zweite Zahl, C99:„99“, bezeichnet die Region. Kann
ebenfalls von 00 bis 99 alle Werte annehmen.
Die dritte Zahl, C99:99:„99“, bezeichnet das System. Geht auch
von 00 bis 99.
Die letzte Zahl, C99:99:99:„99“, bezeichnet die Position.
Diese Zahl kann nicht alle Werte von 00 bis 99 annehmen
sondern nur ganz bestimmte. Die erste, "9"9, geht von 1 bis 5,
die zweite von 0 bis 3.

Soweit ok! Zum ersten soll es nun möglich sein, auch den
Server mit anzugeben. Als ich die Datenbank erstellt habe,
habe ich lediglich Server C berücksichtigt.
Dieses Problem würde ich so lösen, dass ich eine weitere
Spalte erstelle, „Server“, wo eben nur der einzelne Buchstabe

genau so!

eingetragen wird. Es wäre auch denkbar, 4 Spalten A,B,C,D mit
einem Wahrheitswert zu erstellen. Dort wird dann der

Nein, keine gute Idee. Die Datenbankstruktur müsste jedes Mal
angepasst werden, wenn ein Server dazukommt, ganz zu schweigen von
den Problemen, die Du Dir einhandelst, wenn Du die Daten auch mal
auswerten willst.

entsprechende Server angeklickt. Ist bei einem Formular
schneller auszufüllen. Die Spalte(n) „Server“ und „Location“

Die Bedienung hat mit den Datenstrukturen nichts zu tun

bilden dann den neuen PKey. Noch besser wäre vielleicht ein
Kombifeld mit den vier Servern. Das Ding könnte man ganz
einfach um den evtl. kommenden 5ten Server „E“ erweitern.

eben

Jetzt wird’s kompliziert, weil ich etwas ganz bestimmtes
möchte.
Wie es vermuten lässt, gibt es eine Unmenge Datensätze. Wenn
ich bei „Location“ einen Wert eintrage, der schon vorhanden
ist, sagt mir Access das erst, wenn ich mit allen Eintragungen
fertig bin und einen nächsten Datensatz anfügen möchte. Das
ist natürlich ärgerlich. Darum wäre mir das am liebsten, wenn
Access sofort zu dem Datensatz springt (falls vorhanden),
dessen Location ich gerade angegeben habe. Ist das irgendwie
möglich?

Ja, ist es, aber das von Dir gezeigte Formular ist anscheinend nicht direkt an die Datenquelle gebunden, denn dann wäre die Eingabe eines doppelten PKeys nicht möglich. Man müsste diese Überprüfung daher im Code des steuernden Formulars vornehmen.

Grüße und vielen Dank für die Hilfe,
Rogge

Hallo Rogge,

Die Ortsangabe sieht z.B. so aus, C50:84:37:20. Für dieses
Feld habe ich das Eingabeformat ‚\C99:99:99:99‘ definiert.

ich persönlich würde 5 Eingabefelder definieren. WEnn dann alle ausgefüllt sind, würde ich die Daten dann als Key zusammenfügen und in der Tabelle speichern.

Beispiel: ░ ░░:░░:░░:░░

So hättest du auch die Möglichkeit ein Pulldownfeld für den Server zu nutzen.

Noch besser wäre vielleicht ein
Kombifeld mit den vier Servern. Das Ding könnte man ganz
einfach um den evtl. kommenden 5ten Server „E“ erweitern.

genau

Wie es vermuten lässt, gibt es eine Unmenge Datensätze. Wenn
ich bei „Location“ einen Wert eintrage, der schon vorhanden
ist, sagt mir Access das erst, wenn ich mit allen Eintragungen
fertig bin und einen nächsten Datensatz anfügen möchte.

du kannst jederzeit mit Dlookup suchen!! und prüfen, ob die Daten vorhanden sind!

Das ist natürlich ärgerlich. Darum wäre mir das am liebsten, wenn
Access sofort zu dem Datensatz springt (falls vorhanden),
dessen Location ich gerade angegeben habe. Ist das irgendwie
möglich?

klar, lege mit dem Assistenten ein Pulldownfeld an.
Wähle: Einen Datensatz im Formular basierend auf dem im Kombifeld gewählten Wert suchen.

schau dir dann mal den VBA-Code an :smile:

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

ich persönlich würde 5 Eingabefelder definieren. WEnn dann
alle ausgefüllt sind, würde ich die Daten dann als Key
zusammenfügen und in der Tabelle speichern.

Beispiel: ░
░░:░░:░░:░░

Nun, ich habe mittlerweile 877 Datensätze in der Tabelle. Das würde für mich eine ganze Menge Arbeit bedeuten. Oder ich würd nochmal von vorn anfangen…

Wenn ich das richtig verstanden habe, sollte ich vier Spalten erstellen, eine für die Galaxie, die Region, das System und die letzte für die Position… ?! Was ist da genau der Vorteil?

Bei der Position, die kann ja nur ganz bestimmte Werte annehmen, 10-13,20-23, … , 50-53. Wie kann ich das festlegen? Nicht, dass dort 67 o.ä. eingegeben wird.

So hättest du auch die Möglichkeit ein Pulldownfeld für den
Server zu nutzen.

Das habe ich doch auch so. Bei meinem letzten Beitrag (oben) ist ein Bild vom aktuellen Formular zu sehen. Da hab ich schon ein Kombi für den Server eingebaut.

Liebe Grüße,
Rogge

Hallo Rogge,

Nun, ich habe mittlerweile 877 Datensätze in der Tabelle. Das
würde für mich eine ganze Menge Arbeit bedeuten. Oder ich würd
nochmal von vorn anfangen…

?? warum denn das ??
Erweitere deine Tabelle um die benötigten Felder:

Server
Galaxie
Region
System
Position

dann erstellst du eine Aktualisierungsabfrage:

Spalte Server: mid([PKEY,1,1)
Spalte Galaxie: mid([PKEY,2,2)
Spalte Region: mid([PKEY,4,2)
Spalte System: mid([PKEY,6,2)
Spalte Position: mid([PKEY,8,2)

und schon hast du die gewünschten Daten in extra Felder.
Aufwand ca. 5 Minuten :smile:

Wenn ich das richtig verstanden habe, sollte ich vier Spalten
erstellen, eine für die Galaxie, die Region, das System und
die letzte für die Position… ?! Was ist da genau der
Vorteil?

genau, du bist flexibel und kannst die einzelnen Daten besser verwalten/auswerten.

Bei der Position, die kann ja nur ganz bestimmte Werte
annehmen, 10-13,20-23, … , 50-53. Wie kann ich das
festlegen? Nicht, dass dort 67 o.ä. eingegeben wird.

eben, in einem extra Eingabefeld könntest du per VBA die Eingabe überprüfen. Ich würde dann dafür SELECT CASE verwenden.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

Erweitere deine Tabelle um die benötigten Felder:

Server
Galaxie
Region
System
Position

Die Spalte Server habe ich ja schon erstellt. Das kann auch ganz normal wieder ‚Text‘ sein.

Jetzt wird’s wieder bissl knifflig. Die Spalte „Location“ ist vom Typ ‚Text‘. Wenn ich die vier neuen Spalten erstelle, kann ich die eigentlich vom Typ Zahl machen. Geht ja meist von 00 bis 99.

Dann muss der Text aus ‚Location‘ jedoch konvertiert werden. Und ich muss die Zahlen in den Spalten so formatieren, dass auch immer 2 Ziffern angezeicht werden, also statt „9“ die „09“.

Wie gehe ich da vor, um die beiden Ziele zu erfüllen?

Grüße,
Rogge

Hallo Rogge,

Dann muss der Text aus ‚Location‘ jedoch konvertiert werden.
Und ich muss die Zahlen in den Spalten so formatieren, dass
auch immer 2 Ziffern angezeicht werden, also statt „9“ die
„09“.
Wie gehe ich da vor, um die beiden Ziele zu erfüllen?

eins geht nur! es gibt keine führenden Nullen bei Zahlen!

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

dann erstellst du eine Aktualisierungsabfrage:

Spalte Server: mid([PKEY,1,1)
Spalte Galaxie: mid([PKEY,2,2)
Spalte Region: mid([PKEY,4,2)
Spalte System: mid([PKEY,6,2)
Spalte Position: mid([PKEY,8,2)

Danke, das habe ich schon fast alles durch. Die Syntax dazu lautet in Access 2k allerdings Teil(Text;x;y). Es funktioniert jedoch nicht bei mir…

In der Spalte „Location“ ist die gesamte Koordinate gespeichert. Bis auf den Server, den habe ich bereits manuell zugefügt.

In der Aktualisierungsabfrage habe ich die die Spalte „Galaxy“ ausgewählt und trage bei ‚Aktualisieren‘ dies hier, Teil(Location;1;2), ein. Die Ansicht zeigt mir dann jedoch nur leere Zellen an. Ich hab auch schon einige Klammern probiert… Teil([Location];1;2), Teil([Me].[Location];1;2) bringen alle nichts. Weißt du, was da schief läuft?

MfG,
Rogge