Jak edytować dane w DBGrid?

0

Witam czytających ten post!
Mam - cóżby innego - pytanie. Muszę napisać interfejs obsługujący bazę danych. Nigdy wcześniej się tym nie zajmowałem i natknąłem się na taki problem: wstawiam tabelę DBGrid, ustawiam własność ReadOnly na false, w Options dgEditing na true i dalej nie mogę pisać w tabeli. Tzn. klikam na komórkę, pojawia się kursor do wprowadzania tekstu ale jak naciskam klawisze to nic się nie pojawia. W helpie znalazłem radę że aby edytować zawartość komórek należy ustawić jeszcze własność CanModify elementu(?) Dataset na true. Tylko mam mały problem: co to jest ten dataset? Czy to jest - tak jak myślę - element którego właściwości widać w DBGrid/DataSource/DataSet/... (w moim wypadku jest to IBQuery)? Jeśli tak to nie mogę ustawić własności CanModify na true bo wypisuje mi że jest to wartość tylko do odczytu.
Mam na formie oprócz DBGrid elementy (z Interbasa, bo w tym programie robię bazę) IBDatabase, IBTransaction, IBSql oraz IBQuery i DataSource. Proszę o radę...

0

Dane z tabeli bazy danych pobierasz za pomocą komponentu IBQuery, więc musisz tak sformułować zapytanie, aby rezultatem wykonania zapytania był live result set, czyli zestaw danych, który można edytować. Przeczytaj w pliku pomocy temat: Restrictions on live queries.

Ponadto, skoro korzystasz z InterBase-a, być może możliwość edycji jest zablokowana na samym serwerze bazodanowym?

0

OK. Odpowiadam sam sobie - dla potomnych mający ten sam problem. Trzeba było umieścić komponent IBUpdateSQL z tej samej zakładki, i w IBQuery ustawić UpdateObject właśnie na IBUpdateSQL.

0

OK. Odpowiadam sam sobie - dla potomnych mający ten sam problem. Trzeba było umieścić komponent IBUpdateSQL z tej samej zakładki, i w IBQuery ustawić UpdateObject właśnie na IBUpdateSQL.

Widzisz jakie to proste.
A tak poza tym, to jak używałeś samego IBQuery to żeby wyświetlić dane w DBGrid to Twoje zapytanie było selectem. A zatem nie miałeś żadnych możliwości modyfikacji danych na samym IBQuery. No chyba, że wiedziałbyś który element tablicy poprawiasz i stworzyłbyś nowe zapytanie w IBQuery ale z upadatem.
A tak to masz IBUpdateSQL, który wykonuje inserty, update-y oraz delete-y.

Wszystko co napisałeś w pierwszym poście byłoby OK gdybyś jako DataSet użył IBTable (wtedy pobierasz wszystkie rekordy). Wtedy dodajesz, modyfikujesz lub usuwasz dane bezpośrednio.

1 użytkowników online, w tym zalogowanych: 0, gości: 1