![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при записи изменений в Oracle через dbExpress [D7]
Mefodiy © (2005-01-07 09:33:00)Для работы с 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-14 12:54:00) [1]так п.1 - зря, а п.3 - просто необходим
Mefodiy (2005-01-14 12:48:00) [2]>Desdechado ©
При использовании TSQLQuery возникает та же ошибка "Unable to find record. No key specified"
Desdechado (2005-01-14 11:14:00) [3]п.1 сделал зря
Mefodiy (2005-01-14 10:39:00) [4]Проблема решилась следующим образом:
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-11 11:04:00) [5]Боюсь, что до приведенного кода сохранения дело не доходит просто. Ты протрассируй программу в отладчике. Похоже, срабатывает событие на Post. А еще в запросе, скорее всего, отсутствует первичный или уникальный ключ. Поэтому "no key specified". А "read-only dataset" наверняка стоит где-нибудь в свойствах перечисленых компонентов и к однонаправленности TSQLQuery отношения не имеет.
Deniz (2005-01-11 07:14:00) [6]На Oracle не могу проверить :-( но, сделав небольшую форму для редактирования таблички в FireBird, все работало как надо, возможно у тебя что-то с правами или запрос из нередактируемой вьюхи или еще чего ... попробуй в новом проекте сделать с одной табличкой.
Mefodiy (2005-01-10 16:27:00) [7]>Deniz
Замена SQLQuery на SQLDataSet дает ту же ошибку
Deniz (2005-01-10 15:42:00) [8]Замени SQLQuery на SQLDataSet
Mefodiy (2005-01-10 13:55:00) [9]>Наталия ©
'select rowid,* from MyFile' не помогло
>Dell3r ©
У TSQLQuery нет свойства RequiestLive (оно есть у TQuery)
Dell3r (2005-01-08 10:47:00) [10]Попробуй в квери свойство RequiestLive поставить в труе.
говорят помогает. сам не пробовал.
Наталия (2005-01-08 06:44:00) [11]Я не знаток данных компонент, но в качестве предположения, возможно, нужно использовать запрос вида
'select rowid,* from MyFile'?