Форум: "Базы";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
ВнизОшибка при записи изменений в Oracle через dbExpress Найти похожие ветки
← →
Mefodiy (2005-01-07 09:33) [0]Для работы с Oracle в режиме read-write использую стандартную цепочку компонент:
TSQLConnection<--TSQLQuery<--TDataSetProvider<--TClientDataSet<--TDataSource<--TDBGrid
Для вывода данных на экран прописал на нажатие кнопки:
with SQLQuery1 do
begin
Close;
SQL.Clear;
SQL.Add("select * from MyFile");
Open;
end;
DBGrid нормально отображает данные таблицы.
На нажатие другой кнопки прописал:
var Translnfo: TTransactionDesc;
...
Translnfo.TransactionID := 1;
Translnfo.IsolationLevel := xilREADCOMMITTED;
with SQLConnection1 do
begin
if (ClientDataSet1.ChangeCount > 0) and
(Not InTransaction) then
begin
StartTransaction(Translnfo);
ClientDataSet1.ApplyUpdates(0);
try
Commit(Translnfo);
except
Rollback(Translnfo);
end;
end;
end;
Изменяю данные в DBGrid. Нажимаю вторую кнопку, чтобы сохранить данные в базе и получаю сначала
"SQLQuery1: Cannot modify a read-only dataset"
а затем
"Unable to find record. No key specified"
Понимаю, что SQLQuery1 сам по себе дает однонаправленный и не подлежащий редактированию набор данных. Но, как пишут во всех статьях по dbExpress ее сочетание с TDataSetProvider и TClientDataSet должно обеспечивать полноценный режим read-write.
Перепробовал всевозможное сочетание различных параметров. Все бесполезно. Видимо в чем то принципиальная ошибка.
Помогите советом. Спасибо.
← →
Наталия © (2005-01-08 06:44) [1]Я не знаток данных компонент, но в качестве предположения, возможно, нужно использовать запрос вида
"select rowid,* from MyFile"
?
← →
Dell3r © (2005-01-08 10:47) [2]Попробуй в квери свойство RequiestLive поставить в труе.
говорят помогает. сам не пробовал.
← →
Mefodiy (2005-01-10 13:55) [3]>Наталия ©
"select rowid,* from MyFile" не помогло
>Dell3r ©
У TSQLQuery нет свойства RequiestLive (оно есть у TQuery)
← →
Deniz (2005-01-10 15:42) [4]Замени SQLQuery на SQLDataSet
← →
Mefodiy (2005-01-10 16:27) [5]>Deniz
Замена SQLQuery на SQLDataSet дает ту же ошибку
← →
Deniz (2005-01-11 07:14) [6]На Oracle не могу проверить :-( но, сделав небольшую форму для редактирования таблички в FireBird, все работало как надо, возможно у тебя что-то с правами или запрос из нередактируемой вьюхи или еще чего ... попробуй в новом проекте сделать с одной табличкой.
← →
Desdechado © (2005-01-11 11:04) [7]Боюсь, что до приведенного кода сохранения дело не доходит просто. Ты протрассируй программу в отладчике. Похоже, срабатывает событие на Post. А еще в запросе, скорее всего, отсутствует первичный или уникальный ключ. Поэтому "no key specified". А "read-only dataset" наверняка стоит где-нибудь в свойствах перечисленых компонентов и к однонаправленности TSQLQuery отношения не имеет.
← →
Mefodiy (2005-01-14 10:39) [8]Проблема решилась следующим образом:
1.Поменял TSQLQuery на TSQLTable.
2.В TDataSetProvider стояло ResolveToDataSet := True, а нужно было False (отсюда ошибка "Cannot modify a read-only dataset")
3.В таблицу добавил Primary Key, т.к. его не было (отсюда ошибка "Unable to find record. No key specified")
Всем спасибо.
← →
Desdechado © (2005-01-14 11:14) [9]п.1 сделал зря
← →
Mefodiy (2005-01-14 12:48) [10]>Desdechado ©
При использовании TSQLQuery возникает та же ошибка "Unable to find record. No key specified"
← →
ЮЮ © (2005-01-14 12:54) [11]так п.1 - зря, а п.3 - просто необходим
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c