Operation not allowed, dataset "%s" is not in an activ...

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

Operation not allowed, dataset "%s" is not in an activ...

Beitragvon sierdolg » 16. Feb 2017, 10:46 Operation not allowed, dataset "%s" is not in an activ...

Werte Forumsgemeinde,

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.
 [/code]
 
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


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?
Zuletzt geändert von Lori am 20. Feb 2017, 18:19, insgesamt 2-mal geändert.
Grund: Highlighter
sierdolg
 
Beiträge: 50
Registriert: 24. Okt 2012, 14:50

Beitragvon mse » 16. Feb 2017, 11:01 Re: Operation not allowed, dataset "%s" is not in an activ..

Aktiviere in Lazarus die Entsprechung von MSEide 'Stop on exception' und prüfe das Stack Fenster. Wahrscheinlich siehst du dann wo versucht wird einen Feldwert zu ändern. Es ist auch nützlich, die FPC-RTL und ZEOS mit debuginfo zu kompilieren.
mse
 
Beiträge: 1396
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.4,git master FPC 3.0,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Schabersack » 16. Feb 2017, 13:01 Re: Operation not allowed, dataset "%s" is not in an activ..

Hallo!

Da hatte ich einmal etwas ähnliches - durchsuche doch mal deine Datenbank Properties nach einer Eigenschaft Autoedit und falls aktiv deaktiviere diese...

Gruß

Schabersack
Wer das Haus mit einem Schrim verlässt, der hat auch anrecht auf Regen!
Schabersack
 
Beiträge: 5
Registriert: 16. Okt 2013, 19:24

Beitragvon sierdolg » 17. Feb 2017, 16:38 Re: Operation not allowed, dataset "%s" is not in an activ..

Hallo Schabersack,

vielen Dank für den Tip! Leider war's das auch nicht. Ich habe heute versucht, die relevanten Tabellen in eine SQLite3-Datenbank zu übertragen und die Inhalte soweit zurechtzustutzen, daß ich diese mit einer ebenfalls aufs Wesentliche reduzierten Kopie als "Minimalbeispiel" anhängen kann.

Erneut blieb ich kurz vor dem Ziel stecken: Alle Datasets sind überarbeitet (auf die noch vorhandenen Felder reduziert), im Designer zeigt Lazarus dann ja auch alle Steuerelemente mit Inhalt an. Insofern würde ich denken sollte alles passen.

.Designmode und .Connected aus, Kompilieren, starten - "SQL Error: SQL logic error or missing database", und ich finde nicht heraus, woran das nun wieder liegt.

Nichts sonst greift auf die test.db zu, .Designmode und .Connected der Connection sind FALSE, und der Pfad zur Datenbank ist absolut eingetragen. Fürs erste bin ich damit wieder mal mit meinem kleinen Latium am Ende.
sierdolg
 
Beiträge: 50
Registriert: 24. Okt 2012, 14:50

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried