Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Вниз

Недоступный сервер MsSQL и KolEdb   Найти похожие ветки 

 
Kirill ©   (2006-11-13 10:32) [0]

         DS := NewDataSource(sCurCon);

Окружаю этот код в try... except но стандартное сообщение об ошибке подключения возникает - прерывая выполнение всей программы.
Есть какие идеи почему try except для него не обрабатывается?


 
Thaddy   (2006-11-13 10:42) [1]

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.


 
Kirill ©   (2006-11-13 14:48) [2]

Не подключение есть. Только иногда когда сервер не доступен вылетает ошибка и программа прерывается. Хотя по функционалу try except должен сработать код после except.


 
Kirill ©   (2006-11-13 14:51) [3]

Для лучшего понимания - код:
   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;


 
Vladimir Kladov   (2006-11-13 16:26) [4]

err подключен в uses?


 
Kirill ©   (2006-11-13 22:21) [5]

Нет. Завтра попробую. А почему он необходим?


 
GMax   (2006-11-14 00:36) [6]

функциональность except не в system, а в sysutils.
а так как sysutils нету, то и except нету. зато есть в err


 
Kirill ©   (2006-11-14 13:52) [7]

Не, а не сработало. Добавил сервер которого явно не существует. Все равно вылетело с ошибкой.


 
Kirill ©   (2006-11-14 14:35) [8]

Все равно выдает сообщение:
OLE DB error 80004005


 
thaddy   (2006-11-14 17:10) [9]

http://support.microsoft.com/kb/306269/

and see my first reply.....


 
Kirill ©   (2006-11-14 17:20) [10]

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.


 
Kirill ©   (2006-11-15 10:06) [11]

Скачал сентябрьскую версию с сайта. Прописал
     except on E: Exception do
         slResultMail.Add(

Ошибка все равно возникает


 
Vladimir Kladov   (2006-11-15 15:52) [12]

Может, такое исключение отрабатывается так не по умолчанию, а внутри вызова, т.е. в самом OleDB? Попробуйте пошагово (F8) выполнить ту строчку, и поставить при этом break point внутрь своего обработчика исключения.


 
Kirill ©   (2006-11-17 10:17) [13]

Нашел.
В этой строчке
   if CheckOLE( fIDBInitialize.Initialize ) then

идет проверка.
в этоф функции CheckOLE идет вызов
   OleError( Rslt );
и обработка передается
procedure DummyOleError( Result: HResult );
begin
 MsgOK( "OLE DB error " + Int2Hex( Result, 8 ) );
 Halt;
end;

Может немного переделать данный модуль под универсальность, а не под прерывание приложения?


 
Galkov ©   (2006-11-17 12:01) [14]

А разве не в этом модуле стоит ???
.....
// Error handling routines:

procedure CheckOLE( Result: HResult );
procedure DummyOleError( Result: HResult );
var OleError: procedure( Result: HResult ) = DummyOleError;

implementation
.....


Ну типа, кто же не дает перекрыть без переделок данного модуля ... ИМХО


 
Kirill ©   (2006-11-24 16:45) [15]


> Ну типа, кто же не дает перекрыть без переделок данного
> модуля ... ИМХО

Как? Переопределить переменную OleError на свою процедуру?


 
Galkov ©   (2006-11-24 19:51) [16]

Присвоить просто, и в своих кодах, Имхо

procedure MyDummyOleError( Result: HResult );
begin
end;
....
begin
 OleError := MyDummyOleError;
 ....


мне даже кажется, что именно для этого сия переменная в юните (и в интерфейсе) и сидит. Чтобы чел мог поставить туда свое чего-нибудь, очень полезное...


 
Kirill ©   (2006-12-15 13:03) [17]

Переопределил процедуру обработки ошибок
procedure MyDummyOleError( Result: HResult );
begin
 Result := 0;
end;

Ошибка все равно возникает. И программа прерывается.


 
Kirill ©   (2006-12-15 16:28) [18]

Поборол проблему. В 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;



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

Форум: "KOL";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.047 c
2-1183612932
DelphiN!
2007-07-05 09:22
2007.07.29
Получить номер строки в проекте по адресу при AV


2-1183100453
met
2007-06-29 11:00
2007.07.29
Мастера!Помогите пожалуйста


1-1179460419
pirate
2007-05-18 07:53
2007.07.29
Скорость вычисления функции оставляет желать..


15-1183462782
avsam
2007-07-03 15:39
2007.07.29
Плагин для Delphi 6 линии begin end


15-1183034579
THandle
2007-06-28 16:42
2007.07.29
C++ Builder 2006 проблема





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский