erneut stecke ich an einer Fehlermeldung fest, deren Ursache sich nicht erschließt: Beim Start einer Anwendung, die nur aus einem Datamodule und einem Form besteht und noch fast keinen Code enthält (insbesondere keinen, der Datenbankaktionen anstoßen würde), kommt noch vor dem Erscheinen des Formulars die Fehlermeldung "ztPos : Operation not allowed, dataset "%s" is not in an edit or insert state.".
Mit dem Debugger habe ich an verschiedene Stellen Haltepunkte gesetzt und festgestellt, daß der Code, der die Datenbankverbindung herstellt und dann die Datasets der Reihe nach aktiviert:
Code: Alles auswählen
procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
DataModule1.ZConInventory.Connect;
//aktivieren der Datasets, Lookup-Datasets zuerst, dann die Haupttabelle
DataModule1.ztHActive := True;
//... (analog weitere weitere Tabellen-Datasets)
DataModule1.ztStO.Active := True;
DataModule1.ztVPActive := True;
DataModule1.ztG.Active := True;
DataModule1.ztLs.Active := True;
DataModule1.zqVLs.Active := True;
DataModule1.ztPos.Active := True;
DataModule1.ztArt.Active := True;
end;
komplett fehlerlos durchlaufen wird. Gemäß der project.lpr folgt dann CreateForm:
[code=laz]begin
RequireDerivedFormResource:=True;
Application.Initialize;
Application.CreateForm(TDataModule1, DataModule1);
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Setze ich in der ersten Zeile von .FormCreate einen Haltepunkt, stoppt die Ausführung hier und die seltsame "Operation not allowed" Meldung erscheint bereits.
procedure TForm1.FormCreate(Sender: TObject);
begin
WriteLn('Start FormCreate');
end;
Die WriteLn-Ausgabe erfolgt wie erwartet auch noch nicht; auf der Konsole erscheint nur:
[FORMS.PP] ExceptionOccurred
Sender=EDatabaseError
Exception=ztPosition : Operation not allowed, dataset "%s" is not in an edit or insert state.
Stack trace:
$000000000078CB94
$0000000000A19D37 SETFIELDDATA, line 3055 of ../../../../../../../../../../home/user/development/lazarus/trunk-trunk/ccr/zeos/src/component/ZAbstractRODataset.pas
$000000000078FE1E
$00000000007972CA
$000000000078F6B2
$00000000007901DF
$00000000004A2825
$000000000045A834 CREATEFORM, line 2190 of include/application.inc
$000000000041E44D main, line 18 of project1.lpr[/code]
Jede Idee und jeder Vorschlag, wie man der Fehlerursache auf die Schliche kommt, wäre willkommen!
Verwendete Versionen: Lazarus (trunk) mit aktuellem FPC (trunk) mit Zeos Access (zcomponent 7.2), alles mit fpclazupdeluxe installiert (also nichts linuxdistributionsspezifisches) auf Debian Stable 8 alias Jessie 64 Bit.
Noch eine Zusatzinformation: Der Fehler tritt auf, sobald ich mit "Edit fields" ein Nachschlagefeld hinzufüge, um auf einem DBGrid statt dem Fremdschlüssel (für einen Ort) den Ortsnamen anzeigen zu lassen. Im Designer funktioniert das auch!
Mit dem Löschen dieses Nachschlagefeldes verschwindet der Laufzeitfehler wieder. Doch was hat ein Nachschlagefeld mit "Edit oder Insert" zu tun?