powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Можно в try except ......
11 сообщений из 11, страница 1 из 1
Можно в try except ......
    #32333663
Maybe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно в try except писать сразу несколько операторов adocommand.execute?
Надо, чтоб они или выполнились все, или ваще не выполнялись
Как быть?
...
Рейтинг: 0 / 0
Можно в try except ......
    #32333695
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написать-то можно, но вот Вашей задаче это не сильно поможет, т.к. часть команд все-таки выполнится. Для того, чтобы обеспечить "все или ничего", надо транзакцию делать (см. TADOConnection.BeginTrans)
...
Рейтинг: 0 / 0
Можно в try except ......
    #32333721
Maybe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, так и сделала, спасибо
...
Рейтинг: 0 / 0
Можно в try except ......
    #32333726
Maybe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все неправильно! :(
почитала поиск, оказывается, транзакции нельзя делать на клиенте
а как мне вот ето запихнуть в ХП?

ADOCommand1.CommandText :='INSERT INTO lt_main '+
'(d_id,z_count,note, date) VALUES (:p1,:p2,:p3,:p4)';
ADOCommand1.Parameters.ParamByName('p1').Value := edit_id.text;
ADOCommand1.Parameters.ParamByName('p2').Value := 0;
ADOCommand1.Parameters.ParamByName('p3').Value := edit_note.text;
ADOCommand1.Parameters.ParamByName('p4').Value := edit_date.text;
adocommand1.Execute;
ADOCommand1.Parameters.Clear;
ADOCommand1.CommandText :='INSERT INTO lt_zone '+
'(d_id,z_num,color_id, form_id) VALUES (:p1,:p2,:p3,:p4)';
ADOCommand1.Parameters.ParamByName('p1').Value := edit_id.text;
ii:=0;
for i:=1 to nnn do
begin
cb:=(findcomponent('combobox'+inttostr(i)) as tcombobox);
if ((trim(cb.text)='') or (not cb.visible)) then break;
inc(ii);
ADOCommand1.Parameters.ParamByName('p2').Value:=i;
ADOCommand1.Parameters.ParamByName('p3').Value:=cb.itemindex+1;
cb:=(findcomponent('combobox'+inttostr(i+12)) as tcombobox);
ADOCommand1.Parameters.ParamByName('p4').Value:=cb.itemindex+1;
adocommand1.Execute;
end;
ADOCommand2.CommandText:='update lt_main set z_count='+inttostr(ii)+' where d_id='+#39+edit_id.text+#39;
adocommand2.Execute;

я ж не знаю заранее, сколько параметров надо
я щас заплачу...
...
Рейтинг: 0 / 0
Можно в try except ......
    #32333749
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так приблизительно не катит?:
(я только мысль подаю, полную обработку транзакции - самостоятельно ;-))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('begin tran');

ADOQuery1.SQL.Add('INSERT INTO lt_main '+ 
'(d_id,z_count,note, date) VALUES (:p1_1,:p1_2,:p1_3,:p1_4)'; 
ADOQuery1.Parameters.ParamByName('p1_1').Value := edit_id.text; 
ADOQuery1.Parameters.ParamByName('p1_2').Value :=  0 ; 
ADOQuery1.Parameters.ParamByName('p1_3').Value := edit_note.text; 
ADOQuery1.Parameters.ParamByName('p1_4').Value := edit_date.text; 
ii:= 0 ; 
for i:= 1  to nnn do begin 
   cb:=(findcomponent('combobox'+inttostr(i)) as tcombobox); 
   if ((trim(cb.text)='') or (not cb.visible)) then break; 
   inc(ii); 
   ADOQuery1.SQL.Add('INSERT INTO lt_zone '+ 
	'(d_id,z_num,color_id, form_id) VALUES (:p'+ IntToStr(ii+ 1 )+'_1,'+
	':p'+ IntToStr(ii+ 1 )+'_2,:p'+ IntToStr(ii+ 1 )+'_3,:p'+ IntToStr(ii+ 1 )+'_4)'; 
   ADOQuery1.Parameters.ParamByName('p'+ IntToStr(ii+ 1 )+'_1').Value := edit_id.text; 
   ADOQuery1.Parameters.ParamByName('p'+ IntToStr(ii+ 1 )+'_2').Value:=i; 
   ADOQuery1.Parameters.ParamByName('p'+ IntToStr(ii+ 1 )+'_3').Value:=cb.itemindex+ 1 ; 
   cb:=(findcomponent('combobox'+inttostr(i+ 12 )) as tcombobox); 
   ADOQuery1.Parameters.ParamByName('p'+ IntToStr(ii+ 1 )+'_4').Value:=cb.itemindex+ 1 ; 
end; 
ADOQuery1.SQL.Add('update lt_main set z_count='+inttostr(ii)+' where d_id='+# 39 +edit_id.text+# 39 ); 
ADOQuery1.SQL.Add('commit tran');
ADOQuery1.ExecSQL;
...
Рейтинг: 0 / 0
Можно в try except ......
    #32333767
Maybe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, плач отменяется.. :)
интересно, вот не знала, что так бывает
спасибо
...
Рейтинг: 0 / 0
Можно в try except ......
    #32333829
Maybe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получается, даже update делать не надо
только вот что такое полная обработка транзакции?
может я где что пропустила?
...
Рейтинг: 0 / 0
Можно в try except ......
    #32334315
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для TADOxxx у меня все с транзакциями нормально работает. В MSDN вроде тоже никаких запретов нет. А AutoCommit вроде только в TSQLConnection упоминается...
...
Рейтинг: 0 / 0
Можно в try except ......
    #32334941
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вспомнил - естественно, надо обеспечивать отсутствие ситуаций, когда датасет считает, что данные приняты, а сервер их откинул из-за транзакции. Но это уже отдельная песня :-)
...
Рейтинг: 0 / 0
Можно в try except ......
    #32334962
Maybe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а когда он так считает?
...
Рейтинг: 0 / 0
Можно в try except ......
    #32335035
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это если открыл транзакцию, выполнил с датасетом какие-то действия, записал в базу, а потом сделал откат транзакции. После отката надо датасеты перечитывать. Но вроде это не Ваш случай...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Можно в try except ......
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]