MichaK Geschrieben 12. Mai 2003 Teilen Geschrieben 12. Mai 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 12. Mai 2003 Teilen Geschrieben 12. Mai 2003 Hallo, geht auf die Tabelle und öffne die im Entwurfsmodus. In der Spalte mit den Feldnamen wo ein kleiner Schlüssel vor ist, dass ist der Primärschlüssel. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MichaK Geschrieben 12. Mai 2003 Autor Teilen Geschrieben 12. Mai 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FMG Geschrieben 12. Mai 2003 Teilen Geschrieben 12. Mai 2003 Dann lass dir den Primärschlüssel doch einfach via SELECT-Anweisung raussuchen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MichaK Geschrieben 12. Mai 2003 Autor Teilen Geschrieben 12. Mai 2003 Super ...... Wie soll ich den den Datensatz finden wenn ich den Schlüssel nicht kenne? Alle anderen Felder lassen dublikate zu! MfG Michael Klaus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peregrin Geschrieben 12. Mai 2003 Teilen Geschrieben 12. Mai 2003 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 12. Mai 2003 Teilen Geschrieben 12. Mai 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Wolle Geschrieben 12. Mai 2003 Teilen Geschrieben 12. Mai 2003 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
IT-FT Geschrieben 13. Mai 2003 Teilen Geschrieben 13. Mai 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MichaK Geschrieben 14. Mai 2003 Autor Teilen Geschrieben 14. Mai 2003 Der Tipp ist zwar nicht schlecht aber was hat er mit der Problemstellung zu tun? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AxlHammer Geschrieben 14. Mai 2003 Teilen Geschrieben 14. Mai 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MichaK Geschrieben 14. Mai 2003 Autor Teilen Geschrieben 14. Mai 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peregrin Geschrieben 14. Mai 2003 Teilen Geschrieben 14. Mai 2003 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MichaK Geschrieben 14. Mai 2003 Autor Teilen Geschrieben 14. Mai 2003 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peregrin Geschrieben 14. Mai 2003 Teilen Geschrieben 14. Mai 2003 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 14. Mai 2003 Teilen Geschrieben 14. Mai 2003 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.