IBDataset is read-only

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

IBDataset is read-only

Beitrag von Luckner »

Hallo,
habe ein Problem mit ind eine Firebirs-Tabelle irgendetwas zu schreiben. Bekommen den Fehler, daß das verwendete Dataset read-only ist. Lesen aus der Tabelle mit IBDataset ist kein Problem. So ähnlich schreibe ich in Delphie und kenne dort das Problem nicht.
Beispiel:

Code: Alles auswählen

    DataModule_KS.IBDatabaseKunden.Open;
    DataModule_KS.IBTransactionKunden.Active:= true;
    DataModule_KS.IBDataSetKunden.Open;
    DataModule_KS.IBDataSetKunden.Edit;
Sobald ich "DataModule_KS.IBDataSetKunden.Edit" eintrage, bekomme ich den Fehler "IBDatasetKunden : Dataset ist read-only" Habe in der Komponnente nachgeschaut und nirgens ein Read-Only gefunden. Wusste auch nicht, dass ein Dataset diese Eigenschaft haben kann. Bitte um Hilfe.

Danke, Luckner

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: IBDataset is read-only

Beitrag von charlytango »

einfach mal aus der Hüfte....

Um draufzukommen was los ist, würde ich ein manuelles UPDATE Statement absetzen und prüfen ob und welche Meldung von der Datenbank kommt.

Hast du evtl einen Login der nur lesen darf?

Bei SQlite hab ich das mal öfter wenn ich mit einem anderen Programm die Datenbank gleichzeitig offen habe. Gibt es bei Firebird einen SingleUser Modus ? (bzw hast du mit einem anderen Programm die DB im Exclusive Mode geöffnet?)

sorry dass ich nichts präziseres sagen kann ;)

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: IBDataset is read-only

Beitrag von Luckner »

Hallo Charlytango,

für die erstellung der Tabelle unter Firebird und ggfls. Änderung der Daten in diesen Tabelle, benutze ich das Tool FlameRobin. Damit kann ich schreiben, was ich will. Kein Problem. Ich habe auch im Netz schon etwas darüber gelesen, jedoch ohne eindeutige Hinweise auf mögliche Lösung. Einer hat wohl Was gefunden, aber danach sich nicht mehr gemeldet und den Anderen, in diesem Portal, etwas mitgeteilt.

Es schon ein Problem, obwohl nicht so häufig.

Gruß, Luckner

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: IBDataset is read-only

Beitrag von gladio »

Ist eventuell deine angegebene Lazarus-/FPC-Version das Hemmnis?
Ist schon recht alt.

Sieben
Beiträge: 202
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: IBDataset is read-only

Beitrag von Sieben »

Habe in der Komponnente nachgeschaut und nirgens ein Read-Only gefunden.
Leider erwähnst du nirgends, was für eine Komponente das ist. TCustomBufDataSet führt nämlich durchaus ein public property ReadOnly ein, und TSQLQuery macht es dann auch published, dh im ObjektInspektor sichtbar.

Sicher, dass das nicht versehentlich auf True steht...?

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: IBDataset is read-only

Beitrag von Luckner »

Hallo gladio,
habe vergessen mein Profil zuu aktualisieren. Es ist die akl. Version.

Hallo Sieben,

das Package ist Firebird und die Komponenten: TIBDatabase, TIBDataset usw. Die Teile benutze ich auch in Delphi und da kenne ich diese Fehlermeldung nicht. Deshalb bin ich hier irritiert.

Gruß, Luckner

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

Re: IBDataset is read-only

Beitrag von af0815 »

Luckner hat geschrieben:
Mo 11. Apr 2022, 23:05
Die Teile benutze ich auch in Delphi und da kenne ich diese Fehlermeldung nicht. Deshalb bin ich hier irritiert.
Lazarus/FPC ist NICHT Delphi !!! Auch wenn vieles Quellcodekompatibel __erscheint__. Auch die Datenbanktreiber sind unter Umständen anders bzw. die implementation. Daher kann man NICHT Erwarten das beides gleich ist bzw. reagiert. :shock:

Die IB-Komponenten habe ich schon länger nicht in Verwendung, allerdings hängt bei SQLDB es davon ab, ob der Primary Key richtig anggegeben bzw. von der automatik erkannt wird. Ob es Forward Cursor ist - der ist auch RO. Ob es eine View ist, die ohne die richtigen SQL-Statements auch nicht aktualisierbar ist. Die Benutzerrechte nicht stimmen.

Am häufigsten kenne ich das mit dem Problem das der PK nicht richtig dedektiert wurde und ohne den, ist ein Dataset immer RO.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

gsa
Beiträge: 9
Registriert: Fr 13. Jun 2008, 15:23
OS, Lazarus, FPC: Windows / Linux (FPC 3.2. fixes, Lazarus 2.0 fixes / trunk)

Re: IBDataset is read-only

Beitrag von gsa »

Luckner hat geschrieben:
Mo 11. Apr 2022, 16:43
Sobald ich "DataModule_KS.IBDataSetKunden.Edit" eintrage, bekomme ich den Fehler "IBDatasetKunden : Dataset ist read-only" Habe in der Komponnente nachgeschaut und nirgens ein Read-Only gefunden. Wusste auch nicht, dass ein Dataset diese Eigenschaft haben kann. Bitte um Hilfe.
Ich vermute, dass du die Komponente IPExpress von MWA-Software im Einsatz hast. Das dortige IBDataset hat keine Property 'ReadOnly'. Aber in der Edit-Prozedur wird 'CanModify' abgefragt. Diese Property ist im IBDataset überschrieben worden. Es löst die Exception aus, wenn nicht mindesten die Property 'ModifySQL' ein SQL-Statement enthält.

IBExpress hilft dir bei der Erzeugung eines korrekten SQL-Statements.

Gruß Gerd

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: IBDataset is read-only

Beitrag von Luckner »

Hallo gsa,

danke für den Tipp mit dem "Property 'ModifySQL' ein SQL-Statement". Das war es in diesem Fall. Habe dort Was eingetragen und schon funktioniert es. Danke.

Gruß, Luckner

Antworten