Autor |
Beitrag |
AndreM
      
Beiträge: 122
Win2k, WinXP, Suse 10
D7 Ent
|
Verfasst: Di 20.01.04 17:49
Hallo Community,
ich hab da mal wieder ein kleines Problem. Und zwar gebe ich per IBQuery Daten in einem DBGrid aus. Per Mausklick auf einen dieser Datensätze wird ein neues Forum geöffnet auf welchem DBEdit-Boxen eingefügt sind, die mit den entsprechenden Feldern aus dem Query verknüpft sind.
Jetzt möchte ich die Daten aus diesen Felder in dem DBEdit ändern und danach zurück in die Datenbank schreiben. Nur leider sind die DBEdit-Felder irgendwie Schreibgeschützt, obwohl ReadOnly auf False steht.
Jetzt habe ich gelesen das das Dataset (in meinen Fall ja das IBQuery, richtig?) im Editmodus sein. Nur wo schalte ich das Query in den Editmodus.
Oder fehlt mir noch eine Komponente. Also meine Reihenfolge sieht so aus.
SQL-String an IBQuery übergeben. Dies übergibt die Daten dann an eine Datasource und das DBGrid ließt diese dann aus der Datasource aus. Hoffe mal das das bis hierher richtig erklärt ist!
Dann mache ich nen Mausklick auf eine Zelle im Grid und es werden die entsprechenden Daten in DBEdits ausgegeben.
--> Edit: Also ich habe jetzt mal probehalber ne RXMemoryData-Komponente dazuwischen gehängt und dann kann ich in den DBEdit-Feldern ändern. Also die neue Reihenfolge ist nun IBQUERY --> RXMemorydata --> Datasource --> DBGrid.
Aber irgendwie muß das doch auch nur mit dem Query, ohne RXMemorydata gehen, oder nicht!?
|
|
tomtom62
      
Beiträge: 278
WIN 2000, XP prof
D5 prof.
|
Verfasst: Di 20.01.04 18:42
Das einfachste wird sein, dass Du die geänderten Daten mit einem Update Statement in die Datenbank zurückschreibst.
Wenn Du möchtest, kannst Du dann nach dem Update die Query neu aufrufen und hast dann den aktuellen Stand..
|
|
AndreM 
      
Beiträge: 122
Win2k, WinXP, Suse 10
D7 Ent
|
Verfasst: Di 20.01.04 19:33
Ja, nur das Problem ist das ich ohne RXMemorydata-Komponente nicht in den DBEdit-Felder schreiben kann. Also die sind dann schreibgeschützt!
|
|
AndreM 
      
Beiträge: 122
Win2k, WinXP, Suse 10
D7 Ent
|
Verfasst: Di 20.01.04 20:00
So, ich hab jetzt noch nen bischen gefummelt und wie im ersten Thema rot beschrieben ne Möglichkeit gefunden wir ich in die DBEdit-Felder schreiben kann.
Ich hohle die Daten mit Hilfe der IBQuery-Komponente aus der Interbase-Datenbank raus.
Delphi-Quelltext 1: 2: 3:
| Form_Haupt.IBQuery_Einlesen.SQL.Clear; Form_Haupt.IBQuery_Einlesen.SQL.Add('select BENUTZER.*, BENUTZERGRUPPEN.ID, BENUTZERGRUPPEN. GRUPPENNAME from BENUTZER, BENUTZERGRUPPEN where BENUTZER.GROUPID = BENUTZERGRUPPEN. ID'); Form_Haupt.IBQuery_Einlesen.Open; |
Danach schreibe ich diese in eine Komponente von RXLib, genauer in die RXMemoryData-Komponente.
Delphi-Quelltext 1: 2: 3: 4: 5:
| Form_Haupt.RxMemoryData1.Insert; Form_Haupt.RxMemoryData1.fieldbyname('LOGINNAME').asstring:=Form_Haupt.IBQuery_Einlesen.fieldbyname('LOGINNAME').asstring; Form_Haupt.RxMemoryData1.fieldbyname('PASSWORT').asstring:=Form_Haupt.IBQuery_Einlesen.fieldbyname('PASSWORT').asstring; Form_Haupt.RxMemoryData1.fieldbyname('NAME').asstring:=Form_Haupt.IBQuery_Einlesen.fieldbyname('NAME').asstring; Form_Haupt.RxMemoryData1.fieldbyname('GRUPPENNAME').asstring:=Form_Haupt.IBQuery_Einlesen.fieldbyname('GRUPPENNAME').asstring; |
Das Problem ist hierbei jedoch das er lediglich den 1. Datensatz aus der jeweiligen Datenbank an die RXMemorydata übergibt.
Wie kann ich es realisieren das er alle Daten aus der IB-DB an die RXMemorydata per Query übergibt? Oder ist das rein technisch nicht machbar? 
|
|
tomtom62
      
