Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

проблема 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]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо