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

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

Недоступный сервер 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.


Наверх

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