опубликован 02-11-2000 17:56 MSK
Проблема заключается в следующем:
Строится отчет при помощи Crystal Reports 8.0. В качестве SQL / ODBC источника данных выбирается хранимая процедура сервера InterBase 5.0. Процедура имеет входные параметры.
Созданный отчет должен включаться в приложение, написанное на Borland Delphi 5.0. при помощи модуля Crystal Reports Print Engine API через вызовы функций CRPE32.DLL, модуля CRDelphi.pas. Необходимо передать параметры в отчет. Для этого сначала нужно подключиться к серверу. Выполняется следующий код:var
RepNam:PChar;
JN:Word;
LogInfo : PELogOnInfo;
pDllName : array[0..255] of Char;
sServerName,
sDatabaseName,
sUserId,
sPassword,
sDllName : string;
PEOpenEngine;
RepNam := StrAlloc(80);
StrPCopy(RepNam, 'C:\Tafoil\Report\OneMes_Real.rpt');
JN := PEOpenPrintJob(RepNam);
if JN = 0 then
begin
ShowMessage('Ошибка открытия отчета');
end;
LogInfo.StructSize := SizeOf(PELogOnInfo);
sServerName := 'ALMET';
sDatabaseName := 'C:\Tafoil\BD\Tabl9.gdb';
sUserId := 'SYSDBA';
sPassword := '1';
sDllName := 'PDSODBC.DLL';
StrPCopy(@LogInfo.ServerName, sServerName);
StrPCopy(@LogInfo.DatabaseName, sDatabaseName);
StrPCopy(@LogInfo.UserID, sUserId);
StrPCopy(@LogInfo.Password, sPassword);
StrPCopy(pDllName, UpperCase(sDllName));
if not PELogOnServer(pDllName, LogInfo) then
ShowMessage('Ошибка подсоединения к серверу '+IntToStr(PEGetErrorCode(JN)));
При выполнении PELogOnServer(pDllName, LogInfo) выполняется условие и выдается код ошибки 0. Текстовое представление этой ошибки есть PE_ERR_NOERROR (т.е ошибки нет ?). Подключения к серверу не происходит и дальнейшие попытки передать параметры отчету вызывают ошибку PE_ERR_SQLSERVERNOTOPENED.
Тот же код выполняется корректно, если используется Crystal Reports 7.0.
Что может вызывать ошибку подсоединения к серверу?. Может быть должна быть указана другая *. DLL? Если да, то какая (пробовали CRPE32.DLL, p2lodbc.dll, p2sodbc.dll, Pdsodbc.dll, u2fodbc.dll)? Возможно есть другие причины. Заранее спасибо, если сможете помочь.