Zeros 1 Aenderung geht bei der 2. kommt ein fehler

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
wbeppler
Beiträge: 131
Registriert: So 20. Jul 2014, 10:27
OS, Lazarus, FPC: kubuntu, raspbian, laz 1.2 / 0.9 microcontroller
CPU-Target: 8-64 bit
Wohnort: bodensee
Kontaktdaten:

Zeros 1 Aenderung geht bei der 2. kommt ein fehler

Beitrag von wbeppler »

hi,

ich habe eine MariaDB mit einer Tabelle, diese kann ich mit ZConnection1 ansprechen und ZQuery1 auslesen und ich habe DBEdit felder in dene ich Aenderungen vornehmen kann. soweit so gut.
Wenn ich aber per Programm einen Feldinhalt aendere geht das auch, aber nur ein einziges mal, danach kann ich den Datensatz auch nicht mehr mit den DBEdit-feldern veraendern.

mein code

Code: Alles auswählen

procedure TFormKalenderJahr.Button1Click(Sender: TObject);
begin
  ZQuery1.Edit ; // muss ich edit vor jedem recordwechsel machen ?
  ZQuery1.FieldByName('notiz').AsString  := 'notation';
  showmessage('vor post'); //wird beim 2ten versuch auf dem selben record noch angezeigt, dann kommt fehler s.u.
   ZQuery1.Post ;
  showmessage('vor au');
  ZQuery1.ApplyUpdates ; // den brauch ich doch bei jedem record oder ?
  showmessage('vor cu');
  ZQuery1.CommitUpdates; /den muesste ich wenn ich merere record habe nur einmal oder ?
 
  ZQuery1.Active := false; // wollte nur testen
  ZQuery1.Active := true;
end;


beim 2ten aenderungsversuch kommt der FEHLER: 0 records updated. only one record should be updated.

das feld ist aber wenn ich es mit heidiSQL anschaue richtig geaendert, ebenso wenn ich das prog beende und neu starte. wenn ich mit heidiSQL ein Update mache geht die aenderung. mit meinem prog geht aber nix bis auf die fehlermeldung

ich habe die letze zeit das forum viel beansprucht und muss schon wieder fragen.... abe rich versuche dahinter zukommen seit heute morgen um 7:00 und jetzt ist 12:00, draussen scheon wetter....

danke vorab

gruss
w
Zuletzt geändert von Lori am Sa 28. Mär 2015, 21:50, insgesamt 1-mal geändert.
Grund: Highlighter

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Zeros 1 Aenderung geht bei der 2. kommt ein fehler

Beitrag von Michl »

wbeppler hat geschrieben:ZQuery1.Edit ; // muss ich edit vor jedem recordwechsel machen ?
Du musst zuerst zum zu ändernden Record wechseln und kannst ihn erst dann zum editieren öffnen!


Ich kenn jetzt MariaDB nicht wirklich (ich habe z.Zt. nur diverse SQLite-, PostgreSQL- und zu Testzwecken MySQL-Datenbanken am Laufen). Der Ablauf generell müsste mMn aber in etwa so aussehen (ZConnection.AutoCommit:=True, ansosnten müsste nach dem ZQuery1.Post immer noch ein ZQuery1.Commit folgen).

Bei ZQuery1.CachedUpdates:=False sollte reichen:

Code: Alles auswählen

procedure TFormKalenderJahr.Button1Click(Sender: TObject);
begin
  ZQuery1.Edit;
  ZQuery1.FieldByName('notiz').AsString := 'notation';
  ZQuery1.Post;
end;

Bei ZQuery1.CachedUpdates:=True:

Code: Alles auswählen

procedure TFormKalenderJahr.Button1Click(Sender: TObject);
var
  AllesOK: Boolean;
begin
  ZQuery1.First;
  AllesOK:=True;
  while (not ZQuery1.EOF) and AllesOK do begin
    ZQuery1.Edit;
    ZQuery1.FieldByName('notiz').AsString := 'notation';
    ZQuery1.Post;
    ZQuery1.Next;
    AllesOK:=IrgendeineValidationsFunktion;
  end;
  if AllesOK then begin
    ZQuery1.ApplyUpdates;
    ZQuery1.CommitUpdates;
  end
  else
    ZQuery1.CancelUpdates;
end;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

wbeppler
Beiträge: 131
Registriert: So 20. Jul 2014, 10:27
OS, Lazarus, FPC: kubuntu, raspbian, laz 1.2 / 0.9 microcontroller
CPU-Target: 8-64 bit
Wohnort: bodensee
Kontaktdaten:

Re: Zeros 1 Aenderung geht bei der 2. kommt ein fehler

Beitrag von wbeppler »

hi michl,

geniess mal den kaffee, mach ich auch grad.

so wie dein code aussieht ist meiner mal gewesen. den wechsel zum record mach ich in dem ich im grid drauf stehe. dannn hab ich mir eben den button gemacht der edit, zuweisung, post und apply und commit macht.

das witzige ist. in meiner tabelle sind paar1000 records. jeder record hat einen primaerschluessel autoinc. jeder record hat ein datum (fortlaufend). es handelt sich um kalender bei denen ich feiertage und anderes eintragen will/muss. ABER bei noch nicht angefassten records geht es. wenn ich einen geaenderten record ein 2.mal anfasse kommt der fehler. die aenderungen kann ich mit einem DB-Tool (hier heidiSql) nachschauen, die aenderungen sind vollzogen. selbst wennn ich den rechner neu boote, die aenderungen sind in der DB-tabelle. wenn ich nun meine sw neu starte und nen geaenderten record aendern will geht das nicht, es kommmt die fehlermeldung. mache ich nur aenderungen an noch nie geaenderten records, so geht alles (scheinbar).

die maria-db soll binaerkompatibel mit der MySQL 5.6 sein. ich verzweifle noch....
im moment mache ich alles ueber das control von zeos, also connection und query. ich werde als naechstes mal das in SQL-Klartext machen, wenn ich das in SQL-Befehlen in HeidiSQL mache geht das aendern von geaenderten records ja auch.

hat jemand ne idee was hier im argen ist ? es ist nicht so, dass ich das problem nicht irgendwie umschiffen kann, es ist nur so, dass ich gerne weiss warum was nicht funktioniert

gruss und dank
w :-)

Antworten