Wie geht das: Commit bei ZMSQL?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
kirchfritz
Beiträge: 72
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 2.0.2 FPC 3.2)
CPU-Target: 32Bit

Wie geht das: Commit bei ZMSQL?

Beitrag von kirchfritz »

zmsql_test.zip
(126.79 KiB) 21-mal heruntergeladen
Hallo,
ich habe mir ein kleines DemoProjekt zusammengestellt, wo ich mit Hilfe der ZMSQL-Komponenten einen Datensatz in einer CSV-Datei ändern möchte.
Das Laden der CSV-Datei klappt.
Der UPDATE-Befehl schlägt aber fehl.
Kann mir jemand auf die Sprünge helfen?
Was muss ich konkret machen, damit der UPDATE-Befehl auch wirklich "updatet" ?

Code: Alles auswählen

unit Unit1;
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, DB, Forms, Controls, Graphics, Dialogs, DBGrids, StdCtrls,
  ZMConnection, ZMQueryDataSet;
type
  { TForm1 }
  TForm1 = class(TForm)
    Button1: TButton;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ZMConnection1: TZMConnection;
    ZMQueryDataSet1: TZMQueryDataSet;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
  public
  end;
var
  Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
  ZMConnection1.DatabasePath := '.\';
  ZMQueryDataSet1.ZMConnection := ZMConnection1;
  ZMQueryDataSet1.SQL.Text := 'SELECT * FROM KUNDEN';
  ZMQueryDataSet1.QueryExecute;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  ZMQueryDataSet1.SQL.Text := 'UPDATE kunden SET (name=XXX) where id=2';
  ZMQueryDataSet1.QueryExecute;
  ZMQueryDataSet1.SQL.Text := 'SELECT * FROM KUNDEN';
  ZMQueryDataSet1.QueryExecute;
end;

end.         
Die CSV-Datei ist sehr primitiv:

Code: Alles auswählen

id;name;strasse;ort
1;Huber Erika;Blumenfelderstr. 13;Weihnachtshausen
2;Mustermann Max;Demoweg 1;Musterhausen

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 722
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Wie geht das: Commit bei ZMSQL?

Beitrag von fliegermichl »

Ich vermute mal, daß XXX in Anführungszeichen muß.

kirchfritz
Beiträge: 72
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 2.0.2 FPC 3.2)
CPU-Target: 32Bit

Re: Wie geht das: Commit bei ZMSQL?

Beitrag von kirchfritz »

Habe ich schon probiert, geht auch nicht!

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  ZMQueryDataSet1.SQL.Text := 'UPDATE kunden SET (name=''XXX'') where id=2';
  ZMQueryDataSet1.QueryExecute;
  ZMQueryDataSet1.SQL.Text := 'SELECT * FROM KUNDEN';
  ZMQueryDataSet1.QueryExecute;
end;  

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4370
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Wie geht das: Commit bei ZMSQL?

Beitrag von af0815 »

Aktiviere mal PersitentSave im OI. Das veranlasst das die Änderungen nicht nur im Memory existieren, sondern auch ins csv kommen. Zumindest die Änderungen die ich im Grid gemacht habe.
Ich glaube es geht über das update gar nicht.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  ZMQueryDataSet1.First;
  ZMQueryDataSet1.Locate('ID','2',[loCaseInsensitive]);
  ZMQueryDataSet1.Edit;
  ZMQueryDataSet1.FieldByName('Name').AsString:='XXXX';
  ZMQueryDataSet1.Post;
end;

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

kirchfritz
Beiträge: 72
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 2.0.2 FPC 3.2)
CPU-Target: 32Bit

Re: Wie geht das: Commit bei ZMSQL?

Beitrag von kirchfritz »

Im WIKI zu ZMSQL https://wiki.lazarus.freepascal.org/ZMS ... L_language steht:
UPDATE
Allows you to update existing data. Syntax:
UPDATE tablename SET updatelist [WHERE condition]
updatelist: field1=value1[,fieldN=valueN]
condition: see WHERE for the optional condition
Irgendwie möchte ich schon glauben, dass dies funktioniert

kirchfritz
Beiträge: 72
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 2.0.2 FPC 3.2)
CPU-Target: 32Bit

Re: Wie geht das: Commit bei ZMSQL?

Beitrag von kirchfritz »

PersistentSave im OI aktiviert hat keine Auswirkungen!

wp_xyz
Beiträge: 3440
Registriert: Fr 8. Apr 2011, 09:01

Re: Wie geht das: Commit bei ZMSQL?

Beitrag von wp_xyz »

[Sorry - was hier stand, war für ihen anderen Thread gedacht. Warum kann ich als Beitragserstellen meinen eigenen Beitrag nicht löschen, solange niemand geantwortet hat?]

shokwave
Beiträge: 436
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win10 (L 1.6 FPC 3.0.0)
CPU-Target: i386,x64
Wohnort: Rudolstadt

Re: Wie geht das: Commit bei ZMSQL?

Beitrag von shokwave »

Code: Alles auswählen

  ZMQueryDataSet1.SQL.Text := 'UPDATE kunden SET name = XXX where id = 2;' +
                              'SAVE TABLE kunden;';
Hat bei mir gerade funktioniert. Gänsefüßchen mag er anscheinend nicht.
mfg Ingo

kirchfritz
Beiträge: 72
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 2.0.2 FPC 3.2)
CPU-Target: 32Bit

Re: Wie geht das: Commit bei ZMSQL?

Beitrag von kirchfritz »

Super.
Bei mir funktioniert's jetzt auch mit COMMIT

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  ZMQueryDataSet1.SQL.Text := 'UPDATE kunden SET Name = ''Mustermann Max'' WHERE id = 2; COMMIT;';
  ZMQueryDataSet1.QueryExecute;
  ZMQueryDataSet1.SQL.Text := 'SELECT * FROM kunden';
  ZMQueryDataSet1.QueryExecute;
end; 

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4370
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Wie geht das: Commit bei ZMSQL?

Beitrag von af0815 »

Meine Variante hat getesteter Weise funktioniert, allerdings nur mit Persistentwrite. Ist auch logisch, wenn man sich die property ansieht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten