Форум: "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