delphi - reports - ¿Cómo puedo determinar el método de conexión de un informe de Crystal XI en tiempo de ejecución, antes de iniciar sesión?
no se abrio el documento crystal report (1)
Busque un elemento DSN en Tablas [i] .ConnectionProperties. Non-ODBC no lo tendrá, ODBC siempre debería, AFAIK.
En mi aplicación (Win32), estoy mostrando Crystal Reports.
Configuro la información de inicio de sesión en tiempo de ejecución. Sin embargo, Crystal amablemente decidió referirse al nombre de la base de datos por varios nombres diferentes, dependiendo de cómo se conecta el informe. Por ejemplo, si el informe se conecta a través de una conexión ODBC, se llama "Fuente de datos", pero si se conecta directamente, se llama "Servidor".
Por supuesto, no sabemos hasta el momento de ejecución qué informe se va a llamar.
Actualmente, soluciono el problema tragando una excepción y probando un método alternativo, como este:
procedure TCrystalReporter11.SetLoginInfo(const username, password,
server : string);
var
i : integer;
begin
//set user name and password
//crystal only accepts these values if they are CONST params
for i := 1 to FRpt.Database.Tables.Count do begin
FRpt.Database.Tables[i].ConnectionProperties.Item[''User ID''] := username;
FRpt.Database.Tables[i].ConnectionProperties.Item[''Password''] := password;
try
{
Some reports use direct connections, and others use an ODBC Data Source.
Crystal XI uses a different label to refer to the database name in each
method.
I don''t know how to determine in advance which method is being used, so:
First, we try the direct connection.
If that fails, we try the "data source" method.
Reference: "Crystal Reports XI Technical Reference", pages 41 thru 46;
"Common ConnectionProperties"
}
FRpt.Database.Tables[i].ConnectionProperties.Item[''Server''] := server;
except on E: Exception do
FRpt.Database.Tables[i].ConnectionProperties.Item[''Data Source''] := server;
end;
end;
end;
Idealmente, me gustaría decir algo como:
case FRpt.Database.Tables[i].ConnectionProperties.ConnectMethod of
crymethod_ODBC : sIdx := ''Data Source'';
crymethod_Direct : sIdx := ''Server'';
...other methods...
end; //case
FRpt.Database.Tables[i].ConnectionProperties.Item[sIdx] := server;
Entonces mi pregunta es:
¿Cómo puedo determinar el método de conexión de un informe de Crystal XI en tiempo de ejecución, antes de iniciar sesión?
Información de fondo:
- Estoy usando Delphi 2007
- Estoy mostrando el informe usando la biblioteca ActiveX, que es engorrosa, difícil, estúpida e inevitable ( ver esta publicación ).
- Los informes están en Crystal XI, SP4
- En aras de la discusión, supongamos que todos los informes están en contra de una base de datos Oracle 10g
- Mi máquina de desarrollo está usando Windows Vista, la mayoría de los usuarios están en XP.
Muchas gracias por la ayuda que alguien puede ofrecer.