eigenen Primärschlüssel definieren

04/12/2007 - 19:22 von Fabian Tillmann | Report spam
Hallo,

ich möchte gerne den Primàrschlüssel selbst vorgeben können.
Ich habe Maschinennummern, die fortlaufend immer mehr werden(mehr
produzierte Maschinen)

Die Maschine nennt sich z.B. 8010, die Produktionsnummer ist 962

also ergibt sich die Maschinennummer 8010962.

Weitere Geràte in dem Betrieb sind 8020, 8030, etc.

Nun bràuchte ich die Funktion, dass ich vorgeben kann z.B. Beginn mit
8010961 und dass er dann weiterzàhlt, jedoch nur die letzten 3 Ziffern und
dann wieder bei Null anfàngt, sodass die Nummer der Maschine erhalten bleibt
und die Produktionsnnummer immer wieder von neuem anfàngt.

Das nàchste Problem ist, dass mehrere Maschinen (8010, 8020, 8030) in einer
Tabelle sind, also müsste access automatisch erkennen durch vorherige
eingabe der Nummer(8010) welche Maschine das ist und danach die automatische
Maschinennummer erstellen

Ist das möglich?

Ist es ein Problem, wenn es dann spàter wohlmöglich 2 Geràte mit der
gleichen Maschinennummer gibt? Ich kann das auseinanderhalten, durch die
angegebene Jahreszahl in einer anderen Spalte, da nie mehr als 1000 geràte
pro Jahr produziert werden.

habe leider noch nicht soviel ahnung von Acess.. aber ihr könnt mir
sicherlich helfen.


mfg
 

Lesen sie die antworten

#1 Lorenz Hölscher
04/12/2007 - 20:05 | Warnen spam
Hallo Fabian,

On 4 Dez., 19:22, "Fabian Tillmann" wrote:
ich möchte gerne den Primàrschlüssel selbst vorgeben können.


Soweit kein Problem, wenn Du in dem gewünschten Feld (in der
Entwurfsansicht) stehst, klickst Du oben auf das Schlüsselsymbol, das
erscheint dann auch links vor der Zeile. Das wàre dann der
Primàrschlüssel. Aber das Feld müssen wir im folgenden noch mal
diskutieren, denn da könntest Du Dir einige Probleme aufhalsen, so wie
es sich derzeit anhört.


Ich habe Maschinennummern, die fortlaufend immer mehr werden(mehr
produzierte Maschinen)
Die Maschine nennt sich z.B. 8010, die Produktionsnummer ist 962
also ergibt sich die Maschinennummer 8010962.



Also ist die Maschinennummer ein Feld mit vorgegebenem Inhalt, keine
Automatik à la AutoWert. Nach derzeitigem Wissensstand wàre es vom
Datentyp Zahl/Integer.
Für die Produktionsnummer gilt übrigens genau dasselbe: der Stempel(?)
auf Deiner Maschine gibt eine Zahl vor, die Du eintragen darfst. Also
auch hier keine Automatik.


Weitere Geràte in dem Betrieb sind 8020, 8030, etc.


Das ist ungefàhrlich, denn die Nummern stehen in einem eigenen Feld.

Nun bràuchte ich die Funktion, dass ich vorgeben kann z.B. Beginn mit
8010961 und dass er dann weiterzàhlt, jedoch nur die letzten 3 Ziffern und
dann wieder bei Null anfàngt, sodass die Nummer der Maschine erhalten bleibt
und die Produktionsnnummer immer wieder von neuem anfàngt.


Ooops, da wird es heikel. Was ist, wenn wegen eines Produktionsfehlers
mal eine Maschine fehlt? Soll eine "Automatik" dann trotzdem die
nàchste Nummer nehmen?
Nach dem, was Du oben beschrieben hast, ist die Produktionsnummer eine
Zahl, welche die Datenbank nicht selbst erfinden darf, sondern die von
einer vorhandenen Maschine vorgegeben wird.
Damit kommen wir zu Deinem nàchsten Wunsch, nàmlich offenbar eine
"Halbautomatik"


Das nàchste Problem ist, dass mehrere Maschinen (8010, 8020, 8030) in einer
Tabelle sind, also müsste access automatisch erkennen durch vorherige
eingabe der Nummer(8010) welche Maschine das ist und danach die automatische
Maschinennummer erstellen


Das geht grundsàtzlich, wenn wir uns hier auf so etwas wie einen Klick
durch den Benutzer einigen, der damit anfordert, die nàchste passende
Nummer zu erstellen. Damit bist Du zwangslàufig in einem Formular, was
ja an sich nicht schlimm ist, weil Tabellen keine Ereignisse auslösen
oder Schaltflàchen haben können.
- In diesem Formular nimmst Du also eine Befehlsschaltflàche aus der
ToolBox und
- benennst Sie etwa als "btnNeueNummer" (siehe
http://www.cls-software.de/cls_soft...ccess.aspx
"Namenskonventionen").
- In deren "Beim Klicken"-Ereignis gehst Du auf die Schaltflàche mit
den drei Pünktchen und
- wàhlst "Code-Generator", damit bist Du in der VBA-Programmierung.
Jetzt kommt der Code, damit VBA die höchste bisherige
Produktionsnummer zu dieser Maschinennummer findet und 1 draufzàhlt:

_______________________
Private Sub btnNeueNummer_Click()
Dim varLetzteNr As Variant

If Me.MaschNr.Value & "" = "" Then 'also fehlt die noch!
Me.MaschNr.SetFocus
MsgBox "Bitte erst Maschinennummer eingeben!", vbCritical
Exit Sub
End If

varLetzteNr = DMax("ProdNr", "meineTabelle", "[MaschNr] = " &
Me.MaschNr.Value)
If IsNull(varLetzteNr) Then 'es gab also noch keinen Eintrag für
diese Maschine
Me.ProdNr.Value = 1
Else
Me.ProdNr.Value = varLetzteNr + 1
End If
End Sub
_______________________

(Der Code ist ungetestet, sag Bescheid, wenn es nicht klappt)

Dabei gehe ich davon aus, daß die beiden Felder "MaschNr" und "ProdNr"
heißen und in der Tabelle "meineTabelle" stehen, das mußt Du anpassen.

Ist das möglich?


Ja. Siehe oben.


Ist es ein Problem, wenn es dann spàter wohlmöglich 2 Geràte mit der
gleichen Maschinennummer gibt? Ich kann das auseinanderhalten, durch die
angegebene Jahreszahl in einer anderen Spalte, da nie mehr als 1000 geràte
pro Jahr produziert werden.


JAAAAAA, das ist ein Problem!!!! Tu Dir das nicht an! Bei einer
Datenbank gibt es nur ganz oder gar nicht. Wenn zwei Eintràge die
gleiche Nummer haben, sind sie identisch! Verlass Dich nicht auf Dein
"Weltwissen", daß es wegen einer anderen Jahreszahl nicht die gleiche
Maschine ist. In diesem Fall muß der Primàrschlüssel über alle drei
Felder gehen (dafür gibt es oben MehrfelderIndex, siehe dazu
http://www.cls-software.de/cls_soft...ellen.aspx
"Duplikate in mehreren Feldern verhindern", dort muß dann auch
"Primàrschlüssel" ausgewàhlt sein!).

habe leider noch nicht soviel ahnung von Acess.. aber ihr könnt mir
sicherlich helfen.



tschö,
Lorenz

http://www.cls-software.de/cls_soft...ccess.aspx
(dort stehen auch Hinweise zu solchem Tabellendesign)

Ähnliche fragen