Access 2000 Datensatz Duplizieren

Hast du noch andere Eindeutige Indexe?

Zudem ist in deinem folgenden Code die Variable ID nicht definiert
Visual Basic:
    Set ds = db.OpenRecordset("SELECT * FROM 1Proben " & _
                              "WHERE ID = " & ID)

Am besten machst du mal ein Printscreen deiner Tabelle in der Entwurfsansicht und einer des Index-Fensters.
Oder du exportierst das Resultat des Access-Dokumentireres (nur für diese Tabelle!) in ein Textfile und postest dieses.
Das sieht dann etwa so aus wie im Anhang

Nachtrag:
Bei einer Tabelle mit Autowert in der ID und keinem weiteren Unique Index geht bei mir das folgende kleine Query
SQL:
INSERT INTO bewertung ( PersNr, von, bis )
SELECT PersNr, von, bis
FROM bewertung
WHERE ID=4;
 

Anhänge

Zuletzt bearbeitet von einem Moderator:
Moin DERHAARKAMM,

Abgesehen von der in der Luft hängenden Variablen "ID", auf die yaslaw bereits hingewiesen hat,
ist auch die halbherzig begonnene Max(vorhandenerAutowert)-Ermittlung nie so richtig aus dem Ei gekommen.

Der dafür vermutlich vorgesehene ResultSet "ds2" hätte eigentlich auch "Soda" heißen können, denn genauso liegt er rum.

Das Hochzählen der "neueProbenID" machst du wiederum nicht etwa auf der MaxVorhandenenId, sondern im wahrsten Sinne des Wortes auf irgendeiner beliebigen.
Anzunehmenderweise auf der Kleinsten... nicht weiter verwunderlich, wenn dir Access dann einen "3022" zeigt, wenn du die kleinste-Id-plus-eins nochmal einfügen willst.

Wie yaslaw schon vorgeschlagen hat- FASS EINFACH DIE ID GAR NICHT AN.
Ein AddNew() und alle Felder AUSSER dem albernen AutoWert-Feld füllen.

Grüße
Biber
 
Zuletzt bearbeitet:
Danke nochmal für die hilfreichen Tipps! ID ist ein Textfeld aus einem Access Formular und natürlich muss
ich das SQL - Statement mit der Value des Textfeldes machen.

Soweit so gut, jedoch habe ich noch ein Problem beim rst.Update, nämlich dass ich nicht weiß welchen Wert ich
beim rst.update für die ID verwenden soll. Null löst einen Compilerfehler aus und wenn ich die ID nicht befülle steht der Wert des ersten Datensatzes in der Tabelle!

Code:
    Dim db  As DAO.Database
    Dim rst As DAO.Recordset
    Dim ds  As DAO.Recordset
    Dim fld As DAO.Field
    
    ' Verweis auf die aktuelle Db setzen
    Set db = CurrentDb
    'Recordset auf die Tabelle 1Proben
    Set rst = db.OpenRecordset("1Proben")
       
    'Inhalt des aktuellen Datensatzes wird ausgelesen
    Set ds = db.OpenRecordset("SELECT * FROM 1Proben " & _
                              "WHERE ID = " & ID.Value)
    'Neuen Datensatz einfügen
    rst.AddNew
    
    For Each fld In ds.Fields
        If fld.Name <> "ID" Then
            rst(fld.Name) = ds(fld.Name)
        Else
            rst(fld.Name) = Null
        End If
    Next fld
    rst.Update
 
Zuletzt bearbeitet:
Moin DERHAARKAMM,

dass du meine Formulierung "..alle Felder AUSSER dem albernen AutoWert-Feld füllen...", an der ich sehr, sehr lange gefeilt habe,
übersetzt in die Empfehlung "In das Autowert-Feld ID muss ich den Wert NULL reintrümmern, sonst Biber traurig"...

...das stürzt mich in die fünfte (oder schon sechste?) mitteltiefe Glaubenskrise.
Ich glaub es nicht.

Ich geh mal in mich...
@yaslaw
Kannst du vielleicht versuchen, es verständlicher zu formulieren? Danke

Grüße
Biber
 
Biber2. Nun gut, mein letzter Versuch, denn es kann unmöglich mein Problem sein.

@DERHAARKAMM
Ich glaube nicht das hinter dem Feld ID ein Autowert steht. Ansonsten würde es funktionieren das ID-Feld zu ignorieren. Habs selber getestet. Und zwar mit deinem Code.

Visual Basic:
    For Each fld In ds.Fields
        If fld.Name <> "ID" Then
            rst(fld.Name) = ds(fld.Name)
        End If
    Next fld
    rst.Update
 
Moin,

hab diesen Thread mal eben überflogen.
Ihr habt ja 'ne geile Art zu schreiben *g*

Ok, Kinners
bei mir taucht das selbe Prob auf.
@yaslaw: funktioniert deine Lösung mit dem (im letzten Post vorgestellten) Code?
Ansonsten sind bei mir die gleichen Fehler aufgelaufen, ich habe alle Indizies entfernt.

Eigentlich sollte es funktionieren.
Meine Situation: ich habe ein Form, in dem werden Datensätze angelegt.
Habe ich einen angelegt, soll der kopiert werden.

Ich habe in anderen Foren zu diesem Problem häufig die Frage nach dem Sinn gelesen:

'Zitat an'
Hintergrund: auf ein und dem selben Schiff kommen 10 CNTR für den gleichen Kunden rein.
Damit nicht 10mal der Schiffsname oder die CNTR-Nr geschrieben werden muss,
soll ein bestehender datenstz kopiert werden.
'Zitat aus'
 
Zurück