Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1106941909
MadGhost
2005-01-28 22:51
2005.02.13
Как мне из Memo сделать наподобие терминалки?


1-1107178538
Fonda
2005-01-31 16:35
2005.02.13
Сортировка в Excel


1-1106773427
Iron Man
2005-01-27 00:03
2005.02.13
Параметры и dll фукции


1-1106747451
mmms
2005-01-26 16:50
2005.02.13
Мастера, подскажите, как удалить строку из StringGrid


6-1101585491
OneFragLeft
2004-11-27 22:58
2005.02.13
Адрес сетевухи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский