Форум: "Базы";
Текущий архив: 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.48 MB
Время: 0.039 c