Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Ich habe ein Problem beim erstellen eines Datensatzes in MS Access.

Ich füge über "insert into" einen neuen Datensatz in eine Tabelle ein. Soweit ist alles in Ordnung.

Wie finde ich nun den Primärschlüssel dieses Datensatzes heraus? Den Primärschlüssel habe ich nicht selbst gesetzt da es ein "autowert" ist der von MS Access selbst eingefügt wird.

MfG

Michael Klaus

Geschrieben

Ok danke aber ich wollte eigentlich nicht jedesmal die Tabelle öffnen.

Ich möchte den Primärschlüssel, wenn das möglich ist, als Rückmeldung bekommen.

Weil dieser Schlüssel dann in eine Andere Tabelle reingeschrieben werden muss.

Die "insert" Anweisung kommt aus einem VB Programm. ich brauche diesen Primärschlüssel um danach z.B. eine Update Anweisung zu senden.

MfG

Michael Klaus

Geschrieben

Super ......

Wie soll ich den den Datensatz finden wenn ich den Schlüssel nicht kenne?

Alle anderen Felder lassen dublikate zu!

MfG

Michael Klaus

Geschrieben

hi,

kann es denn sein, dass du zwei datensätze hast, die komplett identisch sind bis auf den pk? (das klingt fuer mich nach einem design-fehler...)

wenn nicht, hast du doch die restlichen attribute des eingefügten datensatzes und kannst dir den pk zu diesem zurückgeben lassen.

alternativ (nur wenn transaktionssicherheit gewaehrleistet ist) kannst du dir den maximal-wert der pk-spalte ausgeben lassen. dies ist der zuletzt eingefügt datensatz...

hoffe, es hilft...

Geschrieben

Hi,

da bleibt imho nur der Umweg über eine Transaction und select max(id).

Ist halt ne Desktopdatenbank die für sowas nicht besonders taugt.

Gruß Jaraz

Geschrieben
Original geschrieben von Jaraz

da bleibt imho nur der Umweg über eine Transaction und select max(id).

Oder etwas kürzer:

Variable=dmax("ID","Tabelle")

Allerdings solltest du sicherstellen, das in der Zwischenzeit keine neuen Datensätze dazu kommen.

Geschrieben

Sprache / Programm: Access ab Version 95

Beschreibung

Prüft, ob die angegebene Tabelle einen Index mit diesem Namen hat.

VBA-Quelltext

Public Function IndexExistiert(TabName As String, IndexName As String) As Boolean

Dim IndexNr As Byte

' Enthält die Tabelle überhaupt Index-Felder ?

IndexExistiert = CurrentDb.TableDefs(TabName).Indexes.Count > 0

If Not IndexExistiert Then Exit Function

' Alle Namen aller Indizes vergleichen

For IndexNr = 0 To CurrentDb.TableDefs(TabName).Indexes.Count - 1

If (CurrentDb.TableDefs(TabName).Indexes(IndexNr).Name = IndexName) Then Exit Function

Next IndexNr

IndexExistiert = False

End Function

Argumente der Funktion/Prozedur

TabName

Name der Access-Tabelle

IndexName

Name des Indexes. Dieser Name in der Entwurfsansicht einer Tabelle im Menü 'Ansicht' Menüpunkt 'Indizes' in der Spalte 'Indexname' nachgesehen werden.

Verwendete Variable

IndexNr. Zähler (Laufende Nummer des Indexes)

Rückgabewert

Wahrheitswert, ob der angegebene Index in der Tabelle existiert.

Hinweis

Die Funktion 'SpalteHatIndex' liefert zu einem Tabellen- und Spaltennamen den Indexnamen.

Anwendungsgebiete, Fehler und Warnungen

Die Existenz der Tabelle und der Spalte wird nicht überprüft, so dass ein Fehler auftritt, wenn die Spalte nicht vorhanden ist. Verwendet die DAO Objektbibliothek. Ab Access 2000 muss diese explizit im VBA-Editor über 'Extras' -> 'Verweise' als 'Microsoft DAO 3.6' (oder höher) eingebunden werden und vor die 'Microsoft ADO 2.1' (oder höher) Bibliothek gesetzt werden.

gefunden auf arstechnica.de

Geschrieben

Also um das jetzt nochmal ganz klar zu kriegen:

Du willst also den Namen der Spalte, die als Primary-Key definiert ist, oder?

Wenn ja, was ist mit zusammengesetzten Schlüsseln?

Gruß, Axl

Geschrieben

1. vereinfachte Tabelle "Test"

Felder:

- Test_ID => Primary Key/ Autowert

- Vorname => Text

- Nachname => Text

2. Ich füge mit "insert into Test (Vorname, Nachname) values ('Micha', 'K')" einen neuen Datensatz über ein VB Programm hinzu.

Um diesen neuen Datensatz weiterverarbeiten zu können brauche ich nun den Wert des Feldes "Test_ID".

Wie finde ich diesen heraus?

MfG

MichaK

Geschrieben

hi,

entweder mittels

"select test_id from test where vorname = 'Micha' and nachname = 'K'"
oder mittels
"select max(test_id) from test"

wobei bei der zweiten möglichkeit sichergestellt sein muss, dass nicht in der zwischenzeit ein anderer datensatz eingefügt wurde...

hoffe, es hilft...

Geschrieben

Beide Möglichkeiten führen mich nicht zum Ziel da

1. mehrere MichaK's in der Tabelle sein können

2. ein anderer Benutzer kurz nach mir einen Datensatz eingefügt haben kann

gibts noch ne andere Lösung?

Geschrieben

hi,

aus der access-hilfe durch suchen nach transaktion:

Wenn die Eigenschaft UseTransaction einer Tabellenerstellungsabfrage, Löschabfrage, Anfügeabfrage oder Aktualisierungsabfrage auf Ja eingestellt ist, speichert die Microsoft Jet-Datenbank-Engine die zurückgegebenen Datensätze in einem Cache-Speicher und, sofern erforderlich, die Ergebnisse auf der Festplatte in einer temporären Datenbank. Sobald die Abfrage beendet wurde, liest die Jet-Datenbank-Engine die Datensätze aus der temporären Datenbank und schreibt sie zurück in die ursprüngliche Datenbank.

damit kannst du sicherstellen, dass niemand in die angelegte temporäre tabelle einen datensatz einträgt, und du definitiv den von dir zuletzt eingefügten datensat mit "select max(id)" bekommst...

transaktionen manuell starten (ebenfalls aus der access-hilfe):

Syntax

Einleiten einer neuen Transaktion.

BEGIN TRANSACTION

Abschließen einer Transaktion durch Übernehmen aller Aktionen, die während der Transaktion durchgeführt wurden.

COMMIT [TRANSACTION | WORK]

Abschließen einer Transaktion durch Zurücksetzen (Rollback) aller Aktionen, die während der Transaktion durchgeführt wurden.

ROLLBACK [TRANSACTION | WORK]

sollte das gewünschte ergebnis bringen...

Geschrieben
Original geschrieben von MichaK

gibts noch ne andere Lösung?

Liesst du auch alle Beiträge?

Das Wort Transaktion kam schon min. 2 mal vor.

Da ich mit Access nichts am Hut habe, würde ich sagen schaue einfach mal in die Hilfe von Access, wie du eine Transaction realisierst.

Gruß Jaraz

Nachtrag: Mist zu spät. ;)

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...