miércoles, julio 15, 2009

Evitar el error 20599 Cannot Open SQL Server de Crystal Reports

Escrito por: Raul Macias 

AyudaEn un post anterior explique cuales eran las Dlls que había encontrado para evitar el error 20599 Cannot Open SQL Server de Crystal Reports 8 y 8.5, en este post voy a tratar de un ejemplo para evitar el error.
Los puntos a tratar serán:
  1. Crear el Reporte de Crystal Reports.
  2. Tipos de conexiones en el Active X de Crystal Reports 8.5 desde Visual Basic 6.
  3. Explicación del ejemplo de Visual Basic 6, DemoCrystal.vbp.
Las herramientas que se utilizan para estos ejemplos son Crystal Reports 8.5, Visual Basic 6 SP5, SQL Server 2005.
1.- Crear el Reporte de Crystal Reports.
La forma de crear un reporte de Crystal Reports que se conecte a SQL Server es utilizando la opción nativa, esta conexión se define cuando se va a crear un reporte y comienza a pedir el wizard la forma de conectar el reporte con la base de datos y la cual es More Data Sources/Microsoft Sql Server, como se muestra en la siguiente imagen.

Cuando se selecciona el tipo de conexión, en ese momento pide el Servidor, Usuario,Pasword y Base de Datos, mostrando todas las tablas y los procedimientos almacenados que se encontraron.
Se selecciona la tabla o el procedimiento almacenado con el que se trabajara, para el procedimiento almacenado pide los valores para los parámetros que tiene definidos, en nuestro ejemplo podemos utilizar la tabla catreportedemo o el procedimiento almacenado SP_lee_catreportedemo con la operación cero y el parámetro clave sin ningún valor o vacio.
Una ves puestos los valores a mostrar en Crystal Reports y verificando que los esta pintando como están en la base de datos, modificaremos el Set Location del reporte, para dejarlo listo y utilizarlo desde Visual Basic, esta modificación del valor sirve para prevenir el error 20599 cuando se esta llamando un reporte con el active X de Crystal Reports en Visual Basic.
Para cambiar el valor es ingresar a el menu DataBase/Set Location...,mostrando la siguiente imagen.

El valor que se tiene que modificar es el location/Table dejando nada mas la tabla o el nombre del procedimiento almacenado(Proc(sp_Lee_CatReporteDemo)), hay que eliminar BasedeDatos.dbo.


Para el procedimiento almacenado seria.


Una ves modificados estos valores guardamos nuestro reporte.
Esto se tiene que hacer para cada procedimiento almacenado o tabla que se tenga en el listado de Databases.
2.-Tipos de conexiones en el Active X de Crystal Reports 8.5 desde Visual Basic 6.
Cuando se esta trabajando en Visual Basic y se quiere abrir un reporte de Crystal que esta ligado a SQL Server ya sea tabla o procedimiento almacenado.
Existen dos formas de abrir la conexión a SQL Server desde Crystal y son:
CrystalReports.Connect = sConexion
Donde sConexion es una variable de tipo cadena y puede ser de cualquier tipo como los que se muestran en el sitio http://www.connectionstrings.com
CrystalReports.LogOnServer "p2ssql.dll", sServidor, _
sBaseDeDatos, sUsuario, sPSW

En esta segunda opción es utilizar la conexión con la cual creamos nuestro reporte, los parámetros son el DLL,Servidor,Base de Datos, Usuario y Pasword, todos de tipo cadena.
3.-Explicación del ejemplo de Visual Basic 6, DemoCrystal.vbp.
Para nuestro ejemplo utilizamos dos objetos en la Base de Datos una tabla catreportedemo y un procedimiento almacenado sp_Lee_CatReporteDemo el cual tiene dos operaciones, con la operación 0(cero) trae todos los registros de la tabla y con la operación 1(uno) trae los registros con que sean iguales a el parámetro clave.
Tabla
CREATE TABLE catreportedemo (
[clave] [CHAR](10) NOT NULL,
[descripcion] [VARCHAR](150) NOT NULL

)
Procedimiento Almacenado
/*
Ejemplos de como llamar el SP
EXEC sp_Lee_CatReporteDemo 0
GO

EXEC sp_Lee_CatReporteDemo 1,'001'
GO
*/

CREATE PROCEDURE Sp_lee_catreportedemo(
@Operacion INT,
@Clave CHAR(10) = NULL)
AS
/*
Trae todos los registros
*/

IF (@Operacion = 0)
BEGIN
SELECT *
FROM catreportedemo
END
/*
Filtra los registros por Clave
*/

IF (@Operacion = 1)
BEGIN
SELECT *
FROM catreportedemo
WHERE clave = @Clave
END
RETURN 0
GO
El proyecto de Visual Basic tiene la funcionalidad de primero abrir una conexión al servidor de SQL Server y leer todos los valores de la tabla catreportedemo, dando como validada la conexión.
En este proyecto se utilizan dos reportes RPT_Tabla.rpt el cual esta ligado a la tabla y RPT_SP.rpt el cual esta ligado al procedimiento almacenado.
El proyecto de Visual utiliza dos formas de llamar a estos reportes con diferente tipo de conexión, como las que ya mencione anteriormente.
El código para abrir el reporte de la tabla es el siguiente.
Abrir Reporte con una Tabla

Private Sub cmdReporteTabla_Click()
'Opcion para ejecutar el reporte que contiene una tabla

'Se valida la conexion
If Not bConexionValida ThenMsgBox "Conexion no valida", vbExclamation, Me.Caption
Exit Sub
End If'Limpia los parametros del reporte
LimpiaParametrosReporte

'Se lee el reporte que ejecuta un procedimiento almacenado
CrystalReportTabla.ReportFileName = _
App.Path & "\" & "RPT_Tabla.rpt"

'Se verifica el tipo de conexion para el reporte
If ComboTipoConexion.ListIndex = 0 Then
'Cadena de conexion
CrystalReportTabla.Connect = sConexion

Else
'Dll de conexion
CrystalReportTabla.LogOnServer "p2ssql.dll", sServidor, _

sBaseDeDatos, sUsuario, sPSW
End If
'Se ejecuta el reporte
CrystalReportTabla.Action = 1

End Sub
El código para abrir el reporte con el procedimiento almacenado es el siguiente.
Abrir Reporte con Procedimiento almacenado

Private Sub cmdReporteSP_Click()
'Opcion para ejecutar el reporte que contiene un procedimiento almacenado con dos parametros

'Se valida la conexion
If Not bConexionValida Then
MsgBox "Conexion no valida", vbExclamation, Me.Caption
Exit Sub
End If'Limpia los parametros del reporte
LimpiaParametrosReporte'Se lee el reporte que ejecuta un procedimiento almacenado
CrystalReportTabla.ReportFileName = _
App.Path & "\" & "RPT_SP.rpt"

'Se verifica el tipo de conexion para el reporte
If ComboTipoConexion.ListIndex = 0 Then
'Cadena de conexion
CrystalReportTabla.Connect = sConexion
Else
'Dll de conexion
CrystalReportTabla.LogOnServer "p2ssql.dll", sServidor, _
sBaseDeDatos, sUsuario, sPSW
End If

'Se pasan los valores para los parametros @Operacion y @Clave
' del procedimiento almacenado del reporte
CrystalReportTabla.ParameterFields(0) = _
"@Operacion;" & ComboParametro.Text & ";TRUE"

CrystalReportTabla.ParameterFields(1) = _
"@Clave;" & ComboClave.Text & ";TRUE"

'Se ejecuta el reporte
CrystalReportTabla.Action = 1
End Sub

Para cuando se abre el reporte con el procedimiento almacenado se utilizan las propiedades de ParameterFields para pasarle los parámetros que capturemos en la pantalla.
El código de este programa, el script de los objetos y los reportes se encuentran aqui.

Escrito por: Raul Macias 

Etiquetas: , , , , , , , , , , , ,

martes, junio 23, 2009

Como hacer fotos panoramicas

Escrito por: Raul Macias 

Hace algún tiempo con la compra de una cámara en el CD que viene acompañándola venia algún software, que siempre creí que eran los drivers o algo para visualizar las fotos u organizar las fotos, me dije a mi mismo si tu utilizas el picasa o el nikon viewer para que quieres otra cosa mas para llenar tu máquina de software que no utilizas y que cuando desinstalas nomas te atarantan la máquina.
Un día que estaba revisando los CDs de la carpeta(siempre empolvada) me encontré este CD y decidí entrar de explorador a ver que contenía, ahí me encontré algo se llama Photo Studio 6 y Panorama Maker 4 y por el nombre busque en Internet su sitio ArcSoft, me pareció interesante decidiéndome a instalarlo y aguantarme el coraje que pudiera generarme después que viera que no me servía.
Mi sorpresa fue muy satisfactoria pues en ese momento tenia mi cámara a la mano y decidí como todo buen usuario sin leer el manual de como se utiliza el software, comenzar a tomar unas fotos, recordando mis viejas enseñanzas de fotogrametría que las fotos tienen un traslape de 60% con la foto anterior en forma secuencia y siempre se toman de Occidente a Oriente o viceversa, pero me di cuenta que pues aquí esto no aplica por lo que tome mi 60% de traslape de una foto a la siguiente y de Izquierda a Derecha.
Una ves que termine de tomar esas fotos las descargue en mi disco duro y abrí el Panorama Maker para comenzar a trabajar con el, me di cuenta que a primera pantalla, aparecen las instrucciones en español de cuales son las instrucciones de Como tomar las mejores fotos panorámicas, nada de lo que yo supuse en un primer momento.
Las instrucciones están muy claras y en un español muy bueno(luego se encuentra uno cada traducción en spanglish que es mejor leerlo en ingles), en la parte izquierda aparece un árbol de carpetas donde uno selecciona el que contiene las imágenes, mostrando inmediatamente las imágenes contenidas en la carpeta seleccionada, en la parte inferior aparece el tipo de salida que uno quiere para la foto que se generara y el tipo de panorámica a generar, Horizontal(apaisado),Vertical y 360.
Algo muy importante y que a primera vista no me fije fue la opción de Selección automática por grupo que por default aparece seleccionada, me dedique a buscar mis fotos de prueba y Guauuuu sorpresa que selecciono la primera y en automático selecciono las fotos siguientes que completaban mi panorámica.
La forma de seleccionar las fotos es solamente con el ratón y dando un clic en la foto en ese momento aparece una palomita de color verde indicando la selección.
Pantalla Principal Panorama Maker 4
Las fotos seleccionadas para el ejemplo son:
Imagen 1
Imagen 1
Imagen 2
Imagen 2
Imagen 3
Imagen 3
Imagen 4
Imagen 4
Imagen 5
Imagen 5
Imagen 6
Imagen 6
Imagen 7
Imagen 7
Imagen 8
Imagen 8
Imagen 9
Imagen 9
Imagen 10
Imagen 10
Una ves seleccionadas todas las fotos que componen la panorámica seleccionamos el botón siguiente.
Orden de Secuencia Fotos para la Panoramica
En esta pantalla muestra las secuencia en la que fueron tomadas permitiendo el ordenarlas con solamente seleccionar la foto y arrastrarla a su posición, además permite quitar la foto que no va o que se selecciono por error, muestra las fotos en miniatura en la parte superior y en un tamaño mayor en la parte inferior.
El siguiente paso es el botón coser que en algún momento pensé aquí se les fue la traducción, pero es un termino muy bien aplicado después que ve uno el resultado.
Plop!! como condorito me fui de espaldas al ver el resultado, el programa hace las correcciones de las imágenes y entrelaza correctamente las distorsiones, además da la sugerencia de cual es el área que forma la panorámica mas correcta.
Resultado Panoramica Generada
Ahí mismo da las opciones de poder mover en horizontal la fotografía tratando de dejar al usuario a hacer su propia corrección, además de poder cambiar el brillo y el contraste del resultado.
Para terminar solamente uno selecciona bien el área que se quiere guardar y fin, la panorámica quedo generada.
Algún retoque en picasa o en Photoshop y lista.
La imagen resultante es la siguiente:
Panoramica Catedral Centro Guadalajara Jalisco Mexico
Mi experiencia después de estar haciendo algunas pruebas es que entre mas detalles contengan las fotos mejor hace su trabajo el Panorama Maker, dado que en algunas ocasiones donde solamente existían algunos muros sin detalles no arma bien las imágenes, pero con la experiencia de hacer varias pruebas antes de dedicarme a sacar alguna panorámica en algún lugar donde al regresar a mi equipo y querer generarla nomas no la pueda armar seria un buen dolor de cabeza, como sugerencia es que hagan sus pruebas antes de decidirse a tomar panorámicas.
La verdad muy buena aplicación para nosotros los mortales que nos gusta la fotografía.
Algunos ejemplos de los resultados son los siguientes y algunos otros mas están en mi galería de flikr http://www.flickr.com/photos/raulmacias/.

Escrito por: Raul Macias 

Etiquetas: , , , , , ,

martes, junio 16, 2009

Error 20599 Cannot open SQL Server o No se Puede abrir el servidor de SQL (Cyrstal Reports 8 y 8.5)

Escrito por: Raul Macias 

El error 20599 Cannot open SQL Server o en español No se puede abrir el servidor de SQL se presenta en algunos Windows XP y Windows Vista al querer abrir el control de Crystal Reports en su método Action=1 y querer conectarlo a una base de datos de SQL o Access, la solución que encontré después de investigar en varios foros(frustrándome al no encontrar una solución 10 horas mas de Psicólogo),hacer una recolección de versiones de archivos de aquí y de por allá decidiéndome ponerme a prueba y error a tratar de encontrar la solución de el problema, dando como resultado un conjunto de archivos que fueron  los siguientes:
Archivo
Versión
p2ssql.dll 8.5.0.19
p2sodbc.dll 8.5.0.72
ntwdblib.dll 2000.2.8.0
cpeaut32.dll 8.5.0.9
crpe32.dll 8.5.0.217
Crystl32.OCX 8.0.0.4
Solución 1
  1. En algunos equipos con solamente copiar el archivo p2ssql.dll y ntwdblib.dll en el directorio C:\Windows\System32 se soluciono el problema(No es necesario registrarlos con REGSRV32.exe).
  2. Ejecutar la aplicación con el problema para ver si ya no se presenta el error 20599.
Solución 2
Después de que no funciona la Solución 1
  1. Des registrar el Crystl32.OCX con el REGSRV32.exe(C:\Windows\System32\REGSRV32.exe /u [Path]\Crystl32.OCX).
  2. Respladar los archivos a remplazar si existen en C:\Windows\System32.
  3. Copiar los archivos cpeaut32.dll,crpe32.dll,Crystl32.OCX en C:\Windows\System32 (registrar en el orden cpeaut32.dll,crpe32.dll,Crystl32.OCX).
  4. Ejecutar la aplicación con el problema para ver si ya no se presenta el error 20599.
En el 99% de los equipos en los que se aplico esta receta de cocina se corrigió el error.
Observación
El Archivo REGSRV32.exe se encuentra en la ruta C:\Windows\System32\
Text in English
Error 20599 Cannot open SQL Server (Cyrstal Reports 8 and 8.5)
The error 20599 Can not open SQL Server in Windows XP and Windows Vista when they wanted to open the Crystal Reports control method in Action = 1 and want to connect to a database SQL or Access, the solution I found after research in various forums (disappointed not to find a psychologist more than 10 hours), a collection of versions of files from here and there I decided to try and error to try to find the solution of the problem, resulting in a set of files that were:
File
Version
p2ssql.dll 8.5.0.19
p2sodbc.dll 8.5.0.72
ntwdblib.dll 2000.2.8.0
cpeaut32.dll 8.5.0.9
crpe32.dll 8.5.0.217
Crystl32.OCX 8.0.0.4
Solution 1
  1. On some computers with just copy the file p2ssql.dll and ntwdblib.dll in C: \ Windows \ System32 solves the problem (need not register with REGSRV32.exe).
  2. Run the application to see if the problem is no longer the error 20599.
Solution 2
After that it does not work Solution 1 .
  1. Unregister Crystl32.OCX record with REGSRV32.exe (C: \ Windows \ System32 \ REGSRV32.exe / u [Path] \ Crystl32.OCX)
  2. Backup files to replace if they exist in C: \ Windows \ System32.
  3. Copy files cpeaut32.dll, crpe32.dll, Crystl32.OCX in C: \ Windows \ System32 (register in order cpeaut32.dll, crpe32.dll, Crystl32.OCX).
  4. Run the application to see if the problem is no longer the error 20599.
In 99% of the equipment in which it applies kitchen prescription error was corrected.
So far after 2 years to present the first time this error is the solution I found.

Comment

The Archives REGSRV32.exe is in the path C: \ Windows \ System32 \

Escrito por: Raul Macias 

Etiquetas: , , , , , , , , , , , ,