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

Вниз

Выполнение скриптов в MSSQL   Найти похожие ветки 

 
Maverick ©   (2005-10-06 12:33) [0]

Добрый день, мастера!
Встала такая задачка - подсоединиться к базе, запустить на выполнение скрипт, отсоединиться от базы.
предполагается что скрипт храниться на сервере.
Как это можно сделать?
и где лучше хранить скрипты - имеет ли смысл скрипты запихать в blob поля какой-нить таблицы?


 
stone ©   (2005-10-06 12:52) [1]


> Встала такая задачка - подсоединиться к базе, запустить
> на выполнение скрипт, отсоединиться от базы.
> предполагается что скрипт храниться на сервере.
> Как это можно сделать?

ADOConnection + ADOCommand (или ADODataset по необходимости)

> и где лучше хранить скрипты - имеет ли смысл скрипты запихать
> в blob поля какой-нить таблицы?

Можно и так. Смотри READTEXT в BOL


 
Seg   (2005-10-06 12:57) [2]

имеет ли смысл скрипты запихать в blob поля какой-нить таблицы?

Имеет смысл хранить шаблоны скриптов и параметры для создания динамических запросов.


 
Maverick ©   (2005-10-06 12:58) [3]

stone ©   (06.10.05 12:52) [1]

смысл в том, что бы отсоединиться от базы в момент выполнения скрипта..
такое вообще возможно?

можно конечно вызывать isql.exe на сервере с указанием скрипта..но это как то некрасиво да и доступ нужен для этого


 
Seg   (2005-10-06 13:09) [4]

смысл в том, что бы отсоединиться от базы в момент выполнения скрипта..
такое вообще возможно?


А как ты собираешься получать результат запроса?


 
stone ©   (2005-10-06 13:10) [5]


> Maverick ©   (06.10.05 12:58) [3]
> stone ©   (06.10.05 12:52) [1]
>
> смысл в том, что бы отсоединиться от базы в момент выполнения
> скрипта..
> такое вообще возможно?

а смысл?
вообще возможно:
создай Job c одним степом
подключайся к базе, получай текст скрипта и помещай его в степ этого joba
запускай job на выполнение и спокойно отключайся


 
Maverick ©   (2005-10-06 13:24) [6]

Seg   (06.10.05 13:09) [4]

результат можно получить посмотрев установленный статус в какой-нить таблице, который выставляется при успешном выполнеии скрипта

stone ©   (06.10.05 13:10) [5]

а как запустить job ?


 
stone ©   (2005-10-06 13:26) [7]

см. sp_start_job в BOL


 
Seg   (2005-10-06 13:26) [8]

Положи запрос в процедуру, запусти ее и отключайся.


 
Maverick ©   (2005-10-06 13:30) [9]

Seg   (06.10.05 13:26) [8]

а так не получиться любые же компоненты доступа к базам (я использую ADO) при запуске процедуры создают неявные (если самому не указывать) транзакции и они оборвуться если отконнектиться. хотя может я чего то не понимаю


 
Maverick ©   (2005-10-06 13:32) [10]

> stone ©

 Спасибо :)


 
Seg   (2005-10-06 13:35) [11]

Не знаю, как работают транзакции в SQL сервере, а в Оракле я бы в процедуре, после запроса, поставил бы commit и эта команда завершит транзакцию.


 
dreamse   (2005-10-07 09:37) [12]


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;


Удачи



Страницы: 1 вся ветка

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
9-1120747596
Kobik
2005-07-07 18:46
2005.11.20
проблема с DirectSound


1-1130440257
Дмитрий_05
2005-10-27 23:10
2005.11.20
Почему не запускается txt-файл из ShwllListView?


3-1128048706
Извращенец2
2005-09-30 06:51
2005.11.20
Interbase 5.6 жрет память


2-1130762140
Fast2
2005-10-31 15:35
2005.11.20
Как, во время выполнения приги, узнать колличество и имена полей


3-1128938761
Monk
2005-10-10 14:06
2005.11.20
Полоса прокрутки DBLookupCombo/ListBox