PDA

Vollständige Version anzeigen : Access-Einstreiger Farage zu Autowert...


hefner
30.09.2005, 11:33
Moinsen ,

ich habe die Blöde aufgabe bekommen , einen Teil einer bestehenden DB zu erweitern.

Die Tabelle hat nur 2 Spalten : Kdnr und ID, beides als Primärschlüssel.
Kdnr kommt vom dem Rstz der DB.
ID soll per AutoWert erhöht werden.

Allles ja eigentlich kein Problem ....aber ....

ID soll bei jeder neuen Kdnr mit 1 beginnen ...also:

Kdnr | ID
---------
1 | 1
1 | 2
2 | 1
2 | 2
2 | 3

u.s.w. ist das ohne Probleme möglich oder muss ich da sowas wie ein Macro / Script basteln ?

Freue mich auf eine Antwort :-)

MfG Hefner

superurmel
30.09.2005, 11:51
Hallo hefner,

ein Autowert ist ja dazu da, dass bei jedem neuen DS dieser Wert erhöht wird gegenüber dem letzten Wert. Was für einen Sinn soll denn dann diese ID in der Tabelle haben?

hefner
30.09.2005, 12:00
Es wird durch die Zusammenlegung von Kdnr + ID ein Wert erzeugt , der auf einen Barcode gedruckt wird. (z.b. 1-2 oder 2-1). Daurch soll ein relativ einzigartige ID erstellt werden , auf dem schon mit blossen Auge der Kdnr zuzuordnen ist.
An diesem Format kann ich leider nichts drehen, da das so vorgegeben ist.

Es währe halt wichtig wenn man "nur" immer einen Datensatz einfügen brauch und Access das automatich hochzählt....

superurmel
30.09.2005, 12:08
Aber woher kommt die ID?

Taucht diese in der Tabelle zum ersten Mal auf oder ist diese ID gleichzeitig Fremdschlüssel, also Primärschlüssel einer anderen Relation?

Gruß
superurmel

superurmel
30.09.2005, 12:16
Problem ist noch folgendes:

Autowerte werden wieder geändert wenn du die DB "komprimierst und reparierst". Du kannst mit dem Access eigenen Autowert diese Problem nicht lösen (Bitte um Korrektur wenn, dass anders sein sollte :p )

Muß die ID denn vom Typ Autowert sein? Im Prinzip ist das ja ein Long Integer Feld. Wenn du ID vom Typ Long Integer wählst könntest du diesen Wert in Abhängigkeit von der Kundennummer steuern.

superurmel
30.09.2005, 12:26
Hier übergibst du eine Kundennummer die du ergänzen willst. Holst dir den höchsten vorhandenen ID Wert und erhöhst diesen am Schluß um 1.


Function BarcodeID(Kdn As Long) As Long
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim max As Long

Set db = CurrentDb()
Set rs = db.OpenRecordset("SELECT * FROM Tabelle1 WHERE [Kdnr]=" & Kdn)

max = 0

Do Until rs.EOF
If max < rs(1).Value Then
max = rs(1).Value
rs.MoveNext
End If
Loop

BarcodeID = max + 1

End Function

hefner
30.09.2005, 12:26
Die ID wird erst beim erstellen der Datensätze erzeugt. Die Existenz der Datensätze sollen die "Echtheit" der daraus entstandenen Barcodes beweisen (was so aber wohl net aus reicht , das ist abe dann ne andere Geschichte)

Hmm muss ich mich wohl am WE etwas mit VB ausseinandersetzen und Das irgendwie als script ins Formular einbauen....

superurmel
30.09.2005, 12:29
Hey das ist Lustig mit Barcodes habe ich auch zu tun.

Habe gerade meine eigene Import Routine für eingescannte Barcodes (in Textdatei) geschrieben. :p

hefner
30.09.2005, 12:49
Danke für deine hilfe :-)

ne frage zum Code :
bei
"BarcodeID = max + 1"

ist BarcodeID ist der Funktionsname, der in VB wohl gleichzeitig auch eine Variable sein kann oder ? ist also sowas wie ein "return" .....

superurmel
30.09.2005, 12:57
Es gibt Funktionen und Sub. Beide werden auch Prozeduren genannt.
Funktionen haben dabei i.d.R. einen Rückgabewert. Also die Funktion BarcodeID hat den Rückgabetyp Long Integer. Und denn Wert habe
ich am Schluß der Funktion zugewiesen. Ja so was wie Return.