![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить результат запроса ADOQuery ? [D6, MSSQL]
dreamse © (2005-10-05 11:22:00)SQL код в SyntaxMemo1 :
backup database mybase
TO disk = 'c:\Back.bak'
Код в Delphi :
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:=SyntaxMemo1.Lines.Text;
try
ADOQuery1.ExecSQL;
except
on e:exception do
listerrors(e); // Обработчик ошибки
try Except обрабатываються синтаксические ошибки при создани запроса а вот как вернуть ответ от MS SQL server'a ?
В данном случае должно возвратиться сообщение о успешной или не успешной операции ( + время + размер и пр. )
Компоненты :
ADOQuery
ADOConnection
Сам код обрабатываеться нормально.
dreamse (2005-10-05 13:29:00) [1]> sniknik
Спасибо , разобрался , всё работает
Нужно было вставить : ComObj
dreamse (2005-10-05 12:58:00) [2]Ругаеться на CreateComObject может что в uses прописать забыл ?
sniknik (2005-10-05 12:39:00) [3]при локальном курсоре посылается не все, чтото не посылает сообщений вообше... (еще возможна путаница в "обертке" ADO)
но
backup database mybase
TO disk = 'c:\Back.bak'
точно посылает (делал тестовую прогу когдато, для другого, сейчас проверил бекап) выдает
Processed 4712 pages for database 'hl', file 'hotline_Data' on file 14.
Processed 1 pages for database 'hl', file 'hotline_Log' on file 14.
BACKUP DATABASE successfully processed 4713 pages in 2.935 seconds (13.152 MB/sec).
(база моя естественно подтавлена, самую маленькую выбрал)
можеш сам проверить. код (один из возможных), взял тот где исключены(должны бы) всякие случайности в виде настроек/обертки...
uses ..., ADOInt;
TForm1 = class(TForm)
...
Memo1: TMemo;
...
end;
procedure TForm1.Button1Click(Sender: TObject);
var
cmd: _Command;
Conn: _Connection;
Pars: Parameters;
RA: OleVariant;
rs: _Recordset;
n: Integer;
begin
Conn:= CreateComObject(CLASS_Connection) as _Connection;
Conn.ConnectionString:= 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False';
Conn.Open(Conn.ConnectionString, '', '', Integer(adConnectUnspecified));
cmd:= CreateComObject(CLASS_Command) as _Command;
cmd.CommandType:= adCmdText;
cmd.Set_ActiveConnection(Conn);
cmd.CommandText:= 'backup database mybase'#10#13+
'TO disk = ''c:\Back.bak''';
rs:= cmd.Execute(RA, 0, Integer(adCmdText));
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;
cmd.Set_ActiveConnection(nil);
Conn.Close;
Pars:= nil;
cmd:= nil;
Conn:= nil;
end;
должно сработать "as is".
dreamse (2005-10-05 12:11:00) [4]> sniknik
Посмотрел ,
ADOConnection1.Errors.count = 0
Ничего нет :(
sniknik (2005-10-05 12:09:00) [5]dreamse (05.10.05 11:49) [2]
> Добавление обработчика в :
> ADOConnectionInfoMessage
как именно "обрабытавал"?
кроме всего поставь у квери CursorLocation:= clUseServer;
ANB © (05.10.05 11:54) [3]
> - при чем тут эти обработчики ?
ну один то точно причем. ;) в нем возвращаются все сообщения конекта, в том числе и ошибки.
ANB (2005-10-05 11:54:00) [6]
> dreamse (05.10.05 11:49) [2]
- при чем тут эти обработчики ? В errors лежат все сообщения от сервера, в том числе и не ошибки. Заполняется полностью после выполнения запроса.
dreamse (2005-10-05 11:49:00) [7]> sniknik
Добавление обработчика в :
ADOConnectionInfoMessage
ADOConnectionExecuteComplete
ADOConnectionRollbackTransComplete
ADOConnectionWillExecute
ADOConnectionCommitTransComplete
ADOConnectionBeginTransComplete
Не принесло никакого результата
sniknik (2005-10-05 11:35:00) [8]посмотри в ADOConnection1.Errors, информационные сообщения это те же ошибки, только с пониженным статусом(кодом).