Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

проблема c updateSQL   Найти похожие ветки 

 
Вика   (2004-07-30 13:00) [0]

При вызове SQLQuery.CommitUpdates выдается ссобщение  (EdataBaseError )"MyDatabase: can"t perform this operation on a closed database"...Как открыть БД? Если в свойстве Connected TDataBase поставить True, то вызввается исключение. Подскажите как сделать?


 
Соловьев ©   (2004-07-30 13:04) [1]

лечить исключение.
Какая ошибка?


 
Sergey13 ©   (2004-07-30 13:08) [2]

Что хоть за база то?


 
Вика   (2004-07-30 13:33) [3]

Где-то в хелпе вычитала, что установка всойства connacted по умолчаниею всегда вызввает исключения, поэтому это надо делать программно типа : Database.Connected := true;

with DataModule.UpdateSQL.Query[ukModify] do
 begin
   ParamByName("xxx").asInteger := xxx;
   ParamByName("yyy").asInteger := yyy;
 end;

 DataModule.DataBase.Connected := True;
 with DataModule.SQLQuery do
 begin
   DataModule.Database.StartTransaction;
    try
      ApplyUpdates;
      DataModule.Database.Commit;
    except
      DataModule.Database.Rollback;
    raise;
    end;
    CommitUpdates;
   end;
 end;

Соответственно сам SQL запрос находится в UpdateSQL - ModifySQL,
а свойство UpdateObject SQLQuery установлено на UpdateSQl, свойство DataBaseName у SQLQuery установлено на DatabaseName компоненты Database.
При попытке применить изменения выдвется ошибка:
"SQLQuery: can"t perform operatiom dataset in not in insert or update mode"


 
Соловьев ©   (2004-07-30 13:36) [4]


>with DataModule.UpdateSQL.Query[ukModify] do
> begin
>   ParamByName("xxx").asInteger := xxx;
>   ParamByName("yyy").asInteger := yyy;
> end;
>
> DataModule.DataBase.Connected := True;
> with DataModule.SQLQuery do
> begin
>   DataModule.Database.StartTransaction;
>    try
>      ApplyUpdates;
>      DataModule.Database.Commit;
>    except
>      DataModule.Database.Rollback;
>    raise;
>    end;
>    CommitUpdates;
>   end;
>  end;

это все тот-же хелп? ужас какой....не читайте его
Какая СУБД?


 
Вика   (2004-07-30 13:40) [5]

Нет это к сожалению уже не хелп а часть моего кода, но что ужас, я согласна. Но я вообще в Delphi новичок и с БД в Delphi стокнулась впервые. СУБД -> БД MS Access.


 
Соловьев ©   (2004-07-30 13:42) [6]

для Ацесс используйте АДО


 
Sergey13 ©   (2004-07-30 13:46) [7]

2Вика
> DataModule.DataBase.Connected := True;
А такая строчка у вас перед каждым ApplyUpdates стоит что ли? Вроде достаточно одного раза в начале программы.


 
Вика   (2004-07-30 13:46) [8]

Я бы с удовольствием, если бы знала как, а разбираться нет времени, т.к. сроки поджимают. Дело в том, что с простым sql запросом через SQL.Add(...); потом SQl.ExecSQL все нормально пахало, проблемы начались каогда потребовалось использовать UpdateSQL для возможности откатывать изменения. Поэтому подскажите, плиз что в этом случае изменеть?


 
Соловьев ©   (2004-07-30 13:47) [9]

насколько мне известно, этого Ацес не позволяет делать.


 
Соловьев ©   (2004-07-30 13:48) [10]

В смысле откатывать изменения. Т.е. управлять там транзакциями Вам не дают


 
Вика   (2004-07-30 13:48) [11]

Я бы с удовольствием, если бы знала как, а разбираться нет времени - это я про ADO.

>> DataModule.DataBase.Connected := True;
>>А такая строчка у вас перед каждым ApplyUpdates стоит что ли? >>Вроде достаточно одного раза в начале программы.
У меня пока только один applyupdate, перед ним-то и стоит.


 
sniknik ©   (2004-07-30 13:53) [12]

> плиз что в этом случае изменеть?
все. начиная с BDE.

> все нормально пахало
неженский базар, мабуть ник просто женский, но тогда как со ...знал а... секс меньшиенства(???)

> В смысле откатывать изменения. Т.е. управлять там транзакциями Вам не дают
можно но есть ограничения. но вот с клиента управлять точно, плохая идея.


 
Sergey13 ©   (2004-07-30 13:54) [13]

Дык а данные то какие то читала уже. Значит оно уже было True. Закоментарь эту строчку и попробуй.


 
sniknik ©   (2004-07-30 13:56) [14]

> можно но есть ограничения.

Дополнительные сведения
Автоматический запуск транзакции невозможен. Чтобы начать транзакцию, ее необходимо явно запустить с помощью инструкции BEGIN TRANSACTION.

Допускается пять уровней вложения транзакций. Чтобы запустить вложенную транзакцию, воспользуйтесь инструкцией BEGIN TRANSACTION в контексте существующей транзакции.

Для присоединенных или связанных таблиц транзакции не поддерживаются.


 
Соловьев ©   (2004-07-30 14:13) [15]


> можно но есть ограничения. но вот с клиента управлять
> точно, плохая идея.

Плохая идея в Ацесе? Просто транзакциями управлять только клиент и может


 
sniknik ©   (2004-07-30 14:26) [16]

> Просто транзакциями управлять только клиент и может
может неправильно выразился, думал про различия, кто транзакцию выполняет сервер (ядро Jet) или клиент (в этом случае BDE).
даже без BDE c ADOConnection.BeginTrans; были проблемы в отличие от серверной начинаемой запросом. а добавить BDE их (проблем) совсем не оберешся.


 
roottim ©   (2004-07-30 14:45) [17]

SQLQuery.CachedUpdates надеюсь выставлено в True


 
Вика   (2004-07-30 15:25) [18]

Да SQLQuery.CachedUpdates поставлено в True. Я тут еще доки почитала и выяснилось, что для связки Delphi->Access действительно лучше использовать ADO, так что буду все переделывать :(((
Спасибо за ответы ;)))



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.034 c
6-1087790121
Сергей Г
2004-06-21 07:55
2004.08.22
E-Mail


1-1091616994
Гыук
2004-08-04 14:56
2004.08.22
Строки, файлы... оптимизировать?


1-1091776704
race1
2004-08-06 11:18
2004.08.22
файл для чтения


1-1091770949
Loki3D
2004-08-06 09:42
2004.08.22
перенос данных из Grid в MSWord документ


3-1090993331
revo
2004-07-28 09:42
2004.08.22
Создание промежуточного буфера





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский