Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > DBGrid не входит в режим редактирования


Автор: ksili 27.3.2008, 14:08
Связка
Код

DataSet1->Database = Database1
DataSource1->DataSet = DataSet1
DBGrid1->DataSource = DataSource1
настроена нормально. Таблица отображается как надо. Но почему-то не редактируется, хотя
Код

DataSource1->AutoEdit = true
DBGrid1->ReadOnly = false
DataSet1->AutoCommit = true
DBGrid1->Options->dgEditing = true
DBGrid1->Options->dgAlwaysShowEditor = true

Никаких исключений не просходит, просто не редактируется

Автор: korian 27.3.2008, 14:18
update sql заполнен?

Автор: ksili 27.3.2008, 14:23
Вот сейчас начал заполнять. И редактирование появилось!!! Заполняю так:
Код

update AuthOut set LOGIN=:P_LOGIN, OUTPHONE=:P_OUTPHONE

Причем вот эти =:P_LOGIN и :P_OUTPHONE от фонаря, потому что где то так видел. из-за этого после перехода на другую строку происходит исключение. Что именно надо писать вместо этих параметров?

Автор: korian 27.3.2008, 14:34
ммм, я не знаю как оно там у вас, под FireBird'ом примерно так:
Код

UPDATE VIEW_GENERAL
SET 
    DATA = :DATA,
    COMMENT = :COMMENT,
WHERE
    ID_KEY = :OLD_ID_KEY

я так понимаю, что :DATA - это название FieldName в программе с ":"

Автор: ksili 27.3.2008, 14:40
Я тоже под FireBird'ом.
Нашёл, что можно прописать в 
DataSet1->AutoUpdateOptions->ParamsToFieldLinks = 
Код

LOGIN=P_LOGIN
PASSWORD=P_PASSWORD
OUTPHONE=P_OUTPHONE

Исключения уже не происходит, но при изменении какого-нибудь поля LOGIN, логины всех записей в таблице просто заnullяются.
при указании KeyField что-то ругается при компиляции, что не может сгенерировать RefreshSQL, т.к. нет полей для таблицы AuthOut

Автор: korian 27.3.2008, 14:44
если под FireBird'ом, то там вообще проблем нету, он сам может генерировать Update, Delete, Refresh запросыы по Select запросу.
в большинстве случаев, их чутка подправить (а иногда и править не надо) и все.

Автор: ksili 27.3.2008, 14:48
Я пытался вызвать GenerateSQLs(), но возникает исключение

Добавлено через 3 минуты и 32 секунды
пишет
unable to generate DeleteSQL because fields for "AuthOut" do not exists in dataset, хотя в датасет добавлены все поля таблицы и ещё два поля lookup

Вообще здесь играет роль регистр, а то я привык, что в sql регистр неважен?

Автор: korian 27.3.2008, 14:58
Цитата(ksili @  27.3.2008,  13:48 Найти цитируемый пост)
Вообще здесь играет роль регистр, а то я привык, что в sql регистр неважен? 

это от базы зависит и от настроек, по уполчанию регистр не важен.

Цитата(ksili @  27.3.2008,  13:48 Найти цитируемый пост)
unable to generate DeleteSQL because fields for "AuthOut" do not exists in dataset

запрос DeleteSQL пуст перед генерацией?
и покажите чтоли Select запрос и как таблица в базе выглядит.

Автор: ksili 27.3.2008, 15:01
SelectSQL:
Код

select * from AuthOut

таблица
Код

CREATE TABLE AUTHOUT (
    AUTHID       INTEGER NOT NULL,
    LOGIN        VARCHAR(80),
    "PASSWORD"   VARCHAR(80),
    OUTPHONE     INTEGER NOT NULL,
    OUTANI       INTEGER NOT NULL,
    MAXCHAN      INTEGER,
    DESCRIPTION  VARCHAR(50)
);

CREATE GENERATOR GEN_AUTHOUT_ID;

ALTER TABLE AUTHOUT ADD CONSTRAINT PK_AUTHOUT PRIMARY KEY (AUTHID);

ALTER TABLE AUTHOUT ADD CONSTRAINT FK_AUTHOUT_1 FOREIGN KEY (OUTPHONE) REFERENCES TRANSFORMRULES (TRANSFORMID);
ALTER TABLE AUTHOUT ADD CONSTRAINT FK_AUTHOUT_2 FOREIGN KEY (OUTANI) REFERENCES TRANSFORMRULES (TRANSFORMID);


Поле AUTHID в таблице не отображаю, вместо OUTPHONE и OUTANI пытаюсь приделать lookup'ы

Автор: korian 27.3.2008, 15:09
я так понимаю надо полный SQL запрос писать (* - не катит).
а лучше выбрать нужную таблицу и нажать Generate SQL
потом переходим на TAB Generate modify SQLs, выбираем ID, выбираем изменяемые поля и Generate SQLs

Добавлено через 2 минуты и 18 секунд
хотя у меня генерирует и со *...

Добавлено через 4 минуты и 30 секунд
Цитата(ksili @  27.3.2008,  14:01 Найти цитируемый пост)
Поле AUTHID в таблице не отображаю

это вы делаете по средствам DBGrid'а?
если по средствам DataSet - тогда все правильно, что нифига не работает  smile 

Автор: ksili 27.3.2008, 15:14
Везде пишут нажать GenerateSQLs ))) Но я чота не нашёл такой кнопки  smile  Где эта магическая кнопка?

Пока вручную пишу UpdateSQL:
Код

update AuthOut set 
LOGIN=:P_LOGIN,
"PASSWORD"=:P_PASSWORD

where AUTHID=:P_AUTHID

предварительно прописав пееменные в DataSet1->AutoUpdateOptions->ParamsToFieldLinks. Исключений уже нету. Но в базе почему то не сохраняется, хотя в гриде сохраняется.


Цитата(korian @  27.3.2008,  19:09 Найти цитируемый пост)
я так понимаю надо полный SQL запрос писать (* - не катит).

попробую все поля прописать

Добавлено через 4 минуты и 32 секунды
сделал селект без звёздочки. Программно вызываю GenerateSQLs, теперь не взникает исключения (что он там генерит не проверял). Но в базе пока всё равно не сохраняется

Автор: korian 27.3.2008, 15:20
магическая кнопка на рисунке  smile 

Автор: korian 27.3.2008, 15:22
и еще одна магическая кнопка

Автор: ksili 27.3.2008, 15:26
У меня такого окошка нигде нету. Наверно это фича Делфи

Добавлено через 8 минут и 21 секунду
После моего программного GenerateSQLs UpdateSQL не изменяется (свойства AutoRewriteSQLs и CanChangeSQLs установлены). Наверно это из-за того, что я не указал KeyFields. Но если его указать, то при GenerateSQLs возникает все та же ошибка unable to generate RefreshSQL because fields for "AuthOut" do not exists in dataset

Автор: ksili 27.3.2008, 16:04
Стал сохранять, когда имя таблицы во всех местах привёл  верхнему регистру  smile 

Автор: korian 27.3.2008, 16:17
Цитата(ksili @  27.3.2008,  14:26 Найти цитируемый пост)
У меня такого окошка нигде нету. Наверно это фича Делфи

нет, это фича компонентов FIBPlus
вы TpFIBDataSet используете или что-то другое?

Автор: ksili 27.3.2008, 16:30
Цитата(korian @  27.3.2008,  20:17 Найти цитируемый пост)
вы TpFIBDataSet используете или что-то другое?

Да, я использую их. Куда надо кликнуть, чтобы появился это редактор SQL?

Автор: korian 27.3.2008, 16:38
рисунок

Автор: ksili 27.3.2008, 16:42
У меня этой кнопки нет. Версия FIBPlus 6.5.0
Да если б у меня это было, я бы уже давно нашёл. Все эти свойства я уже на миллион раз просмотрел и истыкал  smile 

Автор: korian 27.3.2008, 18:28
ну не знаю... странно  smile 
у меня FIBPLUS 6.25

Автор: ksili 28.3.2008, 11:00
А вы их регистрировали? Деньги за них платили? Я - нет

Автор: korian 28.3.2008, 13:23
Цитата(ksili @  28.3.2008,  10:00 Найти цитируемый пост)
А вы их регистрировали? Деньги за них платили? Я - нет 

неа, трил версия (выдается диалог при запуске .exe)

Автор: ksili 28.3.2008, 13:26
Всё-таки мне кажется, что это особенность версии для Delphi. У них и в доке примеры и скриншоты для Delphi.

Автор: korian 28.3.2008, 13:42
Цитата(ksili @  28.3.2008,  12:26 Найти цитируемый пост)
Всё-таки мне кажется, что это особенность версии для Delphi. У них и в доке примеры и скриншоты для Delphi. 

ну у меня ж BCB6 =) так что делфи тут не при чем.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)