Registrar OCX en Windows 64 bits


Si tenemos un OCX para 32 bits que necesitamos utilizar en un Windows de 64 bits, no vamos a poder registrarlo normalmente con regsvr32.

Resulta que en los sistemas Windows de 64 bits, todo lo que necesitemos registrar de 32 bits debe ir en la carpeta windowssyswow64 (en vez de windowssystem32)

Una vez copiado el ocx a esta carpeta, ejecutamos el regsvr32 como siempre. Por ejemplo, para el ocx de las impresoras fiscales Hasar:

regsvr32 c:windowssyswow64Fiscal051122.ocx

Recordar siempre ejecutar el cmd como Administrador, sinó el regsvr32 dará error.

Instalar VB6 en Windows 7 64 bits


La mala noticia es que si queremos instalar Visual Basic 6 en Window 7 de 64 bits, obtendremos varios mensajes de error como por ejemplo:

el programa acmboot.exe no se puede iniciar o ejecutar porque no es compatible con versiones 64 bits de Windows.

La buena noticia es que Visual Basic 6 es compatible con Windows 7 de 64 bits. Lo que no es compatible es su instalador, que está compilado en 16 bits .

Aquí los detalles para poder instalarlo sin problemas:

1) Copiar todo el cd de VB6 a una carpeta en el disco ej. C:tempVB6
2) Copiar todo el contenido de la carpeta SETUP en la carpeta donde copiamos todo el contenido del cd, en este caso C:tempVB6
3) Renombrar 'vb98ent.stf' o 'vs98ent.stf', que se encuentra en la carpeta donde copiamos todo (C:tempVB6) por 'acmsetup.stf'
4) Ejecutar ACMSETUP.EXE y completar la instalación

 

problema de click doble en textbox enlazado a datos / must click twice to edit textbox


Algo que me ha pasado en C# NET, trabajando con controles enlazados es que teniendo un combo box enlazado a datos y con su contenido cargado, si hago un click sobre cualquier textbox del mismo formulario sin tocar el combo, accedo a completar texto en dicho control sin problemas.

Pero… si antes selecciono un valor del combo box, al querer cargar luego un texto en el textbox, debo hacer dos clicks en el textbox para poder cargar.

No les ha pasado nunca ?

Bueno, la unica solución que le encontré a este problema es colocar un evento SelectedIndexChanged en el combobox, y en ese evento colocar una llamada a cambiar el foco al control textbox cada vez que se cambia el indice del combobox.

La pérdida del foco en el combobox, equivaldría al primer click. Con lo que al hacer un click en el textbox obtengo un comportamiento normal.

Que enrosque no? supongo que solo me entenderá el que alguna vez se topó con esto.

Si le encuentran alguna otra solución me avisan !

Configuración Regional y de Idioma en SQL Server


Después de luchar un par de horas con la configuración de un servidor de base de datos sql server, dejo este pequeño recordatorio sobre la configuración necesaria para no tener inconvenietes al grabar fechas desde una aplicación desarrollada en C# .NET

Las fechas, tienen el formato Español – Argentina: dd/mm/aaaa con la hora seteada en HH:mm:ss (sin el am o pm)

Es muy común obtener un error como este al intentar grabar una fecha:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

Para evitar estos inconvenientes, verificar lo siguiente:

1) En el servidor, utilizando el SQL Server Management Studio, vamos a Seguridad –> Inicios de Sesión y verificamos que el usuario con que estamos conectando a la base de datos, tenga como idioma predeterminado spanish.

2) En el servidor, donde se aloja la base de datos, configuramos en Panel de Control –> Configuración Regional y de Idioma: Español – > Argentina

2) En la maquina cliente, configuramos en Panel de Control –> Configuración Regional y de Idioma: Español – > Argentina

3) Verifiquemos que la cadena de conexión de nuestra aplicación utilice ese usuario.

Crear reportes rápidos con Crystal Reports en Visual Studio Net


Un recordatorio para algo de uso frecuente: Como crear reportes enlazados rapidamente a través de un xml que contenga la estructura de los campos a imprimir.

Asumo que tenemos cargado un dataset ds con una tabla llamada Table1 con los datos que queremos imprimir.

Por otro lado, lo que debemos hacer es crear un formulario (llamarlo por ejemplo FrmReportes) y colocarle un control CrystalReportViewer. A este control le ponemos como nombre CrvReportes.

En dicho formulario creamos una sobrecarga sobre el constructor para pasarle el reporte como parámetro:

public FrmReportes(CrystalDecisions.CrystalReports.Engine.ReportDocument Reporte)
  {
     InitializeComponent();
     this.CrvReportes.ReportSource = Reporte;
     this.CrvReportes.Show();
     this.ShowDialog();
  }

Ahora bien, para generar el reporte, debemos primero generar el xml con la estructura de los campos a imprimir:

 DataSet ds = new DataSet();
 ds.Tables.Add (controlador.GetAllDt()); //ejemplo de carga del dataset
 ds.WriteXml(@"c:temprepo.xml", ,XmlWriteMode.WriteSchema);  //el path debe tener permisos de scritura

Una vez generado el xml y almacenado en algún lugar del disco con permisos de escritura, vamos en el menú de Visual Studio a Project –> Add Component (Proyecto –> Añadir Componente) y agregamos el componente Crystal Report colocandole como nombre, por ejemplo RptReporte.rpt

Seleccionamos tipo de reporte “Reporte en Blanco” y luego, en el menú del explorador de campos, buscaremos la opción Crear nueva conexión –> Archivos de Base de Datos y nos permitirá seleccionar el archivo repo.xml creado anteriormente.

De esta manera podremos seleccionar de Table1 los campos de nuestro dataset a agregar al reporte.

Solo nos queda pendiente llamar al formulario contenedor del reporte pasandole como parametro el reporte:

CrystalDecisions.CrystalReports.Engine.ReportDocument mirepo;
mirepo = new RptReporte();
//asignamos el dataset para que actualice los datos:
mirepo.Database.Tables["Table1"].SetDataSource(ds);
//llamamos al contenedor
FrmReportes FrmRepor = new FrmReportes(mirepo);

Ojo: Es importante definir la estructura de página del reporte para impresoras genericas, a fin de que no genere problemas al imprimir en distintos modelos de impresora.
Esto lo hacemos haciendo click derecho sobre una sección o sobre el fondo del reporte –> Design –> Printer Setup –> Tildamos “No Printer”.
Allí mismo podemos predeterminar si la página va apaisada o no.