Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

проблема 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.034 c
3-1091010344
Рооо
2004-07-28 14:25
2004.08.22
как показать нормально текстовой файл в DBGrid-e ?


4-1089552935
AlexZ
2004-07-11 17:35
2004.08.22
Выделить динамически память (много)


1-1092116702
Aldor_
2004-08-10 09:45
2004.08.22
Запускающий мое приложение bat-ник "виснет"


1-1091792491
Aldor_
2004-08-06 15:41
2004.08.22
Передача строк в/из функции dll


3-1090928811
Dolvet
2004-07-27 15:46
2004.08.22
Как урезать нужное колисечтво символов из числового поля