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

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

MSSQL 7 i transacchiya [D5]


Mamed ©   (2005-02-08 14:13:00) 

U menya na Win95 kompyuteri rabotaet MSSQL 7 Desktop Edition.
V Programme ya ispolzuyu ADO componenti.Kod priblizitelno takoy
var Q:TAdoQuery;
.......

With Q Do
Begin
 Connection.BeginTrans;
 Active:=false;
 SQL.Append('SELECT FIELD1 FROM TABLE1');
 Active:=True;
 Append;
 FieldByname('FIELD1').asstring:='FFF1';
 Post;
 Active:=false;
 SQL.Append('SELECT FIELD2 FROM TABLE2');
 Active:=True;
 Append;
 FieldByname('FIELD2').asstring:='FFF2';
 Post;
 Active:=false;
 SQL.Append('SELECT FIELD3 FROM TABLE3');
 Active:=True;
 Append;
 FieldByname('FIELD3').asstring:='FFF3';
 Post;
 Connection.Committrans;
End;
Posle Takogo koda Tolko poslednoe izmenenie iz trannsactiona vipolyaetsya ostalnie ostayetsya.Toje samoy Proga S MSSQL 2000 rabotaet normalno.


Mamed   (2005-02-09 14:03:00) [1]

Ispravil bag:sql7Sp4 zapustil na servere i vse rabotal tak kak nado)


Nikolay M.   (2005-02-09 11:45:00) [2]


> Тогда уж вы Вы :)

Ничего, что я на Вы и по фамилии? :)


> псевдовременная таблица - это случайно не на клиенте

Нет. Имею ввиду, что временная таблица - это обычная # или ##, а псевдовременная - это обычная таблица, постоянно существующая на сервере, в которую клиенты пишут некоторые подготовительные данные + свой @@SPID для последующего выполнения ХП.


> И как её, интересно, передать в XP?

А в ХП можно передать, например, XML, если это требуется.


ЮЮ   (2005-02-09 11:30:00) [3]

>В сочетании с (псевдо)временными таблицами

Тогда уж вы Вы :)
псевдовременная таблица - это случайно не на клиенте, которому, не дело, с идеологической точки зрения, заниматься данными - для этого сервер есть? И как её, интересно, передать в XP?


Nikolay M.   (2005-02-09 11:21:00) [4]


> ЮЮ ©   (09.02.05 10:50) [3]
> >Nikolay M. ©   (09.02.05 09:58) [2]
>
> да что ты? :) без try ... except, безусловно, нехорошо.

Я не что, я кто.
Да хоть и с трай-ексепт. Во-первых, с идеологической точки зрения, пусть за целостность данных отвечает сервер, а не клиент. А, во-вторых, что, если дисконнект с сервером или еще какие глюки сети?


> И каким, есле не на клиенте, образом можно выполнить пакет
> для вставки/корректировки/удаления данных?

Хранимые процедуры на то есть. В сочетании с (псевдо)временными таблицами или XML можно добиться желаемого.


ЮЮ   (2005-02-09 10:50:00) [5]

>Nikolay M. ©   (09.02.05 09:58) [2]

да что ты? :) без try ... except, безусловно, нехорошо.
Connection. XXXTrans, интересно, для чего в public вынесли?
И каким, есле не на клиенте, образом можно выполнить пакет для вставки/корректировки/удаления данных?


Nikolay M.   (2005-02-09 09:58:00) [6]


> ЮЮ ©   (09.02.05 05:39) [1]

Ой, не хорошо это - рулить транзакциями с клиента... Имхо.


ЮЮ   (2005-02-09 05:39:00) [7]

SQL.Append('SELECT FIELD1 FROM TABLE1');
...
SQL.Append('SELECT FIELD3 FROM TABLE3');

посмотри на результирующий SQL.Text :)

а почему вместо этого изврата, не написать просто

Connection.BeginTrans;
try
 Q.SQL.Text := 'INSERT INTO Table1(FIELD1) VALUES(:FIELD1)';
 Q.Parameters[0].Value := 'FFF1';
 Q.ExecSQL;
 ...
 Q.SQL.Text := 'INSERT INTO Table3(FIELD3) VALUES(:FIELD3)';
 Q.Parameters[0].Value := 'FFF3';
 Q.ExecSQL;
 Connection.Committrans;
except
 Connection.RollbackTrans;
end;

end;


Наверх

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