Beiträge: 278
WIN 2000, XP prof
D5 prof.
|
Verfasst: Di 20.01.04 20:05
Zu kompliziert gedacht
Du ersetzt die DBEdit Felder durch "normale" Editfelder. Dann schreibst Du die Daten aus der Query anstelle in die DBEdit Felder in die Edit-Felder.
Dort kannst Du sie beliebig ändern und bearbeiten.
Dann baust Du Dir eine UPDATE Query zusammen und schreibst darin die Inhalte der Edit-Felder in die Datenbank zurück.
Also etwa: UPDATE Tabelle set feld1="Inhalt von Edit1", feld2="inhalt von edit2"... where Schluesselfeld= xxx
Schluesselfeld sollte dabei Dein Primary key sein und xxx der Wert dieses Keys für den ausgewählten Datensatz.
|
|
AndreM 
      
Beiträge: 122
Win2k, WinXP, Suse 10
D7 Ent
|
Verfasst: Di 20.01.04 20:10
Ok, ihr könnt das Thema vergessen! Man muß dem Query natürlich noch eine Update-Komponente Unterjubeln und dieser dann auch einen SQL-String zuweisen!
@tomtom62
Oder so! 
|
|
KidPaddle
      
Beiträge: 351
WinXP,Linux
D7 Prof, XE7
|
Verfasst: Di 20.01.04 21:17
Allerdings weis er nicht, warum er die Daten nicht bearbeiten konnte. Es liegt an dem SQL - String, in dem er einen EQUAL - Join zwischen 2 Tabellen aufbaut. Dadurch ist die Datenmenge automatisch Read - Only und kann somit nicht in den Edit - Modus gesetzt werden.
Gruß
Kidpaddle
|
|
AndreM 
      
Beiträge: 122
Win2k, WinXP, Suse 10
D7 Ent
|
Verfasst: Mi 21.01.04 07:22
KidPaddle hat folgendes geschrieben: | Allerdings weis er nicht, warum er die Daten nicht bearbeiten konnte. Es liegt an dem SQL - String, in dem er einen EQUAL - Join zwischen 2 Tabellen aufbaut. Dadurch ist die Datenmenge automatisch Read - Only und kann somit nicht in den Edit - Modus gesetzt werden. |
THX, also daran lag es. Ich hätte nämlich meinen *popo* verwetten können, dass es bis zu der Join-Verknüpfug noch funktioniert hat.
Oder ich war mir zumindest sicher, dass es vorher irgendwann mal änderbar war! 
|
|
Böser Borstel
      
Beiträge: 154
|
Verfasst: Mi 21.01.04 08:34
Kann man denn überhaupt Daten die von einem Query stand, in DB-Componenten ändern.
Ich denke nein, denn ein Query ist bloß eine Abbildung der Datenbank.
|
|
AndreM 
      
Beiträge: 122
Win2k, WinXP, Suse 10
D7 Ent
|
Verfasst: Mi 21.01.04 09:47
Böser Borstel hat folgendes geschrieben: | Kann man denn überhaupt Daten die von einem Query stand, in DB-Componenten ändern.
Ich denke nein, denn ein Query ist bloß eine Abbildung der Datenbank. |
Wie ich oben bereits geschrieben habe geht dies indem du die Daten aus dem Query zunächst in einem RXMemorydata zwischenspeicherst, oder aber dem Query eine Updatekomponente zuordnest!
Dann geht es. Aber am einfachsten ist es wenn du die Daten anstatt in nen DBEdit in nen Edit-Feld schreibst und dann per UPDATE die Daten zurück in die DB schreibst, wie tomtom oben geschrieben hat.
|
|