Firebrid, SQLQuery und Status

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 988
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Firebrid, SQLQuery und Status

Beitrag von kralle »

Moin,

da bin ich schon wieder.

Ich habe auf einem Formular folgende Komponenten:
IBConnection1
SQLTransaction1
SQLQuery1
DataSource1

Damit baue ich eine Verbindung zu einer lokalen Firebird-Datenbank auf.

Aber, immer wennich etwas geändert habe und ein

Code: Alles auswählen

DataSource1.DataSet.Post
und dann ein

Code: Alles auswählen

SQLQuer1.ApplyUpdates(0)
abschicke, erhalte ich berechtigterweise diese Fehlermeldung:
SQLQuery1: Operation not allowed, dataset "SQLQuery1" in not in an edit or insert state.


Mir gelingt es einfach nicht "SQLQuery1" in den "edit"/"insert"-Status zu versetzen.

Irgendwie stehe ich mir gerade selber im Weg und das mitten im Wald.

Wer weißt mir die Richtung?

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

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: Firebrid, SQLQuery und Status

Beitrag von gladio »

Bist du sicher, daß du das DataSource Posten willst?
Macht man das nicht mit der Query?

etw so

Code: Alles auswählen

 
..
  try
    If QueryXYZ.State in [dsEdit, dsInsert] then QueryXYZ.Post;
  except
    QueryXYZ.Cancel;
    QueryXYZ.AplayUpdate;
  end;
..

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 988
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Firebrid, SQLQuery und Status

Beitrag von kralle »

Moin,

gladio hat geschrieben:Bist du sicher, daß du das DataSource Posten willst?
Macht man das nicht mit der Query?

Da hast Du natürlich recht. Habe ich zwischenzeitlich auch schon geändert.
gladio hat geschrieben:etw so

Code: Alles auswählen

 
..
  try
    If QueryXYZ.State in [dsEdit, dsInsert] then QueryXYZ.Post;
  except
    QueryXYZ.Cancel;
    QueryXYZ.AplayUpdate;
  end;
..

Hmm, das ist die Aktion die ausgeführt werden soll nach der Änderung/Erweiterung.
Aber, ich bekomme die Datenbank nicht in den Status "dsEdit" / "dsInsert" - das ist mein Problem.
Ich kann zwar ein "SQLQuery1.Edit" abschicken, aber wenn ich dann im DBGrid etwas ändere, und dann die Änderung übernehmen will, kommt obige Fehlermeldung.
Ich dreh mich im Kreis ...

Kann es sein, das ich zwar das "DBGrid" mit der Datenbank verbunden habe, aber das man darin keine Daten ändern kann?

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

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: Firebrid, SQLQuery und Status

Beitrag von gladio »

Diese Phrase müßte in die 'BeforePost' aber ohne 'AplayUpdate'.
Das müßte wohl in die 'AfterPost' .
AplayUpdate nutze ich eigentlich nicht.
In den Eigenschaften von dem DBGrid müßte bei DataSource deine Datasource eingetragen sein.
Ansonsten ist das jetzt ein bischen wie Stochern im Nebel, mit Connectin- und Transactions-Komponente
habe ich keine Erfahrung. Ich verwende Zeos.

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

Re: Firebrid, SQLQuery und Status

Beitrag von wp_xyz »

Und hast du ganz am Anfang QueryXYZ.Edit (bei Datensatz bearbeiten), bzw. QueryXYZ.Insert (neue Datensatz) aufgerufen? Also:

Code: Alles auswählen

QueryXYZ.Edit;
QueryXYZ.FieldByName['Name'] := 'Einstein';
QueryXYZ.FieldByName['Vorname'] := 'Albert';
QueryXYZ.Post;

Übrigens: Datasource.Dataset muss genauso geeignet sein, wenn dort QueryXYZ eingetragen ist - es wird ja nicht Datasource gepostet (was gar nicht geht), sondern der Dataset, der mit Datasource verbunden ist.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 988
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Firebrid, SQLQuery und Status

Beitrag von kralle »

Also da irgendwas nicht stimmt, habe ich einfach mal im DBGrid in den Event "OnColEnter" ein "SQLQuery1.Edit" platziert.
Jetzt sollte man doch denken, dass bei einem Klick in eine Zelle das "SQLQuery" in den Edit-Modus versetzt, aber Pustekuchen.
Wieder kommt die Fehlermeldung dass "SQLQuery" nicht im Edit-Modus sein :evil:

Ich blick da nicht mehr durch.

Ich packe mal den kompletten Projektordner hier als ZIP rein.

Gruß Heiko
Dateianhänge
Firebird-Test.zip
Testprogramm für Firebird
(2.34 MiB) 86-mal heruntergeladen
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

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: Firebrid, SQLQuery und Status

Beitrag von gladio »

Ist dein DBNavigator mit der Datasource verbunden?
Eigentlich müssen die Schalter im DBNavigator nicht extra im OnClick mitgeteilt bekommen, was sie zu tun haben.
Das wurde da schon reinprogrammiert.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 988
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Firebrid, SQLQuery und Status

Beitrag von kralle »

Moin,

gladio hat geschrieben:Ist dein DBNavigator mit der Datasource verbunden?

Ja.
gladio hat geschrieben:Eigentlich müssen die Schalter im DBNavigator nicht extra im OnClick mitgeteilt bekommen, was sie zu tun haben.
Das wurde da schon reinprogrammiert.

Dachte ich auch.

Gruß HEiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

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: Firebrid, SQLQuery und Status

Beitrag von gladio »

Mal ins Blaue:
Bei der Transaction ist bei Action caRollback
und Active ist False.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 988
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Firebrid, SQLQuery und Status

Beitrag von kralle »

Moin,

gladio hat geschrieben:Mal ins Blaue:
Bei der Transaction ist bei Action caRollback

Ja. Auf was sollte Action denn stehen?
Denn egal welchen der Werte ich nehme, das Ergebnis bleibt gleich.

gladio hat geschrieben:und Active ist False.

Nein. Ist True.

Gruß HEiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

luckylynx
Beiträge: 10
Registriert: So 25. Dez 2016, 13:07

Re: Firebrid, SQLQuery und Status

Beitrag von luckylynx »

Hallo,
habe mir das Projekt mal angesehen. Leider ist die Testdatenbank nicht geeignet. Was genu die Problematik ist, habe ich nicht geprüft. Mit der angefügten DB ( eine Tabelle und ein paar Datensätze) und dem geänderten Programm funzt aber alles.
Beliebige Änderungen in dem Grid kann man mit den Button 'speichern' in die DB übernehmen.
Im Programm muss der DB Name noch eingefügt werden oder in den Eigenschaften von IBConnection1.
Der Navigator hat jetzt keine Funktion.
Ich denke zum Probieren reicht das erst einmal.
Dateianhänge
Firebird3_TestOK.zip
(196.92 KiB) 98-mal heruntergeladen

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 988
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Firebrid, SQLQuery und Status

Beitrag von kralle »

Moin,

luckylynx hat geschrieben:Ich denke zum Probieren reicht das erst einmal.

Dein Projekt, kann Deine "test.fdb" nicht öffnen weil Username (SYSDABA) und Passwort (masterkey) nicht stimmen.
Auch mit FlameRobin lässt sich Deine Datenbank nicht öffnen.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

luckylynx
Beiträge: 10
Registriert: So 25. Dez 2016, 13:07

Re: Firebrid, SQLQuery und Status

Beitrag von luckylynx »

Bei mir läufts.
lege doch mit Flamerobin eine DB an.

CREATE TABLE ZUGRIFF
( AUFTRAG Integer,
REF Varchar(3),
DATUM Date,
KURZ Varchar(3));

GRANT INSERT, SELECT, UPDATE
ON ZUGRIFF TO "PUBLIC";

GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE
ON ZUGRIFF TO SYSDBA WITH GRANT OPTION;

Dann sollte es laufen, sonst melde dich

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 988
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Firebrid, SQLQuery und Status

Beitrag von kralle »

Moin,
luckylynx hat geschrieben:Dann sollte es laufen, sonst melde dich

Das tue ich dann mal ....

Egal wo ich die Datenbank erstellen will, ich habe FlameRobin, darf nirgendwo eine Datei erstellen.
Weder im Home, noch unter Dokumente, noch im Projektverzeichnis :evil:

Das darf doch alles nicht wahr sein.
Wie ich das hasse. Mal fehlen Zugriffsrechte ohne das bei der Installation darauf hingewiesen wird, dann fehlen irgendwelche Dateien.
Unter Win gerne mal eine .vbs-Datei. Ich will Software anwenden und nicht die Fehler der Programmierer beseitigen (da mache ich selber genug)

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Firebrid, SQLQuery und Status

Beitrag von mse »

Die erlaubten Verzeichnisse für Datenbanken werden in der Firebird Konfigurationsdatei festgelegt. Wenn keine Einschränkungen gelten sollen, kann man in firebird.conf

Code: Alles auswählen

 
 DatabaseAccess = Full
 

angeben. Zudem muss der user "firebird" Schreib und Leserechte in den verwendeten Verzeichnissen haben. In deinem home- und untergeordneten Verzeichnissen hat "firebird" standardmässig bestimmt keine Schreibrechte.

Antworten