Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DBEdit schreibgeschützt? (https://www.delphipraxis.net/188829-dbedit-schreibgeschuetzt.html)

AlexII 11. Apr 2016 15:10

Datenbank: SQLite • Version: 3 • Zugriff über: SQLite3Connection

DBEdit schreibgeschützt?
 
Hallo,

ich laden die Daten in eine DBEdit, doch in dieser lässt sich nichts ändern, wieso eigentlich? ReadOnly ist false. Oder wird das beschreibbar wenn man im DBNavigator auf "+" klickt? Kann ich mir vorstellen, aber beim DBNavigator sind alle Icons außer Pfeilen deaktiviert, keine Ahnung wieso, aber wahrscheinlich weil ich mehrere Tabellen lade.

Danke!

Devil1925 11. Apr 2016 16:05

AW: DBEdit schreibgeschützt?
 
Nur mal so ins blaue geschossen: gibt es die Eigenschaft "Enabled" und ist diese eventuell auf "False" gesetzt?

AlexII 11. Apr 2016 16:07

AW: DBEdit schreibgeschützt?
 
Nein, in den Eigenschaften wurde nichts geändert. Ich denke das muss so sein... werde eine normale Edit nehmen.

baumina 11. Apr 2016 16:13

AW: DBEdit schreibgeschützt?
 
Ich denke, dass das Dataset auf Readonly steht, weil es sich um eine Abfrage mit joins handelt. Bei einer einfachen Abfrage (select * from xyz) wird automatisch ein update-Statement (update xyz set abc = 'xxx') erstellt, bei komplexen Abfragen setzt dieser Automatismus Readonly einfach auf false und man muss sich selber um alles kümmern.

AlexII 11. Apr 2016 16:17

AW: DBEdit schreibgeschützt?
 
Wo kann ich bei DataSet das Readonly ausschalten? Finde diese Einstellung nicht, gibt's die überhaupt bei Lazarus? Meine SELECT abfrage ist nicht ganz einfach, da sind mehrere Tabellen.

baumina 11. Apr 2016 16:20

AW: DBEdit schreibgeschützt?
 
Selber Readonly auf true setzen würde eh nix bringen. Lass dir mal TDataset.CanModify anzeigen.

Sherlock 11. Apr 2016 16:25

AW: DBEdit schreibgeschützt?
 
Eventuell noch die RowID mit selectieren.

Sherlock

AlexII 11. Apr 2016 16:26

AW: DBEdit schreibgeschützt?
 
CanModify ist false! Wie schalte ich es auf true?

Delphi-Quellcode:
SQLQuery1.CanModify := True;
will nicht
Zitat:

main.pas(402,23) Error: No member is provided to access property

Sherlock 11. Apr 2016 16:29

AW: DBEdit schreibgeschützt?
 
Dann gibt es noch das Delphi-Referenz durchsuchenTDataSet.Edit...

Sherlock

AlexII 11. Apr 2016 16:31

AW: DBEdit schreibgeschützt?
 
Wow... cool... muss jetzt los, schaue es Zuhause nach. Vielen Dank!

baumina 11. Apr 2016 16:33

AW: DBEdit schreibgeschützt?
 
Woher soll denn das Dataset erahnen welche Tabellen wie upzudaten sind, wenn du einen komplexen select hast?

AlexII 11. Apr 2016 17:36

AW: DBEdit schreibgeschützt?
 
Und wie üblich ist es machen?

p80286 11. Apr 2016 18:30

AW: DBEdit schreibgeschützt?
 
Zitat:

Zitat von AlexII (Beitrag 1335305)
Und wie üblich ist es machen?

Delphi-Quellcode:
irgendwas.sql.text:='update mytable set myfield=wert where myid=id';
irgendwas.sql.exec; {differiert je nach komponente}
Laß die Finger von den DB.. Componenten, da weißt Du wo Du bist.

Gruß
K-H

AlexII 11. Apr 2016 19:02

AW: DBEdit schreibgeschützt?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Sherlock (Beitrag 1335294)
Dann gibt es noch das Delphi-Referenz durchsuchenTDataSet.Edit...

Sherlock

Hm... einfach nur Edit hilft da auch nicht, siehe Anhang...

nahpets 11. Apr 2016 20:26

AW: DBEdit schreibgeschützt?
 
Datenmengen über mehrere Tabellen sind normalerweise schreibgeschützt, da in der Ergebnismenge (also im DataSet) jegliche Information fehlt, welcher Wert aus welcher Tabelle stammt (es steht nur das Ergebnis der Abfrage zur Verfügung). Und damit hat das DataSet keine Chance bei 'ner Wertänderung diese an die "richtige" Stelle zu schreiben.

Wenn Du an dem Ergebnis Änderungen vornehmen willst, bleibt Dir nichts anderes übrig, als für die änderbaren Werte entsprechende Edits zu nutzen und die Änderungen dann per Update (wie von p80286 beschrieben) in die Datenbank zu schreiben. Damit das problemlos funktionieren kann, musst Du aber auch für alle Werte die entsprechenden Datenbankschlüssel mit selektieren. Sind in der Abfrage Summierungen, Gruppierungen ... enthalten, wird das aber auch scheitern.

Zeig' uns mal bitte das Statement, eventuell hat dann ja jemand 'ne Idee, wie Du damit, mit erträglichem, Aufwand umgehen kannst.

Ohne das Statement zu kennen, ist das leider ein bisserl "Stochern im Dunklen".

Die Ergebnismenge kannst Du in 'nem DBGrid mit 'nem Navigator anzeigen. Im AfterScroll-Ereignis des DataSets könntest Du dann die änderbaren Einzelwerte in Edits übertragen.
Änderungen gehen aber nur per Update und werden im DBGrid nicht sichtbar, bis die Abfrage erneut ausgeführt wird.

AlexII 11. Apr 2016 20:47

AW: DBEdit schreibgeschützt?
 
Ah... jah... jetzt begreife ich so langsam die Logik die dahinter steckt, danke Dir! Ich tüftle mal ein bisschen weiter... das hilft mir weiter. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz