![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Недоступный сервер MsSQL и KolEdb
Kirill © (2006-11-13 10:32:00)
DS := NewDataSource(sCurCon);
Окружаю этот код в try... except но стандартное сообщение об ошибке подключения возникает - прерывая выполнение всей программы.
Есть какие идеи почему try except для него не обрабатывается?
Kirill (2006-12-15 16:28:00) [1]Поборол проблему. В KolEbd err переместил в начало юнитов.
Также изменил функцию
function NewDataSource( const Params: String ): PDataSource;
begin
try
new( Result, Create );
if not Result.Initialize( Params ) then Result := nil;
except
Result := nil;
end;
end;
Kirill (2006-12-15 13:03:00) [2]Переопределил процедуру обработки ошибок
procedure MyDummyOleError( Result: HResult );
begin
Result := 0;
end;
Ошибка все равно возникает. И программа прерывается.
Galkov (2006-11-24 19:51:00) [3]Присвоить просто, и в своих кодах, Имхо
procedure MyDummyOleError( Result: HResult );
begin
end;
....
begin
OleError := MyDummyOleError;
....
мне даже кажется, что именно для этого сия переменная в юните (и в интерфейсе) и сидит. Чтобы чел мог поставить туда свое чего-нибудь, очень полезное...
Kirill (2006-11-24 16:45:00) [4]
> Ну типа, кто же не дает перекрыть без переделок данного
> модуля ... ИМХО
Как? Переопределить переменную OleError на свою процедуру?
Galkov (2006-11-17 12:01:00) [5]А разве не в этом модуле стоит ???
.....
// Error handling routines:
procedure CheckOLE( Result: HResult );
procedure DummyOleError( Result: HResult );
var OleError: procedure( Result: HResult ) = DummyOleError;
implementation
.....
Ну типа, кто же не дает перекрыть без переделок данного модуля ... ИМХО
Kirill (2006-11-17 10:17:00) [6]Нашел.
В этой строчке
if CheckOLE( fIDBInitialize.Initialize ) then
идет проверка.
в этоф функции CheckOLEидет вызов
OleError( Rslt );
и обработка передается
procedure DummyOleError( Result: HResult );
begin
MsgOK( 'OLE DB error ' + Int2Hex( Result, 8 ) );
Halt;
end;
Может немного переделать данный модуль под универсальность, а не под прерывание приложения?
Vladimir Kladov (2006-11-15 15:52:00) [7]Может, такое исключение отрабатывается так не по умолчанию, а внутри вызова, т.е. в самом OleDB? Попробуйте пошагово (F8) выполнить ту строчку, и поставить при этом break point внутрь своего обработчика исключения.
Kirill (2006-11-15 10:06:00) [8]Скачал сентябрьскую версию с сайта. Прописал
except on E: Exception do
slResultMail.Add(
Ошибка все равно возникает
Kirill (2006-11-14 17:20:00) [9]taddy
I wrote: I can connect to existing hosting without problem. But If I connect to dead server - I have error message. I want only hide this message, no more.
thaddy (2006-11-14 17:10:00) [10]http://support.microsoft.com/kb/306269/
and see my first reply.....
Kirill (2006-11-14 14:35:00) [11]Все равно выдает сообщение:
OLE DB error 80004005
Kirill (2006-11-14 13:52:00) [12]Не, а не сработало. Добавил сервер которого явно не существует. Все равно вылетело с ошибкой.
GMax (2006-11-14 00:36:00) [13]функциональность except не в system, а в sysutils.
а так как sysutils нету, то и except нету. зато есть в err
Kirill (2006-11-13 22:21:00) [14]Нет. Завтра попробую. А почему он необходим?
Vladimir Kladov (2006-11-13 16:26:00) [15]err подключен в uses?
Kirill (2006-11-13 14:51:00) [16]Для лучшего понимания - код:
for i := 1 to slConnections.Count do begin
sCurCon := slConnections.Items[i-1];
a := 0;
b := 0;
c := 0;
d := 0;
try
DS := NewDataSource(sCurCon);
SS := NewSession(DS);
QR := NewQuery(SS);
QR.Text := lsSQL.Text;
QR.Mode := rmReadOnly;
QR.Open;
while not QR.EOF do begin
a := a + QR.RField[3];
b := b + QR.RField[4];
c := c + QR.IField[5];
d := d + QR.IField[6];
QR.Next;
end;
slResultMail.Add('Сумма реализации: '+StrReplaceChar(Double2Str(a),'.',',')+' '#9' Сумма возврата: '+StrReplaceChar(Double2Str(b),'.',','));
slResultMail.Add('');
except
slResultMail.Add('Магазин ' + slMagazine.Items[i-1] + ' не доступен.');
end;
end;
Kirill (2006-11-13 14:48:00) [17]Не подключение есть. Только иногда когда сервер не доступен вылетает ошибка и программа прерывается. Хотя по функционалу try except должен сработать код после except.
Thaddy (2006-11-13 10:42:00) [18]This is because the exception is an db engine COM exception.
The most common reason is that you forgot to initialize the com libraries.
Call OleInit or coInitialize(nil) before you access the database and coUninitialize or OleUnInit when you are ready. (or in the initialization and finilization sections)
Another common reason is that there is an incorrect version of the db COM libraries or that there is no engine installed at all!
Ole DB depends on installed engines.