AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Prism ADO.NET Update auf MS Access DB
Thema durchsuchen
Ansicht
Themen-Optionen

ADO.NET Update auf MS Access DB

Ein Thema von sakura · begonnen am 10. Jun 2005 · letzter Beitrag vom 10. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#1

ADO.NET Update auf MS Access DB

  Alt 10. Jun 2005, 09:23
Datenbank: MS Access • Version: 2002 • Zugriff über: ADO.NET OleDB
Hi,

irgendwie scheitere ich gerade an den einfachsten Dingen der Welt

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:
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;
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.
Delphi-Quellcode:
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;
FConnection ist eine gültige und aktive Verbindung (OleDbConnection) zu MS Access DB.

......

P.S.: Artikel ist ein Felb vom Typ Text mit einer Größe von 50 Zeichen.
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.608 Beiträge
 
#2

Re: ADO.NET Update auf MS Access DB

  Alt 10. Jun 2005, 09:36
Probiers mal mit:
Delphi-Quellcode:
Ad.UpdateCommand := OleDbCommand.Create('UPDATE Auftragsdetails SET Artikel = "?" WHERE ID = ?', FConnection);
// bzw.
Ad.UpdateCommand.Parameters.Add('Artikel', '"neu"');
Wobei das eigentlich nicht stören dürfte. Ab und zu verschluckt sich JET an sowas aber mal.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: ADO.NET Update auf MS Access DB

  Alt 10. Jun 2005, 09:42
Zitat von Phoenix:
Wobei das eigentlich nicht stören dürfte. Ab und zu verschluckt sich JET an sowas aber mal.
Nope, das macht leider keinen Unterschied.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: ADO.NET Update auf MS Access DB

  Alt 10. Jun 2005, 10:21
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;
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: ADO.NET Update auf MS Access DB

  Alt 10. Jun 2005, 11:00
Okay, das geht. Danke.

Nun aber noch die Frage, warum es nicht so geht, das war mein ursprünglicher Ansatz
Delphi-Quellcode:
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;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
nieurig

Registriert seit: 26. Apr 2004
113 Beiträge
 
Delphi 6 Professional
 
#6

Re: ADO.NET Update auf MS Access DB

  Alt 10. Jun 2005, 11:27
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:
Ad.UpdateCommand.Parameters.Add('ID', TObject(1));
Hier dürfte ID das Problem sein...

Niels
Erspare Dir die Gedanken über ungelegte Eier !!!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: ADO.NET Update auf MS Access DB

  Alt 10. Jun 2005, 13:20
Zitat von nieurig:
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.
Doch die ID geht ohne Probleme, siehe erster Test. Wie dem auch sei, selbst wenn ich es wie folgend schreibe, geht es nicht, obwohl es doch eigentlich das Gleiche sein sollte
Delphi-Quellcode:
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;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: ADO.NET Update auf MS Access DB

  Alt 10. Jun 2005, 13:46
Was willst du denn da ständig mit dem DataAdapter?
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
... 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...
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: ADO.NET Update auf MS Access DB

  Alt 10. Jun 2005, 14:40
Zitat von Robert_G:
Was willst du denn da ständig mit dem DataAdapter?
Okay, dann mal ohne. Es geht ja auch nicht um den, sondern um die Erstellung/Belegung der Parameter. Warum geht das nicht wie folgend?
Delphi-Quellcode:
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;
Ich hätte gedacht, dass das vom Sinn her gleich wäre.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#10

Re: ADO.NET Update auf MS Access DB

  Alt 10. Jun 2005, 14:55
Zitat von sakura:
Ich hätte gedacht, dass das vom Sinn her gleich wäre.
Der OleDb Provider ist zusammen mit dem ODBC sozusagen das Provider Museum in .Net.
Sei dankbar, dass es über die Interfaces geht. Alles weitere würde eine brauchbare DB mit einem brauchbaren Provider erfordern.

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz