![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выполнение скриптов в MSSQL [D7, MSSQL]
Maverick © (2005-10-06 12:33:00)Добрый день, мастера!
Встала такая задачка - подсоединиться к базе, запустить на выполнение скрипт, отсоединиться от базы.
предполагается что скрипт храниться на сервере.
Как это можно сделать?
и где лучше хранить скрипты - имеет ли смысл скрипты запихать в blob поля какой-нить таблицы?
dreamse (2005-10-07 09:37:00) [1]
var
cmd: _Command;
Conn: _Connection;
Pars: Parameters;
RA: OleVariant;
rs: _Recordset;
n: Integer;
begin
Conn:= CreateComObject(CLASS_Connection) as _Connection;
Conn.ConnectionString:= main.ADOConnection1.ConnectionString;
Conn.Open(Conn.ConnectionString, '', '', Integer(adConnectUnspecified));
cmd:= CreateComObject(CLASS_Command) as _Command;
cmd.CommandType:= adCmdText;
cmd.Set_ActiveConnection(Conn);
cmd.CommandText:= SQL.Lines.Text; // Код SQL
memo1.Clear;
// ------------------------------------------------------------------------
try
screen.Cursor:=crSQLWait;
rs:= cmd.Execute(RA, 0, Integer(adCmdText));
except
on e:exception do
listerrors(e);
end;
screen.Cursor:=crDefault;
while rs <> nil do begin
for n:= 0 to (Conn.Errors.Count-1) do
Memo1.Lines.Add(Conn.Errors.Item[n].Description);
rs:= rs.NextRecordset(RA);
end;
if memo1.Lines.Text <> '' then
begin
bsSkinPanel5.Height:=71;
bsSkinSplitter1.Visible:=true;
end else
begin
bsSkinPanel5.Height:=1;
bsSkinSplitter1.Visible:=false;
bsSkinMessage1.MessageDlg('Запрос обработан , результат не был возвращён' + #13#10 +
'Для возвращения результата используйте модуль работы с отчётами', mtInformation, [mbOk], 0);
end;
cmd.Set_ActiveConnection(nil);
Conn.Close;
Pars:= nil;
cmd:= nil;
Conn:= nil;
end;
Удачи
Seg (2005-10-06 13:35:00) [2]Не знаю, как работают транзакции в SQL сервере, а в Оракле я бы в процедуре, после запроса, поставил бы commit и эта команда завершит транзакцию.
Maverick (2005-10-06 13:32:00) [3]> stone ©
Спасибо :)
Maverick (2005-10-06 13:30:00) [4]Seg (06.10.05 13:26) [8]
а так не получиться любые же компоненты доступа к базам (я использую ADO) при запуске процедуры создают неявные (если самому не указывать) транзакции и они оборвуться если отконнектиться. хотя может я чего то не понимаю
stone (2005-10-06 13:26:00) [5]см. sp_start_job в BOL
Seg (2005-10-06 13:26:00) [6]Положи запрос в процедуру, запусти ее и отключайся.
Maverick (2005-10-06 13:24:00) [7]Seg (06.10.05 13:09) [4]
результат можно получить посмотрев установленный статус в какой-нить таблице, который выставляется при успешном выполнеии скрипта
stone © (06.10.05 13:10) [5]
а как запустить job ?
stone (2005-10-06 13:10:00) [8]
> Maverick © (06.10.05 12:58) [3]
> stone © (06.10.05 12:52) [1]
>
> смысл в том, что бы отсоединиться от базы в момент выполнения
> скрипта..
> такое вообще возможно?
а смысл?
вообще возможно:
создай Job c одним степом
подключайся к базе, получай текст скрипта и помещай его в степ этого joba
запускай job на выполнение и спокойно отключайся
Seg (2005-10-06 13:09:00) [9]смысл в том, что бы отсоединиться от базы в момент выполнения скрипта..
такое вообще возможно?
А как ты собираешься получать результат запроса?
Maverick (2005-10-06 12:58:00) [10]stone © (06.10.05 12:52) [1]
смысл в том, что бы отсоединиться от базы в момент выполнения скрипта..
такое вообще возможно?
можно конечно вызывать isql.exe на сервере с указанием скрипта..но это как то некрасиво да и доступ нужен для этого
Seg (2005-10-06 12:57:00) [11]имеет ли смысл скрипты запихать в blob поля какой-нить таблицы?
Имеет смысл хранить шаблоны скриптов и параметры для создания динамических запросов.
stone (2005-10-06 12:52:00) [12]
> Встала такая задачка - подсоединиться к базе, запустить
> на выполнение скрипт, отсоединиться от базы.
> предполагается что скрипт храниться на сервере.
> Как это можно сделать?
ADOConnection + ADOCommand (или ADODataset по необходимости)
> и где лучше хранить скрипты - имеет ли смысл скрипты запихать
> в blob поля какой-нить таблицы?
Можно и так. Смотри READTEXT в BOL