![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проблема c updateSQL [D6]
Вика © (2004-07-30 13:00:00)При вызове SQLQuery.CommitUpdates выдается ссобщение (EdataBaseError )"MyDatabase: can't perform this operation on a closed database"...Как открыть БД? Если в свойстве Connected TDataBase поставить True, то вызввается исключение. Подскажите как сделать?
Вика (2004-07-30 15:25:00) [1]Да SQLQuery.CachedUpdates поставлено в True. Я тут еще доки почитала и выяснилось, что для связки Delphi->Access действительно лучше использовать ADO, так что буду все переделывать :(((
Спасибо за ответы ;)))
roottim (2004-07-30 14:45:00) [2]
SQLQuery.CachedUpdatesнадеюсь выставлено вTrue
sniknik (2004-07-30 14:26:00) [3]> Просто транзакциями управлять только клиент и может
может неправильно выразился, думал про различия, кто транзакцию выполняет сервер (ядро Jet) или клиент (в этом случае BDE).
даже без BDE c ADOConnection.BeginTrans; были проблемы в отличие от серверной начинаемой запросом. а добавить BDE их (проблем) совсем не оберешся.
Соловьев (2004-07-30 14:13:00) [4]
> можно но есть ограничения. но вот с клиента управлять
> точно, плохая идея.
Плохая идея в Ацесе? Просто транзакциями управлять только клиент и может
sniknik (2004-07-30 13:56:00) [5]> можно но есть ограничения.
Дополнительные сведения
Автоматический запуск транзакции невозможен. Чтобы начать транзакцию, ее необходимо явно запустить с помощью инструкции BEGIN TRANSACTION.
Допускается пять уровней вложения транзакций. Чтобы запустить вложенную транзакцию, воспользуйтесь инструкцией BEGIN TRANSACTION в контексте существующей транзакции.
Для присоединенных или связанных таблиц транзакции не поддерживаются.
Sergey13 (2004-07-30 13:54:00) [6]Дык а данные то какие то читала уже. Значит оно уже было True. Закоментарь эту строчку и попробуй.
sniknik (2004-07-30 13:53:00) [7]> плиз что в этом случае изменеть?
все. начиная с BDE.
> все нормально пахало
неженский базар, мабуть ник просто женский, но тогда как со ...знал а... секс меньшиенства(???)
> В смысле откатывать изменения. Т.е. управлять там транзакциями Вам не дают
можно но есть ограничения. но вот с клиента управлять точно, плохая идея.
Соловьев (2004-07-30 13:48:00) [8]В смысле откатывать изменения. Т.е. управлять там транзакциями Вам не дают
Вика (2004-07-30 13:48:00) [9]Я бы с удовольствием, если бы знала как, а разбираться нет времени- это я про ADO.
>> DataModule.DataBase.Connected := True;
>>А такая строчка у вас перед каждым ApplyUpdates стоит что ли? >>Вроде достаточно одного раза в начале программы.
У меня пока только один applyupdate, перед ним-то и стоит.
Соловьев (2004-07-30 13:47:00) [10]насколько мне известно, этого Ацес не позволяет делать.
Вика (2004-07-30 13:46:00) [11]Я бы с удовольствием, если бы знала как, а разбираться нет времени, т.к. сроки поджимают. Дело в том, что с простым sql запросом через SQL.Add(...); потом SQl.ExecSQL все нормально пахало, проблемы начались каогда потребовалось использовать UpdateSQL для возможности откатывать изменения. Поэтому подскажите, плиз что в этом случае изменеть?
Sergey13 (2004-07-30 13:46:00) [12]2Вика
> DataModule.DataBase.Connected := True;
А такая строчка у вас перед каждым ApplyUpdates стоит что ли? Вроде достаточно одного раза в начале программы.
Соловьев (2004-07-30 13:42:00) [13]для Ацесс используйте АДО
Вика (2004-07-30 13:40:00) [14]Нет это к сожалению уже не хелп а часть моего кода, но что ужас, я согласна. Но я вообще в Delphi новичок и с БД в Delphi стокнулась впервые. СУБД -> БД MS Access.
Соловьев (2004-07-30 13:36:00) [15]
>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:33:00) [16]Где-то в хелпе вычитала, что установка всойства 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"
Sergey13 (2004-07-30 13:08:00) [17]Что хоть за база то?
Соловьев (2004-07-30 13:04:00) [18]лечить исключение.
Какая ошибка?