DBGRID lässt sich nicht editieren
-
Hallo,
ich hab mit den normalen Database, Datasource und Query eine normale Datenbank Anwendung, die über ODBC auf MySQL zugreift.
Soweit funzt auch alles, auch werden die Werte im DBGRID dargestellt.
Leider lassen sie sich nicht ändern.
Alle Komponenten sind jeweils ReadOnly=true.
In der Hilfe steht jedoch, das dataset=true sein soll. Der Zugriff klappt leider nicht:
DataSource1->DataSet->CanModify=true;
Aber eigentlich sollte Dataset bei jede Instantiierung schon gleich true sein.
Hab schon mehrfach das Projekt neu erstellt, bin ratlos, wäre für schnelle Hilfe sehr dankbar
MFG
-
Neutronizer schrieb:
Alle Komponenten sind jeweils ReadOnly=true
und was heisst ReadOnly auf deutsch?
-
Verstehe zwar gar nix... Aber, falls Du TQuery verwendest, mußt Du TQuery::RequestLive = true setzen.
-
Setz einfach mal ReadOnly auf false, dann kann man auch mehr als "NurLesen".
Gruß an alle
-
Nicht solange die Datenquelle schreibgeschützt ist: TQuery::RequestLive = true MUSS zwingend gesetzt werden.
-
Hallo,
ihr seid die besten es klappt jetzt!
Wie kann ich aber jetzt den DBGRID mit der eigentlichen Datenbank synchronizieren, also das der geänderte Wert im Grid auch in MySQL übernommen wird?
MFG
-
Am besten, du liest dir mal die Hilfe zu TQuery::RequestLive durch.
Nicht alle Datenbanken liefern wirklich eine veränderbare Ergebnismenge, aber dies kannst du du mit dem Property 'CanModify' abfragen.
Die SQL-Abfrage darf z.B. nur über EINE Tabelle gehen usw...Ansonsten müßtest du die Komponenten TUpdateSQL benutzen, um eigene SQL-Insert, Update und Delete-Anweisungen zu schreiben.
-
Wenn die SQL-Anweisung eines TQuery-Objekts eine allgemeine, mehrzeilige SELECT-Anweisung darstellt, kann RequestLive mit den Werten true oder false verwendet werden. Bei allen anderen SQL-Anweisungen, die von einem TQuery-Objekt ausgehen, sollte RequestLive nur auf false gesetzt werden. Zu diesen anderen SQL-Anweisungen zählen einzeilige SELECT-Anweisungen ohne Cursor (werden eher bei der Programmierung von Stored Procedures verwendet), DML-Anweisungen (Data Manipulation Language) ohne Cursor, wie z.B. UPDATE und DELETE, und DDL-Anweisungen (Data Definition Language), wie CREATE TABLE und DROP INDEX.
Hallo, ja der Fehler ist mir auch schon aufgefallen aber durch einfaches ändern von RequestLive nach einen SQL Statement kann man das ja abfangen.
das Problem ist, das ich nicht weiß ob CanModify True oder False ist! Ich habe auch kein Attribut dafür im Objektinspektor! Angelich wird ja bei der Instantieierung automatisch CanModify=true gesetzt. Wenn ich drauf zugreifen will, z.B. DataSource1->DataSet->CanModify=true; wird mit der Zugriff verweigert (Attribut ist published)
Weiß jemand weiter? Normal müsste das doch auch ohne TUpdateSQL gehen?
Da müsste ich ja eine extra Funktion für OnChange schreiben und noch den geänderten Spaltenname + Zeile herausfinden.
MFG
-
Du sollst die Eigenschaft ja auch nur auslesen, also im Programm:
bool bCanModify = DataSource1->DataSet->CanModify;Wenn nun in 'bCanModify' true steht, dann sollte die Aktualisierung eigentlich klappen, ansonsten hilft nur, was ich dir gestern geschrieben habe.
-
wie kann ich jetzt beim DBGrid die Fieldnamen direkt erhalten? Bei DBGrid1->SelectedField->AsString; bekomme ich ja nur den wert aus der einen zelle, nicht den aus der nachbarzelle. Hat jemand einen Tipp?
Brauch verschiedene Werte für eine SQL abfrage.
Danke
-
a) Was hat das mit dem ursprünglichen Problem zu tun?
Bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema. Danke!b) Sieh dir einfach mal die Hilfe zu DBGrid und dort besonders die Eigenschaften der Komponente.