![]() |
Datenbank: MS Access • Version: 2002 • Zugriff über: ADO.NET OleDB
ADO.NET Update auf MS Access DB
Hi,
irgendwie scheitere ich gerade an den einfachsten Dingen der Welt :roll: Ersteres Statement wird ohne Probleme ausgeführt. Hierbei ist der neue Wert des Feldes Artikel fest codiert in die SQL-Query eingefügt.
Delphi-Quellcode:
Möchte ich diesen nun parametrisieren und später setzen, wie im folgenden Beispiel, dann wird die Query ohne Fehlermeldungen ausgeführt, allerdings wird der entsprechende Datensatz nicht geändert. :shock:
var
Ad: OleDbDataAdapter; ... Ad := OleDbDataAdapter.Create; Ad.UpdateCommand := OleDbCommand.Create('UPDATE Auftragsdetails SET Artikel = "neu" WHERE ID = ?', FConnection); Ad.UpdateCommand.Parameters.Add('ID', TObject(1)); Ad.UpdateCommand.ExecuteNonQuery;
Delphi-Quellcode:
FConnection ist eine gültige und aktive Verbindung (OleDbConnection) zu MS Access DB.
var
Ad: OleDbDataAdapter; ... Ad := OleDbDataAdapter.Create; Ad.UpdateCommand := OleDbCommand.Create('UPDATE Auftragsdetails SET Artikel = ? WHERE ID = ?', FConnection); Ad.UpdateCommand.Parameters.Add('ID', TObject(1)); Ad.UpdateCommand.Parameters.Add('Artikel', 'neu'); Ad.UpdateCommand.ExecuteNonQuery; ...:cat:... P.S.: Artikel ist ein Felb vom Typ Text mit einer Größe von 50 Zeichen. |
Re: ADO.NET Update auf MS Access DB
Probiers mal mit:
Delphi-Quellcode:
Wobei das eigentlich nicht stören dürfte. Ab und zu verschluckt sich JET an sowas aber mal.
Ad.UpdateCommand := OleDbCommand.Create('UPDATE Auftragsdetails SET Artikel = "?" WHERE ID = ?', FConnection);
// bzw. Ad.UpdateCommand.Parameters.Add('Artikel', '"neu"'); |
Re: ADO.NET Update auf MS Access DB
Zitat:
...:cat:... |
Re: ADO.NET Update auf MS Access DB
OleDB unterstützt doch benannte Parameter.
Dein Statement könnte also theorethisch so aussehen:
Delphi-Quellcode:
procedure TXXX.UpdateArticle(aConnection :IdbConneciton; aArticle :TArticle);
var Command :IDbCommand; Article, ID :IDataParameter; begin Command := aConnection.CreateComamnd(); Command.CommandText := 'UPDATE Auftragsdetails SET Artikel = :Article WHERE ID = :ID'; Article := Command.CreateParameter(); ID := Command.CreateParameter(); Article.ParameterName := 'Article'; Article.Value := aArticle.Name; ID.ParameterName := 'ID'; ID.Value := aArticle.Id; Command.Parameters.Add(Article); Command.Parameters.Add(ID); Command.ExecuteNonQuery(); end; |
Re: ADO.NET Update auf MS Access DB
Okay, das geht. Danke.
Nun aber noch die Frage, warum es nicht so geht, das war mein ursprünglicher Ansatz :?
Delphi-Quellcode:
...:cat:...
var
Ad: OleDbDataAdapter; ... Ad.UpdateCommand := OleDbCommand.Create('UPDATE Auftragsdetails SET Artikel = :Artikel WHERE ID = :ID', FConnection); Ad.UpdateCommand.Parameters.Add('ID', TObject(1)); Ad.UpdateCommand.Parameters.Add('Artikel', txtArtikel.Text); Ad.UpdateCommand.ExecuteNonQuery; |
Re: ADO.NET Update auf MS Access DB
Hallo Sakura,
ich denke, wenn unbenannte Parameter verwendet werden, dann darf man auch keinen Namen angeben. Dann greift man wohl über eine Nummer auf die Parameter zu.
Code:
Hier dürfte ID das Problem sein...
Ad.UpdateCommand.Parameters.Add('ID', TObject(1));
Niels |
Re: ADO.NET Update auf MS Access DB
Zitat:
Delphi-Quellcode:
...:cat:...
var
Ad: OleDbDataAdapter; ... Ad.UpdateCommand := OleDbCommand.Create('UPDATE Auftragsdetails SET Artikel = :Artikel WHERE ID = :ID', FConnection); Ad.UpdateCommand.Parameters.Add('ID', TObject(1)); Ad.UpdateCommand.Parameters.Add('Artikel', txtArtikel.Text); Ad.UpdateCommand.ExecuteNonQuery; |
Re: ADO.NET Update auf MS Access DB
Was willst du denn da ständig mit dem DataAdapter? :gruebel:
Wenn du DataSets nutzen willst, dann lasse dir einfach ein typed DataSet für deine Tabellen erzeugen. Wenn du es richtig machen willst reicht dir doch ein Command. irgendwie verstehe ich gerade nicht ganz, was da in den
Delphi-Quellcode:
vor sich geht.
...
Denn entweder du hast ein DataSet und benutzt DataAdapter.Fill(DeinDataset) oder du hast keine DataSets und kannst daraufhin alle DAs entsorgen... :gruebel: |
Re: ADO.NET Update auf MS Access DB
Zitat:
Delphi-Quellcode:
Ich hätte gedacht, dass das vom Sinn her gleich wäre.
var
Cmd: OleDbCommand; begin Cmd := FConnection.CreateCommand; Cmd.CommandText := 'UPDATE Auftragsdetails SET Artikel = :Artikel WHERE ID = :ID'; Cmd.Parameters.Add('ID', TObject(1)); Cmd.Parameters.Add('Artikel', txtArtikel.Text); Cmd.ExecuteNonQuery; end; ...:cat:... |
Re: ADO.NET Update auf MS Access DB
Zitat:
Sei dankbar, dass es über die Interfaces geht. Alles weitere würde eine brauchbare DB mit einem brauchbaren Provider erfordern. :mrgreen: Ist IMHO sowieso die einzig sinnvolle Art es zu machen. ;) Ändere deine DB zum Bleistift auf FireBird, Oracle,... , werfe oben eine Instanz der passenden Connection rein und es wird laufen. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz