Hola David,
Lo primero que debes hacer es realizar todo esto en un informe primero. Abre el Diseñador, abre uno de tus informes, haz clic en la opción de menú Database y luego en Set Location.....
Selecciona el Cliente, completa la información de inicio de sesión, una vez que se establezca la conexión, haz clic en el nuevo origen de datos y luego en el antiguo origen de datos y luego en el botón Map. Si se detectan problemas de asignación de tipos de campo, se abrirá una interfaz de asignación y deberás asignar los campos individualmente.
Establece la ubicación para cada origen de datos listado, si tienes un subinforme haz lo mismo.
Ahora haz clic en Database... y luego en Verify, esto actualizará la información de la tabla en el informe con la nueva información de la tabla seleccionada.
Ahora utiliza el mismo flujo de trabajo en el SDK. En este caso, necesitarás usar ReplaceConnection(OldConn, NewConn, DoNotVerify) para que la información de la base de datos se actualice correctamente, incluso al usar un Command.
Ambas llamadas son una configuración global, por lo que valida cada tabla en la colección, por lo que no es necesario llamarlo en el bucle para establecer la ubicación, una vez que se complete ese bucle, realiza las llamadas solo una vez. Las conexiones de subinformes también deben establecerse, luego realiza esas llamadas.
Y debes estar realmente conectado a la base de datos, no puedes simplemente llamarlas y esperar que la conexión funcione o verifique la información de la tabla.
El flujo de trabajo sería el siguiente:
Abre el informe
Obtén el SQL del objeto Command
Cambia el SQL y configúralo para los informes principales y los subinformes
Ahora establece las propiedades de conexión para iniciar sesión.
Si el informe está utilizando un Procedimiento Almacenado, configura primero los parámetros del SP antes de iniciar sesión.
Si no, establece los valores de cualquier parámetro de CR que necesite ser cambiado o que no tenga valores predeterminados guardados
Ahora inicia sesión en la BD
Verifica la conectividad aquí, esto no verifica la información de los datos del informe, solo prueba si la información de conexión funciona.
Establece los valores predeterminados de los parámetros, si es necesario.
Ahora SetLocation()
Ahora verifica la base de datos.
Y ahora puedes guardar el informe, si usas RAS para actualizar alguna parte, entonces necesitas usar el objeto ReportClientDocument al guardar. Tiene la información actualizada. El ClientDocument puede no tenerla, algunas propiedades básicas se pueden guardar, pero para cambiar la fuente de DB necesitas usar el objeto RCD.
Solo para ser claro, ¿estás usando Java o .NET?
No tengo ejemplos, pero tal vez puedas encontrar algunos aquí:
https://wiki.scn.sap.com/wiki/display/BOBJ/Java+%28Crystal+Reports+for+Eclipse%29+SDK
Y más aquí:
https://wiki.scn.sap.com/wiki/display/BOBJ/Java+SDK
Para ejemplos de .NET ve aquí, escribí 2 aplicaciones de prueba, una para Parámetros/Inicio de sesión y otra para Impresión:
https://wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports%2C+Developer+for+Visual+Studio+Downloads
Don