TQuery - DBGrid



  • Ich hab folgende Frage, ich benutze für meine Datenbankabfrage ein TQuery. Diese Abfrage lasse ich im DBGrid anzeigen. Wenn ich nun versuche diese Datensätze zu verändern, sag er mir, das diese nur zum lesen geöffnet sind.

    Mein Frage, kann ich Daten die mit dem TQuery abgefragt worden sind überhaupt ändern?



  • nein, nimm TTable



  • Hi,

    mit TQuery geht das...

    DBGrid, Query, DataSource

    DataSource->DataSet = Query;
    DBGrid->DataSource = DataSource;



  • ?

    /me schaut fragend zu Blazek Jaroslav rüber



  • Hi,

    😕 🙄 😃

    oh meine Deutch....

    aber...das geht auch...aber welche DB
    normal query mit (SELECT [ * ] [Col] FROM table [LEFT, RIGHT, INNER JOIN] ...) muss gehen

    komplexer query (SELECT ISNULL(Col,0) AS ...)
    MSSQL 2k - CREATE VIEW und dann CREATE TRIGGER -> INSTEAD OF ... View

    und Column property ReadOnly = false

    [ Dieser Beitrag wurde am 31.01.2003 um 21:23 Uhr von Blazek Jaroslav editiert. ]



  • hm,

    bist du sicher, dass du die Frage richtig verstanden hast ?



  • Ähm, was ist denn nun? Gehts oder gehts nicht? 😕 😮



  • Hi,

    lass dich nicht verwirren. Du kannst in einem DBGrid nur Daten ändern, wenn du eine TTabel dahinter hast. Eine Query erlaubt das nicht. Du kannst sicherlich über eine Query daten ändern, worauf Blazek Jaroslav hinaus wollte. ( Siehe SQL= DELETE INSERT UPDATE )Allerdings nicht in einem DBGrid.



  • Gut, dann mal ne etwas anders gestellte Frage. Wie kann ich denn bestimmte Daten abfragen - anschließend im DBGrid anzeigen und auch verändern?

    Mit TQuery kann ich über die Abfragesprache SQL ja angeben, mit Hilfe von Kriterien, welche Datensätze angezeigt werden.
    Bietet das TTable auch? Wenn ja wie? Oder wie wird das sonst gemacht?



  • Gut, dann mal ne etwas anders gestellte Frage. Wie kann ich denn bestimmte Daten abfragen - anschließend im DBGrid anzeigen und auch verändern?

    hm, ist ein langes Thema.

    Du kannst, wenn die Datenstruktur nicht allzu komplex ist, eine TTable nehmen und mit der Eigenschaft Filter die Daten eingrenzen. Dann kannst du die Daten auch im DBGrid ändern.

    Bedenke, dass aber jede Instanz deiner Anwendung dann die Tabelle ändern kann. Und das gleichzeitig. 10 User == 10 Anwendugnsinstanzen = 9 Probleme. Der eine überschreibt die Änderungen des anderen. Das leidige Thema bei Datenbanken also.

    Oder wie wird das sonst gemacht?

    Vom Prinzip her ist das natürlich eine Frage der Infrastruktur eines Unternehmens, von den vorhandenen Datenbanksystemen und den Warehouse- Prinzipien eine Unternehmens.
    Sollte die Möglichkeit bestehen, dass mehere Anwender gleichzeitig auf einer Tabelle rumhacken, so ist trotzdem eine Datenkonsistenz zu gewährleisten. Das geht aber nicht bzw. nur schwierig, wenn du die Daten in einem DBGrid freigibst. Sogesehen solltest du dein Ansatz überdenken, wenn du dieses Problem noch nicht berücksichtigt hast.

    Es gibt bei diesen Problemen nicht "die" Lösung. SOndern mehr oder weniger auf die Bedürfnisse angepasste Lösungen.

    Wir schreiben zum Beispiel niemals von Anwendugen direkt in Datenbanken. Wir machen einen Umweg über Stored Prozedures. Dadurch ist gewähleistet, dass jederzeit Änderungen an Datenbanken nachvollzogen werden können.
    Die Daten werden gechached. Dadurch kann der User sich die Daten zurechtbiegen und erst dann, durch die Anwendugn optimiert, über Stored Procedures zurückschreiben.

    Desweiteren bekommt immer nur ein User die Schreibrechte für gewisse Inhalte einer Tabelle. Die Tabelle selbst wird aber nicht vollständig gesperrt, sodass mehere User verschiedene Dateninhalte bearbeiten können. Erst wenn ein User die Dateninhalte entsperrt, werden diese Daten in die DB zurückgespielt. Die anderen User, werden dadurch benachrichtigt, dass sich die Daten geändert haben und können Aktualisierungen vornehmen und auch diese Daten dann für sich sperren. Lesen können die Daten alle User. Sie sehen auch, wer gerade Schreibrechte für entsprechende Daten hat und wer noch so in diesen Daten liest.

    Diese ganze Thematik wird in einer umfangreichen Userverwaltung gekapselt.
    Wie gesagt, ist immer nur eine Frage des Aufwandes 😉

    [ Dieser Beitrag wurde am 02.02.2003 um 14:19 Uhr von AndreasW editiert. ]



  • Mal ein großes Dankeschön an AndreasW, für die ganze Mühe. Da ich bei mir nur eine Desktoplösung entwickel, hab ich nicht so das Problem mit Mehrfachzugriffen auf eine Tabelle.

    Danke,
    Thnaxy



  • keine ahnung, ob das zur frage passt:

    aber mach mal bei dem query die eigenschaft: CashedUpdate auf true und teste

    mfg


Anmelden zum Antworten