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

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

Выполнение скриптов в 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


Наверх

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