Guten Morgen Avax2k,
du solltest einen Schritt nach dem anderen machen. Bevor du das Kopieren mit Delphi umsetzt kannst du dich in
ACCESS mit dem notwendigen
SQL-Statement interaktiv vertraut machen. Da ich deine Datenbank und die betroffenen Tabellen nicht kenne, habe ich dir ein allgemein gehaltenes Statement hingeschrieben. Dieses Statement geht davon aus, dass deine beiden Tabellen exakt gleich strukturiert sind und dass es keine AutoInc-Spalte gibt.
Wenn du dich mit dem INSERT-INTO-SELECT Statement anhand deiner Dokumentation vertraut gemacht hast, dann weißt du, dass du an Stelle des Sterns auch eine Spaltenliste einsetzen kannst. In deinem Fall musst du das tun, weil die Zieltabelle eine AutoInc-Spalte besitzt:
INSERT INTO target(col2, col3, col4) SELECT col2, col3, col4 FROM source WHERE id = 42
Die Spalten müssen sich von Bedeutung und Typ her entsprechen, die Namen müssen nicht in beiden Tabellen gleich sein.
Sobald du nach dem Einsetzen der korrekten Spalten- und Tabellenamen mit obigem Statement in
ACCESS erfolgreich warst, übernimmst du das Statement nach Delphi. Bei der Zuweisung an ADOQuery.SQL.Text ersetzt du dann die feste Schlüsselnummer 42 durch die Parameter-Variable :id - der Name ist egal, der Doppelpunkt davor ist notwendig. Beim Setzen von
SQL.Text untersucht Delphi das Statement nach solchen Parametern und stellt sie automatisch in der Eigenschaft ADOQuery.Parameters zur Verfügung, wenn ADOQuery.ParamCheck = TRUE ist (Standard). Nachdem du dann den Parameter 'id' (diesmal ohne Doppelpunkt) mit dem gewünschten Schlüsselwert initialisiert hast, kannst du das Statement ausführen.
Die von dir berichteten Fehler passen irgendwie nicht zu der von dir beschriebenen Vorgehensweise. Kann es sein, dass du beides vertauscht hast? Wenn der Parameter 'id' nicht bekannt ist, dann hast du den Doppelpunkt im
SQL-Statement vergessen oder ParamCheck ist bei dir FALSE.
Jetzt tief Luft holen und systematisch vorgehen...
Freundliche Grüße vom marabu