Autor Beitrag
Bronstein
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: So 19.11.06 17:37 
Ich kopiere eine Access Tabelle.
ausblenden Delphi-Quelltext
1:
2:
Form1.ADOCommand1.CommandText := 'SELECT * INTO tblKopie FROM tblOrginal';
Form1.ADOCommand1.Execute;


Das funktioniert. Er übernimmt alles korrekt (DatenTyp, Spalten, Daten).
Jetzt möchte ich einen Eintrag ändern dazu mache ich folgendes.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Form1.AdoQuery1.Active := false;
Form1.AdoQuery1.SQL.Clear;
Form1.AdoQuery1.SQL.Add('Select * From tblKopie Where Name = ' + QuotedStr(Form1.ComboBox5.Text));
Form1.AdoQuery1.Active := true;
Form1.ADOQuery1.Edit;
Form1.ADOQuery1.FieldByName('Anzahl').AsInteger := 5;
Form1.ADOQuery1.Post;


Jetzt bekomme ich beim Befehl Post "Abfrage ist zu komplex".

Was kann ich da machen?

P.S.: Wenn ich die Tabelle manuell in Access kopiere, funktioniert das ändern.

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 19.11.06 19:33 
für was brauchst du das feld "anzahl"?
Bronstein Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: So 19.11.06 21:09 
Das ist halt ein Feld der Tabelle das ich ändern möchte. Es könnte genausogut auch Name oder Ort heißen.

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 19.11.06 21:50 
warum willst du es an dieser stelle ändern? hier hast du doch gar nix zu ändern...

wenn du was ändern willst, in der datenbank, dann geht das mit "update deinetabelle set feld = NeuerWert where feld1 = ..."
JVS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Do 12.11.09 19:09 
Hallo,
ich belebe diesen Thread noch mal, denn ich bin auf das gleiche Problem gestoßen.
Die Ursache für den Fehler liegt darin, daß das SQL-Statement zwar die Feldstruktur
der Tabelle korrekt erzeugt und die Daten kopiert, allerdings gehen die Indexinformationen
verloren. Kopiert man die Tabelle innerhalb von ACCESS, werden auch die Indexe mitkopiert.

Die Frage ist also:
wie kopiere ich mittels SQL eine Tabelle incl. ihrer Indexdefinitionen?

JVS
Heraldo
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Sa 05.03.11 19:57 
Hallo.
Ich bin auch gerade über diesen Fehler gestolpert und hatte eine Lösung gesucht. Dann fiel es mir aber wieder ein:
Bei ADO/Access werden beim Post alle Datenfelder verglichen. Die interne SQL-Anweisung muss man sich wie folgt vorstellen
"UPDATE ... WHERE FELD1=Wert2 and FELD2=Wert2...". Erlaubt sind bei Jet 3.51 40 Felder, bei Jet 4.0 99 Felder. Siehe auch support.microsoft.com/kb/192716/
Im Delphi kann man 'Update Criteria' überschreiben, um nur PrimaryKey zu vergleichen. Allerdings nur temporär. Deshalb zum Beispiel in Dataset.BeforePost:

uses AdoInt;
procedure TMyDataModule.BeforePostSetUpdateCriteria(DataSet: TDataSet);
begin
TADODataSet(DataSet).Properties['Update Criteria'].Value := adCriteriaKey;
end;

Gruß, Harald
--
omdn.officemanager.de/