Entwickler-Ecke

Datenbanken - DB-Navigator: einfügen, löschen etc. nicht aktiv!!!


peppi - Mo 02.12.02 12:11
Titel: DB-Navigator: einfügen, löschen etc. nicht aktiv!!!
Hi,

hab WIEDERMAL 'n Problem:

Hab mir einen DB-Navigator auf meine Form gelegt und auch vernünftig mit der DataSource verbunden. Zur Laufzeit wird dann eine Abfrage auf die DB ausgeführt und in einem Grid angezeigt. Mit dem Navigator kann ich zwar vor und zurück blätter usw. aber alle Knöpfe die eine Auswirkung auf die DB haben (insert, delete...) sind blind. Das Grid ist mit read only = false eingestellt also kann's daran ja nicht liegen. meiner DataBase Komponente hab ich den Parameter: OPEN MODE=READ/WRITE

zugewiesen. Also darf doch in der Datennbank geschrieben werden... aber warum sind dann die Knöpfe nicht aktiv??

Danke schonmal für eure Hilfe!!

LG Jana!


LCS - Mo 02.12.02 12:35

Hallo
damit die Datenmenge einer SQL editierbar ist, müssen auch einige andere Kriterien erfüllt sein.
Borland hat folgendes geschrieben:

Bei Abfragen, bei denen vor den Tabellennamen BDE-Datenbank-Aliasnamen angegeben wurden (dies ist in heterogenen Abfragen der Fall) und Abfragen, die über Paradox- oder dBASE-Tabellen ausgeführt wurden, werden von der BDE mit Local SQL analysiert. In diesem Fall bietet die BDE erweiterte Unterstützung für aktualisierbare Ergebnismengen, und zwar sowohl bei Abfragen über eine als auch über mehrere Tabellen. Bei Verwendung von Local SQL für eine Abfrage über eine einzelne Ansicht oder Tabelle wird nur dann eine bearbeitbare Ergebnismenge zurückgegeben, wenn die Abfrage keines der folgenden Elemente enthält:

Eine DISTINCT-Klausel in der SELECT-Anweisung
Verknüpfungen (Inner/Outer Joins oder UNION-Klausel)
Zusammenfassungsfunktionen mit oder ohne GROUP BY- oder HAVING-Klausel
Basistabellen oder Ansichten, die nicht aktualisierbar sind
Unterabfragen
ORDER BY-Klauseln, die nicht auf einem Index basieren

Über einen Remote-Datenbank-Server ausgeführte Abfragen werden vom Server analysiert. Wenn die Eigenschaft RequestLive auf True gesetzt wurde, muß sich die SQL-Anweisung an den von Local SQL definierten Standard sowie an alle vom Server auferlegten Einschränkungen halten, weil die BDE sich bei der Übermittlung von Änderungen an den Daten an die Tabelle darauf stützt. Bei einer Abfrage über eine einzelne Tabelle oder Ansicht wird nur dann eine bearbeitbare Ergebnismenge zurückgegeben, wenn diese keines der folgenden Elemente enthält:

Eine DISTINCT-Klausel in der SELECT-Anweisung
Zusammenfassungsfunktionen mit oder ohne GROUP BY- oder HAVING-Klausel
Verweise auf mehr als eine Basistabelle oder aktualisierbare Ansichten (Verknüpfungen)
Unterabfragen, die in der FROM-Klausel oder in anderen Tabellen auf die Tabelle verweisen

Bei Abfragen auf Paradox-Tabellen genügt also schon ein Order-By das nicht auf einem Index basiert und schon hast du eine Read-Only Datenmenge.

Gruss Lothar


peppi - Mo 02.12.02 13:05

Hi LCS,

ich frage eine Sybase-Datenbank ab. Hatte allerdings ein Order-by und KEINEN Index auf dem Feld nach dem ich sortiere. Den hab ich jetzt erstellt aber es geht trotzdem nicht. Kann ich die Datenmenge mit dsEdit oder so nicht zur Bearbeitung freigeben?? Ich weiß nicht genau wie ich das umsetzen muss :lol:

LG Jana!


LCS - Mo 02.12.02 13:27

Hi Jana,
mit Sybase hab ich leider gar keine Erfahrung, allerdings liefern alle SQL Server die ich kenne, eine aktualisierbare Datenmenge auch wenn das Order By keinen Index verwendet.
Mit dsEdit kannst du gar nix erreichen, denn um den Status dsEdit mit Hilfe der Methode Edit zu setzen (nix anderes macht ja der Navibutton) muss die Datenmenge ja erst mal aktualisierbar sein.
Wenn du über BDE auf die Datenbank zugreifst, könntest du nochmal kontrollieren, ob in deinem Alias oder in deinen DB-Parametern der Eintrag SQLQRYMODE=SERVER gesetzt ist. Damit werden alle SQLs direkt an den Server zu Bearbeitung weitergegeben. Ne andere Idee hab ich leider auch nicht mehr :(

Gruss Lothar


peppi - Mo 02.12.02 14:09

In den Parametern ist SQLQRYMODE=SERVER und in der BDE selber auch. Meintest du das das mit der Einstellung geht oder das da ne andere rein muss???


Udontknow - Mo 02.12.02 14:23

Hi!

Ja, ich weiss, es ist wieder eine dusselige Frage, aber : das TQuery-Objekt, das an der Datasource hängt, ist selber auch Readonly=False?

Cu, :)
Udontknow


peppi - Mo 02.12.02 14:44

ReadOnly bei der Query?? Im Quelltext hab ich da nix zugewiesen und im ObjectInspektor hab ich die Eigenschaft gar nich ... aber ich hab jetzt noch weiter im Netz gesucht und mein Fehler war ... BITTE NICHT SCHLAGEN :lol: ... ich hatte dieses RequestLive in der Query auf false ... he he ... schon schei*e wenn man sich noch net so auskennt :D

Aber danke trotzdem für eure Hilfe!

Bis zum nächsten Mal :lol:

LG Jana!


LCS - Mo 02.12.02 14:44

peppi hat folgendes geschrieben:
In den Parametern ist SQLQRYMODE=SERVER und in der BDE selber auch. Meintest du das das mit der Einstellung geht oder das da ne andere rein muss???

Nein, diese Einstellung sollte so drinstehen.
-------
Kam zu spät. Aber mittlerweile haut's ja hin