2/21/2011

Descarga gratuita (freeware) del código fuente (source code) 100% open source, desarrollado con Borland (ahora Codegear) Delphi 6 de la utilidad AjpdSoft Formulario inicio sesión aplicación Delphi: ejemplo de formulario para añadir la opción de inicio de sesión en nuestras aplicaciones. Incluye opción de acceso mediante usuario y contraseña guardados en base de datos MySQL y opción de validación contra servidor LDAP (Active Directory de Microsoft, OpenLDAP, ...).
Formulario inicio sesión en Delphi y MySQL, validar usuario en 
LDAP


Autor: AjpdSoft (bas [arroba] ajpdsoft.com)
Versión: 1.0.0
Tamaño del archivo:
268.00 Kb

MD5: B5421E21E8B4D484E3555439D6A90A12
Descargas: 1

[ Descargar este archivo ahora | Página de Inicio ]

2/20/2011


Desarrollamos un formulario de inicio de sesión con Borland (ahora Codegear) Delphi 6 (válido para otras versiones) y MySQL como motor de base de datos (válido para otros motores). Explicamos en este manual cómo hacer una ventana de validación de usuario usando algunos métodos de seguridad: guardando la contraseña del usuario en MD5 (hash), encriptando la contraseña de acceso a la base de datos, etc. Además, añadiremos la opción de obtener la IP del servidor de MySQL mediante AjpdSoft Aviso cambio IP pública. También mostramos cómo implementar la validación o inicio de sesión en un servidor LDAP (Microsoft Active Directory, dominio Windows u otros compatibles con LDAP).


 

Diseño del formulario Delphi, componentes necesarios para validación de usuario

En primer lugar añadiremos un formulario a nuestro proyecto Delphi con los siguientes componentes:
  • Puesto que nuestra aplicación permitirá validación de diferentes métodos, añadiremos varios TRadioButton para que el usuario pueda seleccionar el método de validación: aplicación, LDAP, Alfresco, etc. En este ejemplo implementaremos el método LDAP y el método aplicación.
  • TEdit: para introducir el usuario y la contraseña.
  • TButton: para botón "Iniciar", botón "Cancelar" y botón "Opciones".
  • TabSheet: donde coloraremos los datos de acceso a la base de datos y los datos para obtener la dirección IP del servidor de base de datos.

Nota: la opción de "Dirección servidor BD IP" no es necesaria para un formulario de validación. Sirve para obtener la IP pública del servidor de bases de datos cuando ésta es dinámica. Si disponemos de IP estática o fija no será necesario. Esta opción enlaza con la base de datos de la aplicación AjpdSoft Aviso cambio IP pública que deberá estar iniciada en el servidor de MySQL para que obtenga la IP y la guarde en la base de datos.
AjpdSoft Diseño del formulario Delphi, componentes necesarios para 
validación de usuario
En la siguiente descarga incluimos el código fuente complento de este formulario:

Tabla usuarios en la base de datos MySQL para validación de usuario en aplicación Delphi

Tabla de usuarios en MySQL para inicio de sesión, formulario de validación Delphi

Para el inicio de sesión en la aplicación desarrollada en Delphi usaremos una tabla donde guardaremos los datos de los usuarios. A continuación mostramos la consulta SQL de creación de esta tabla con todos los campos para MySQL:
CREATE TABLE usuario (
codigo int(10) unsigned NOT NULL AUTO_INCREMENT,
nick varchar(20) NOT NULL,
contrasena varchar(100),
codigocliente int(10) unsigned,
codigotecnico int(10) unsigned,
codusuarioa int(10) unsigned,
codusuariom int(10) unsigned,
fechaa datetime,
fecham datetime,
administrador char(1),
modificacion char(1),
nombre varchar(100),
fecha datetime,
accesoweb varchar(1),
codigodepartamento int(10) unsigned,
email varchar(200),
PRIMARY KEY (codigo),
UNIQUE KEY usuario_nick (nick)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
Por supuesto añadiremos todos los campos que necesitemos para los usuarios (DNI, Departamento, etc.), aunque los más importantes para la validación son nick (nombre de usuario) y contrasena (se guardará aquí el hash de la contraseña del usuario, NO la propia contraseña, por seguridad).
Para crear esta tabla en nuestro servidor de MySQL Server podremos usar cualquier aplicación que permita ejecutar sentencias SQL en MySQL Server, como por ejemplo la aplicación gratuita y con código fuente:
Por supuesto, también podremos usar MySQL Administrator o cualquier otro software para ejecutar consultas SQL en MySQL Server.

 

Tabla MySQL log inicio y cierre de sesión

En nuestro caso, aunque lógicamente no es necesario, usaremos también una tabla para guardar el inicio y cierre de sesión de cada usuario, para guardar un log de los accesos de los usuarios. Crearemos también la siguiente tabla:

CREATE TABLE sesion (
id int(11) NOT NULL AUTO_INCREMENT,
codigousuario int(11),
fecha date,
hora time,
estado varchar(20),
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
Como se puede observar, en la tabla "sesion" guardaremos el código del usuario que inicia la sesión, la fecha y la hora y el estado (si es inicio de sesión o es cierre de sesión). De esta forma quedará constancia de los accesos de cada usuario a la aplicación.

Tabla MySQL de parámetros de configuración de la aplicación

Crearemos una tercera tabla para guardar los parámetros de configuración de la aplicación:

CREATE TABLE parametro (
codigo int(10) unsigned NOT NULL AUTO_INCREMENT,
nombre varchar(50),
valor varchar(100),
PRIMARY KEY (codigo)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
En dicha tabla guardaremos, por ejemplo, la versión de la aplicación. De forma que si desarrollamos una nueva versión de la aplicación, a los usuarios le aparezca un mensaje de aviso indicando que existe una nueva versión de la aplicación, incluso si es una versión "crítica" podemos obligar a los usuarios a que realicen la actualización. Aquí se puede ver un ejemplo de uso de esta tabla.

Formulario de alta de usuario con cálculo de hash (md5) para guardar la contraseña

Para el formulario de alta de nuevo usuario en nuestra aplicación Delphi, añadiremos los componentes necesarios para los campos de fecha de alta, nick, nombre completo, mail, contraseña, etc. A continuación mostramos un formulario de alta de usuario de ejemplo:
AjpdSoft Formulario de alta de usuario con cálculo de hash (md5) 
para guardar la contraseña
El código fuente en Delphi de dicho formulario puede descargarse gratuitamente aquí.
A continuación explicaremos algunas de las opciones más importantes del formulario de alta de usuario:
1. Cuando el usuario o el administrador de la aplicación introduzca la contraseña en el formulario, en la base de datos guardaremos el hash correspondiente a esta contraseña, nunca la contraseña directamente. De esta forma, si se produce un hackeo de nuestra base de datos, si un usuario malintencionado obtiene acceso a nuestra base de datos, al acceder a la tabla de usuarios no verá la contraseña del usuario. Para obtener el hash de la contraseña (que será el valor que guardemos en la base de datos) usaremos el componente gratuito para Delphi: TurboPower LockBox 2.07. Una vez instalado este componente, usaremos la siguiente función para obtener el Hash de la contraseña del usuario:

function obtenerHash (texto : string) : string;
var
  MD5Digest : TMD5Digest;
  hashMD5 : TLbMD5;
begin
  hashMD5 := TLbMD5.Create(nil);
  hashMD5.HashString(texto);
  hashMD5.GetDigest(MD5Digest);
  result := BufferToHex(MD5Digest, SizeOf(MD5Digest));
end;
 
2. Al pulsar el botón "Aceptar", en el formulario de alta o modificación de usuario, comprobaremos si se ha cambiado la contraseña. Si el usuario ha cambiado la contraseña (una modificación) realizaremos la comprobación y guardaremos el hash en el componente enlazado con la base de datos, para guardarlo en la base de datos:
  //si se ha cambiado la contraseña
  if contrasenaActual <> txtContrasena1.Text then
    txtContrasena1.Text := AnsiLowerCase(obtenerHash(txtContrasena1.Text));
 

La seguridad para el inicio de sesión o validación de un usuario en nuestra aplicación con Delphi

Para realizar un formluario seguro de inicio de sesión en nuestras aplicaciones con Delphi, usaremos los siguientes métodos de seguridad:
  • En la tabla de usuario de MySQL no guardaremos directamente la contraseña, sino su hash (md5).
  • Encriptar o cifrar la contraseña y usuario con los que accederemos a la base de datos MySQL, para ello usaremos el esquema de cifrado AES.
  • Guardar log de inicio de sesión de cada usuario, para auditoría de accesos en caso necesario.
  • Usar un usuario y contraseña de MySQL que sólo tenga permisos sobre las tablas de la aplicación, que no sea administrador de MySQL (no usar "root").
La función para encriptar la contraseña y el nombre de usuario de acceso a la base de datos MySQL:

//encriptar datos
function encriptar (Str, Clave : String) : String;
var
  Src: TStringStream;
  Dst: TMemoryStream;
  Size: Integer;
  Key: TAESKey;
  ExpandedKey: TAESExpandedKey;
begin
  Result:= EmptyStr;
  Src:= TStringStream.Create(Str);
  try
    Dst:= TMemoryStream.Create;
    try
      // Preparamos la clave, lo ideal es que tenga 32 caracteres
      FillChar(Key,Sizeof(Key),#0);
      if Length(Clave) > Sizeof(Key) then
        move(PChar(Clave)^,Key,Sizeof(key))
      else
        move(PChar(Clave)^,Key,Length(Clave));
      AEsExpandKey(ExpandedKey,Key);
      // Guardamos el tamaño del texto original
      Size:= Src.Size;
      Dst.WriteBuffer(Size,Sizeof(Size));
      // Ciframos el texto
      AESEncryptStreamECB(Src,Dst,ExpandedKey);
      // Lo codificamos a base64
      Result:= BinToStr(Dst.Memory,Dst.Size);
    finally
      Dst.Free;
    end;
  finally
    Src.Free;
  end;
end;
La función para desencriptar la contraseña y usuario:

//desencriptar datos
function desencriptar (Str, Clave : String): String;
var
  Src: TMemoryStream;
  Dst: TStringStream;
  Size: Integer;
  Key: TAESKey;
  ExpandedKey: TAESExpandedKey;
begin
  Result:= EmptyStr;
  Src:= TMemoryStream.Create;
  try
    Dst:= TStringStream.Create(Str);
    try
      StrToStream(Str, Src);
      Src.Position:= 0;
      FillChar(Key,Sizeof(Key),#0);
      if Length(Clave) > Sizeof(Key) then
        move(PChar(Clave)^,Key,Sizeof(key))
      else
        move(PChar(Clave)^,Key,Length(Clave));
      AESExpandKey(ExpandedKey,Key);
      // Leemos el tamaño del texto
      try
        Src.ReadBuffer(Size,Sizeof(Size));
        AESDecryptStreamECB(Src,Dst,ExpandedKey);
        Dst.Size:= Size;
        Result:= Dst.DataString;
      except
        Result := '';
      end;
    finally
      Dst.Free;
    end;
  finally
    Src.Free;
  end;
end;
En la cláusula "Uses" de la unidad donde coloquemos los procendimientos anteriores necesitaremos añadir:

unit UnidadProcedimientos;

interface
  uses inifiles, sysutils, ShlObj, ActiveX, Windows, ShellCtrls,
      controls, classes, registry, db, dialogs, forms,
      variants, IdSMTP, IdMessage, dateutils, shellapi, mapi,
      LbClass, LbCipher, LbUtils, aes, base64, StrUtils;
Para guardar la contraseña en el fichero INI de configuración de la aplicación usaremos:
  esCadINI('Base de datos', 'Tipo BD MySQL - Usuario',
      trim(encriptar (txtBDUsuario.Text, claveEncriptacionTexto)));
  esCadINI('Base de datos', 'Tipo BD MySQL - Contraseña',
      trim(encriptar (txtBDContrasena.Text, claveEncriptacionTexto)));
El procedimiento "esCadINI":

//escribe un valor string en un fichero INI
procedure esCadINI (clave, cadena : string; valor : String);
begin
  with tinifile.create (changefileext(paramstr(0),'.INI')) do
  try
    WriteString (clave, cadena, valor);
  finally
    free;
  end;
end;
El procedimiento "esCadINI" requerirá añadir en el Uses de la unidad inifiles:
  

unit UnidadProcedimientos;

interface
  uses inifiles, sysutils, ShlObj, ActiveX, Windows, ShellCtrls,
      controls, classes, registry, db, dialogs, forms,
      variants, IdSMTP, IdMessage, dateutils, shellapi, mapi,
      LbClass, LbCipher, LbUtils, aes, base64, StrUtils;
 
También necesitaremos declarar la constante claveEncriptacionTexto con el valor de la clave de encriptación, necesaria para encriptar y desencriptar, es recomendable que sea una clave con números, letras, mayúsculas, minúsculas y algún carácter especial:

  //para encriptación de contraseñas en AES
  claveEncriptacionTexto = 'AnJtP1DdSñO2FwT8';

implementation
  Y, lógicamente, necesitaremos los ficheros AES.pas y base64.pas que se incluyen en la descarga:

Validar usuario en servidor LDAP con Delphi, implementar inicio de sesión login en LDAP con Delphi

Para permitir la validación en un servidor con el protocolo LDAP (dominio de Microsoft Windows con Active Directory, OpenLDAP, etc.) añadiremos los siguientes ficheros a nuestro proyecto Delphi: Cert.pas, Constant.pas, Events.pas, Gss.pas, LDAPClasses.pas, Misc.pas. Todos estos ficheros se incluyen en la descarga:
Por supuesto, en la descarga anterior también incluimos el formulario de inicio de sesión con el código fuente necesario para validar o autenticar un usuario en un servidor LDAP.
El código que usamos en el formulario de inicio de sesión para la autenticación, validación o login de un usuario en LDAP con Delphi:
      if opValLDAP.Checked then
      begin
        if ((txtValLDAPServidor.Text = '') or (txtValLDAPDominio.Text = '')) then
        begin
          continuar := false;
          MessageDlg('Para la validación con LDAP debe indicar el servidor y el dominio.',
              mtWarning, [mbok], 0);
          tabLDAP.Show;
        end
        else
        begin
          if autenticarLDAP (txtUsuario.Text, txtContrasena.Text,
              txtValLDAPServidor.Text, txtValLDAPDominio.Text) then
          begin
            continuar := True;
          end
          else
          begin
            continuar := false;
            MessageDlg('Error de validación LDAP, compruebe que existe el usuario [' +
                txtUsuario.Text + '] en el servidor LDAP: [' +
                txtValLDAPServidor.Text + '] del dominio [' +
                txtValLDAPDominio.Text + '] o que la contraseña es correcta.',
                mtWarning, [mbok], 0);
          end;
        end;
      end;
La función "autenticarLDAP" la podremos encontrar en el fichero "UnidadProcedimientos.pas", es la siguiente:


function autenticarLDAP (usuario : string; contrasena : string;
    servidor : string; dominio : string) : boolean;
var
  e : array[0..0] of string;
  //i : integer;
begin
  LDAPSession := TLDAPSession.Create;
  LDAPEntryList := TLDAPEntryList.create;

  LDAPSession.Server := servidor;
  LDAPSession.Base := 'dc=' + servidor + ',dc=' + dominio + ',dc=com';
  LDAPSESSION.PagedSearch := TRUE;
  LDAPSEssion.PageSize := 100;
  LDAPSession.SSL := false;
  LDAPSession.DereferenceAliases := 0;
  LDAPSession.Version := 3;
  LDAPSEssion.AuthMethod := 0;
  LDAPSession.User := usuario;
  LDAPSession.Password := contrasena;
  LdapSession.ChaseReferrals := true;
  ldapsession.ReferralHops := 32;
  LDAPSession.Connect;

  e[0] := 'cn';

  if ldapsession.Connected then
   Result := true
  else
    Result := false;
end;
Para validar o autenticar un usuario en un servidor con el protocolo LDAP hemos usado la siguiente aplicación de ejemplo del AjpdSoft Validación LDAP y el siguiente paquete de unidades para acceso a LDAP: ADSI (Active Directory Service Interfaces).

Acceso a la tabla de parámetros mediante función Delphi y MySQL

El acceso a la tabla de parámetros de la aplicación, donde guardaremos los valores de configuración, se realizará con una función como la siguiente, donde leeremos el valor del parámetro que necesitemos en cada momento:

procedure obtenerValorParametro (nombre : string;
    var valor1 : string; var valor2 : string);
begin
  md.tc.Close;
  md.tc.SQL.Clear;
  md.tc.SQL.Add('SELECT valor, valor2');
  md.tc.SQL.Add('FROM ' + vtTablaParametro);
  md.tc.SQL.Add('WHERE nombre = :pNombre');
  md.tc.ParamByName('pNombre').DataType := ftinteger;
  md.tc.ParamByName('pNombre').AsString := nombre;
  md.tc.Open;
  valor1 := md.tc.FieldByName('valor').AsString;
  valor2 := md.tc.FieldByName('valor2').AsString;  
  md.tc.Close;
end;
Por ejemplo, para obtener la versión de la aplicación y si es distinta no iniciarla, utilizaremos el siguiente código:
            //comprobamos la versión de la aplicación
            obtenerValorParametro('version', valorParametro1, valorParametro2);
            versionBD := valorParametro1;
            accesoSiDistinta := valorParametro2;
            if (versionBD <> vtVersionAplicacion) then
            begin
              MessageDlg('La versión actual de su aplicación [' +
                  vtVersionAplicacion + '] es diferente a la de la BD [' +
                  versionBD + ']. ' +
                  chr(13) + chr(13) + 'Le recomendamos que actualice ' +
                  'su versión de software para evitar incongruencias ' +
                  'en los datos.', mtInformation, [mbok], 0);
              if accesoSiDistinta = 'N' then
                Application.Terminate;
            end;
 
De esta forma podremos acceder a cualquier parámetro de la aplicación y éste quedará guardado en la base de datos, por lo que serán parámetros compartidos para todos los usuarios de la aplicación.

Acceso nativo a MySQL Server con Delphi

Para el acceso al servidor de bases de datos MySQL Server con el lenguaje de programación Borland (ahora Codegear) Delphi 6 hemos usado el componente gratuito Zeosdbo 6.5.1. En el siguiente enlace explicamos cómo instalarlo en Delphi 6:
Este componente tiene la ventaja de que accede de forma nativa (sin usar intermediarios como ODBC) al servidor de MySQL Server indicado. Es bastante sencillo de programar, es suficiente con añadir un componente de tipo ZConnection:
AjpdSoft Acceso nativo a MySQL Server con Delphi
Estableceremos las propiedades del componente ZConnection por código, obteniendo los datos del servidor de MySQL Server al que nos conectaremos desde el formulario de login:

    if continuar then
    begin
      md.bd.Disconnect;
      md.bd.Database := txtBDBD.Text;
      md.bd.User := txtBDUsuario.Text;
      md.bd.Password := txtBDContrasena.Text;
      md.bd.HostName := txtBDServidor.Text;
      md.bd.Port := strtoint(txtBDPuerto.Text);
      md.bd.Protocol := txtBDProtocolo.Text;
      try
        md.bd.Connect;
        ......
Añadiremos el resto de componentes Zeosdbo, todos ellos enlazados con el ZConnection anterior mediante la propiedad Connection. Por ejemplo, para ejecutar consultas SQL en nuestro MySQL Server y obtener el resultado usaremos un ZQuery:
AjpdSoft Acceso nativo a MySQL Server con Delphi
Un ejemplo de uso del ZQuery:
        vtUsuario := txtBDUsuario.Text;

        md.tc.Close;
        md.tc.SQL.Clear;
        md.tc.SQL.Add('SELECT codigo, contrasena, nombre, modificacion, ');
        md.tc.SQL.Add('  administrador, tipo');
        md.tc.SQL.Add('FROM usuario');
        md.tc.SQL.Add('WHERE upper(nick) = :pNick and activo = "S"');
        md.tc.ParamByName('pNick').DataType := ftString;
        md.tc.ParamByName('pNick').Value := ansiuppercase(txtUsuario.Text);
        md.tc.Open;

        if md.tc.RecordCount > 0 then
        begin
          vtcontrasenaUsuario := md.tc.FieldByName('contrasena').AsString;
          if opValGISAM.Checked then
Podremos consultar y usar el código fuente completo del formulario de inicio de sesión realizando la descarga:

 

Artículos relacionados

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del proyecto AjpdSoft.

2/14/2011

¿Cómo cambiar el puerto de MySQL por defecto 3306 en Linux?
  

Tengo un servidor de bases de datos con MySQL 5, lo tengo en un equipo servidor con el sistema operativo GNU Linux Debian 5.

Necesito cambiar el puerto por defecto de MySQL Server 5 ¿cómo puedo hacerlo? actualmente usa el puerto por defecto que es el 3306 y quiero cambiarlo al 2526.



  Para cambiar el puerto de MySQL en GNU Linux Debian sigue estos pasos:

1. Edita el fichero my.cnf con el comando Linux:


Código:

sudo nano /etc/my.cnf


2. Busca la línea port = 3306 en la sección [client] y cámbiala por port = 2526.



3. Busca también la línea port = 3306 en la sección [client] y cámbiala por port = 2526.



4. Guardaremos los cambios pulsando Control + O y cerraremos nano pulsando Control + X.

5. Si queremos aplicar los cambios, teniendo en cuenta que desconectaremos cualquier cliente que haya conectado, reiniciaremos el servicio de MySQL, con el comando Linux:


Código:

sudo /etc/init.d/mysql restart



Lógicamente, ahora tienes que tener en cuenta que en cualquier aplicación o equipo cliente que acceda a tu servidor de MySQL deberás cambiar el puerto por el nuevo 2526.

2/13/2011


Explicamos en este artículo cómo descargar e instalar la suite de desarrollo Microsoft Visual Studio .Net 2010. Realizamos una aplicación de ejemplo que accede al motor de bases de datos gratuito PostgreSQL usando ODBC. Explicamos cómo instalar el driver ODBC de PostgreSQL. mostramos también un ejemplo de código para conexión con PostgreSQL usando ODBC sin componentes visuales, haciendo un CREATE TABLE, un INSERT INTO y un SELECT.



Descargar e instalar Microsoft Visual Studio 2010

Abriremos un navegador web como Mozilla Firefox y accederemos a la URL:

http://www.microsoft.com/downloads/es-es/details.aspx?FamilyID=06A32B1C-80E9-41DF-BA0C-79D56CB823F7

(la URL puede variar en función de la versión)
Descargaremos los cuatro ficheros de Visual Studio 2010 Utilmate (versión de evaluación):
  • VS2010UltimTrialESN_4PartsTotal.part1.exe (720MB).
  • VS2010UltimTrialESN_4PartsTotal.part2.rar (720MB).
  • VS2010UltimTrialESN_4PartsTotal.part3.rar (120MB).
  • VS2010UltimTrialESN_4PartsTotal.part4.rar (366MB).
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
Una vez descargados todos los ficheros, ejecutaremos el fichero VS2010UltimTrialESN_4PartsTotal.part1.exe:
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
Seleccionaremos la carpeta de destino para la descompresión de los ficheros y pulsaremos "Instalar":
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
Se iniciará la descompresión de los ficheros descargados en el fichero .iso con la instalación de Microsoft Visual Studio 2010:
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
Una vez descomprimidos los ficheros, quedará el fichero VS2010UltimTrialESN.iso de 2,5GB, este fichero podremos pasarlo a un DVD como indicamos aquí:
Tras crear el DVD (o descomprimir el fichero ISO), ejecutaremos el fichero "setup.exe":
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
Se iniciará el asistente para la instalación d Microsoft Visual Studio 2010 (versión de evaluación). Pulsaremos en "Instalar Microsoft Visual Studio 2010":
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
En el primer paso de la instalación de Microsoft Visual Studio 2010 Ultimante, desmarcaremos "Sí, enviar a Microsoft Corporation información sobre la instalación" (si no queremos enviar esta información) y pulsaremos "Siguiente":
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
Leeremos los términos de licencia del software de Microsoft Visual Studio 2010 Ultimate (edición de prueba). Si estamos de acuerdo marcaremos "He leído los términos de la licencia y los acepto". Pulsaremos "Siguiente" para continuar:
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
A continuación marcaremos "Personalizar" para seleccionar los lenguajes de programación y las herramientas que se quieran instalar. En "Ruta de instalación del producto" indicaremos la unidad y carpeta de destino de la instalación:
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
Seleccionaremos los lenguajes a instalar:
  • Visual Basic.
  • Visual C++.
  • Visual C#.
  • Visual F#.
Seleccionaremos también las características a instalar:
  • Microsoft Office Developer Tools.
  • Dotfuscator Software Services.
  • Microsoft SQL Server 2008 Express.
  • Microsoft SharePoint Developer Tools.
Una vez seleccionadas las características a instalar pulsaremos en el botón "Instalar":
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
Se iniciará la instalación de Microsoft Visual Studio 2010 Ultimate: informe de errores de Microsoft, VC 9.0 Runtime, VC 10.0 Runtime, Microsoft .Net Framework 4, Microsoft Visual Studio 2010 Ultimate, Microsoft ASP .Net, etc.:
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
Tras la instalación, el asistente para instalar Visual Studio mostrará la siguiente ventana, con el texto "Correcto. Se instaló Visual Studio 2010 y finalizó el programa de instalación". Pulsaremos "Finalizar":
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
Tras el proceso de instalación puede que pida reiniciar el equipo:
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010


Con el texto: "Debe reiniciar el equipo para completar la instalación. El programa de instalación continuará automáticamente después de haber reiniciado el equipo".
Desde el botón "Iniciar" - "Todos los programas" podremos ver el grupo de programas "Microsoft Visual Studio 2010":
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
Tras iniciar por primera vez Microsoft Visual Studio 2010 Ultimate, seleccionaremos la configuración de entorno predeterminada, por ejemplo "Configuración de desarrollo de Visual Basic":
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010
Y ya podremos disponer de este entorno de programación:
AjpdSoft Descargar e instalar Microsoft Visual Studio 2010

Realizar aplicación Visual Basic de Visual Studio 2010 con acceso a base de datos PostgreSQL

A continuación realizaremos una sencilla aplicación que permita conectarse al motor de bases de datos gratuito PostgreSQL, para ello usaremos el driver ODBC correspondiente de PostgreSQL. Realizaremos la aplicación usando el lenguaje de programación Microsoft Visual basic .Net de Microsoft Visual Studio 2010 en el sistema operativo Microsoft Windows 7. Nos conectaremos con nuestra aplicación a un servidor de PostgreSQL en GNU Linux Debian.
Por supuesto, para probar la conexión, necesitaremos un servidor (equipo) con PostgreSQL, bien con Windows o bien con Linux. En el siguiente artículo explicamos cómo instalar PostgreSQL en GNU Linux Debian:
En este otro artículo explicamos cómo instalar PostgreSQL en Microsoft Windows 7:

 

Instalar driver ODBC de PostgreSQL en Microsoft Windows 7

En primer lugar descargaremos el driver ODBC de PostgreSQL para Microsoft Windows 7, para ello abriremos un navegador web como Mozilla Firefox y accederemos a la URL:

http://www.postgresql.org/ftp/odbc/versions/msi
Descargaremos el fichero correspondiente a la versión más reciente, en nuestro caso: psqlodbc_09_00_0200-x64.zip de 1,7MB.

Atención: aunque aquí vamos a instalar PostgreSQL ODBC 64 bits, recomendamos instalar la versión de 32 bits, de lo contario es muy posible que Microsoft Visual Studio no sea compatible.
Una vez descargado el fichero haremos doble clic para ejecutarlo (o botón derecho y "Instalar"):
AjpdSoft Instalar driver ODBC de PostgreSQL en Microsoft Windows 7
Se iniciará el asistente para instalar el driver ODBC de PostgreSQL en Microsoft Windows 7, pulsaremos "Next" para continuar:
AjpdSoft Instalar driver ODBC de PostgreSQL en Microsoft Windows 7
Leeremos los términos de licencia, si estamos de acuerdo marcaremos "I accept the terms in the License Agreement", pulsaremos "Next" para continuar:
AjpdSoft Instalar driver ODBC de PostgreSQL en Microsoft Windows 7
Seleccionaremos la ubicación de los ficheros de instalación, pulsaremos "Next":
AjpdSoft Instalar driver ODBC de PostgreSQL en Microsoft Windows 7
Pulsaremos "Install" para iniciar la instalación final del driver ODBC de PostgreSQL en Microsoft Windows 7:
AjpdSoft Instalar driver ODBC de PostgreSQL en Microsoft Windows 7
Si tenemos UAC (Control de cuentas de Usuario) activado, nos mostrará un mensaje de aviso, pulsaremos "Sí" para continuar:
AjpdSoft Instalar driver ODBC de PostgreSQL en Microsoft Windows 7
La instalación se completará, mostrará el mensaje Completed hte psqlODBC_x64 (ó psqlODBC_x32) Setup Wizard. Click the Finish button to exit the Setup Wizard. Pulsaremos "Finish" para finalizar la instalación:
AjpdSoft Instalar driver ODBC de PostgreSQL en Microsoft Windows 7

Desarrollar aplicación con Visual Basic .Net de Visual Studio 2010 con acceso a PostgreSQL usando el asistente para agregar nuevo origen de datos

A continuación desarrollaremos una aplicación de ejemplo en Microsoft Visual Basic .Net de Microsoft Visual Studio 2010 que accederá a una base de datos PostgreSQL mediante ODBC.
Pulsaremos en el botón "Iniciar" de Windows - "Todos los programas" - "Microsoft Visual Studio 2010" y seleccionaremos "Microsoft Visual Studio 2010":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
En el IDE de desarrollo de Visual Basic, pulsaremos en el menú "Archivo" - "Nuevo Proyecto":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
En "Plantillas instaladas" seleccionaremos "Visual Basic" y "Windows". En la parte derecha tendremos las siguientes posibilidades:
  • Aplicación de Windows Forms: que será la que seleccionemos.
  • Aplicación WPF.
  • Aplicación de consola.
  • Biblioteca de clases.
  • Aplicación de explorador WPF.
  • Biblioteca de controles de usuario WPF.
  • Biblioteca de controles personalizados de WPF.
  • Proyecto vacío.
  • Servicio de Windows.
  • Biblioteca de controles de Windows Forms.
Seleccionaremos "Aplicación de Windows Forms". En el desplegable selecionaremos ".NET Framework 4". En "Nombre" introduciremos, por ejemplo, "AjpdSoftAccesoPostgreSQL". Pulsaremos "Aceptar":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Añadiremos el origen de datos a la aplicación que desarrollaremos, para ello pulsaremos en el menú "Datos" - "Agregar nuevo origen de datos":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
En el asistente para la configuración e orígenes de datos, en "¿De dónde obtendrá la aplicación los datos?" seleccionaremos "Base de datos". Pulsaremos "Siguiente":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Seleccionaremos "Conjunto de datos" en "¿Qué tipo de modelo de base de datos desea usar?":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
En la ventana de "Elegir la conexión de datos", en "¿Qué conexión de datos debería utilizar la aplicación para conectarse a la base de datos?" pulsaremos en el botón "Nueva conexión":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
En "Elegir origen de datos" seleccionaremos "Origen de datos de Microsoft ODBC", en "Proveedor de datos seleccionaremos "Proveedor de datos de .NET Framework para ODBC". Pulsaremos "Continuar":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
A continuación marcaremos la opción "Usar cadena de conexión" y pulsaremos "Generar":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Pulsaremos en la pestaña "Origen de datos de equipo" y pulsaremos en el botón "Nuevo":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Marcaremos "Origen de datos de sistema (se aplica sólo a este equipo). Pulsaremos "Siguiente":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Seleccionaremos el origen de datos "PostgreSQL ANSI", pulsaremos "Siguiente":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Pulsaremos "Finalizar":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
En las opciones del driver psqlODBC de PostgreSQL introduciremos las siguientes opciones:
  • Data Source: nombre que le daremos al origen de datos para identificarlo en la cadena de conexión, en nuestro caso "bdajpdsoft".
  • Database: nombre de la base de datos PostgreSQL a la que nos conectaremos, en nuestro caso "bdajpdsoft".
  • Description: texto descriptivo de la conexión, por ejemplo "PosgreSQL con Visual Basic".
  • SSL Mode: si tenemos el modo SSL activado en el servidor podremos seleccionar "enable", en caso contrario seleccionaremos "disable".
  • Server: nombre de red (hostname) o IP del servidor de PostgreSQL, en nuestro caso, el servidor PostgreSQL lo tenemos en un equipo con GNU Linux Debian, con la IP 192.168.1.100.
  • Port: puerto usado por PostgreSQL, por defecto 5432.
  • User Name: nombre de usuario de PostgreSQL con permisos suficientes para la acción que realizará la aplicación, en nuestro caso seleccionaremos el usuario por defecto "postgres".
  • Password: contraseña del usuario anterior.
Pulsaremos en el botón "Test" para comprobar la conexión con el servidor:
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Si la conexión se establece correctamente con el servidor de PostgreSQL nos mostrará el siguiente mensaje:
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Con el texto: "Connection successful".
Si la conexión no puede establecerse mostrará un mensaje con el error que se haya producido.
Pulsaremos "Aceptar" en la ventana de "Seleccionar origen de datos":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Pulsaremos "OK" en la ventana de "PostgreSQL Connection":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
En la ventana de "Agregar conexión", en la opción "Usar cadena de conexión", nos habrá añadido la cadena de conexión resultante de las opciones anteriores, con todos los parámentros seleccionados. Si queremos realizar otra prueba pulsaremos en "Probar conexión":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Si todo es correcto, en la prueba de conexión de Visual Basic con el servidor establecido en el driver ODBC nos mostrará el siguiente mensaje:
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL


Con el texto: "La conexión de prueba se realizó correctamente".
El asistente para la configuración de orígenes de datos de Visual Basic .Net nos mostrará la cadena de conexión. En esta ventana podremos seleccionar las siguientes opciones:
  • ¿Qué conexión de datos deberá utilizar la aplicación para conectarse a la base de datos?: en este desplegable seleccionaremos el driver ODBC creado anteriormente.
En la siguiente opción nos indica: Esta cadena de conexión parece contener datos confidenciales (por ejemplo, una contraseña) que son necesarios para conectarse con la base de datos. Sin embargo, almacenar datos confidenciales en la cadena de conexión puede suponer un riesgo para la seguridad. ¿Desea incluir estos datos en la cadena de conexión?
Y las opciones:
  • No, excluir los datos confidenciales de la cadena de conexión. Estableceré esta información en el código de mi aplicación.
  • Sí, incluir datos confidenciales en la cadena de conexión.
En nuestro caso, para simplificar y mostrar un ejemplo de conexión a PostgreSQL, seleccionaremos "Sí, incluir datos confidenciales en la cadena de conexión". Pulsaremos "Siguiente":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL

Nota: la opción de guardar los datos confidenciales en la cadena de conexión no es recomendable, lo ideal es guardar los datos de usuario y contraseña de la base de datos en un fichero encriptados, no en la cadena de conexión sin encriptar.
A continuación, en "Guardar cadena de conexión en el archivo de config. de la aplicación" marcaremos "Sí, guardar la conexión como" e introduciremos un nombre para la cadena de conexión, por ejemplo "bdajpdsoftConnectionString":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL

Con el texto: El almacenamiento de las cadenas de conexión del archivo de configuración de aplicación facilita el mantenimiento y la implementación. Para guardar la cadena de conexión en el archivo de configuración de la aplicación, escriba un nombre en el cuadro y, a continuación, haga clic en Siguiente. ¿Desea guardar la cadena de conexión en el archivo de configuración de la aplicación?
A continuación, el asistente para la configuración de orígenes de datos, nos mostrará las tablas que encuentre en el servidor de PostgreSQL (para el usuario que hayamos usado en la conexión y la base de datos seleccionada). En nuestro caso marcaremos "factura". En la parte inferior podremos indicar el nombre para el DataSet que creará el asistente de forma automática, enlazado con el origen de datos y con las tablas, vistas, procedimientos almacenados y funciones seleccionados, en nuestro caso "bdajpdsoftDataSet". Pulsaremos "Siguiente" para continuar:
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
El asistente habrá creado un DataSet con las tablas seleccionadas:
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
También habrá creado un fichero de configuración para la aplicación "app.conf":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
A continuación añadiremos un DataGridView al formulario de la aplicación, para mostrar los datos de la tabla "factura" de PostgreSQL. Para ello pulsaremos en "Cuadro de herramientas", en el grupo de componentes "Datos" seleccionaremos "DataGridView":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Colocaremos el DataGridView en el formulario, seleccionaremos la propiedad "DataSource" del DataGridView, en el desplegable seleccionaremos el DataSet y, dentro de éste, la tabla que queramos mostrar, en nuestro caso "factura":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Automáticamente mostrará los campos de la tabla seleccionada en el DataGridView, seleccionándolo podremos establecer sus propiedades (columnas a mostrar, tamaño, caption (nombre), etc.):
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Si compilamos la aplicación pulsando F5 o desde el menú "Depurar" - "Iniciar depuración" podremos ver que nuestra aplicación Visual Basic .Net de Microsoft Visual Studio 2010 ya accede al servidor PostgreSQL y mostrará los datos de la tabla "factura":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Ahora podremos añadir, por ejemplo, un BindingNavigator, del grupo de componentes "Datos":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Dicho componente es una barra de botones con "Último", "Anterior", "Siguiente", "Primero", añadir registro, eliminar registro, el registro actual y el número de registros. Para enlazar el componente "BindingNavigator" a la tabla "factura" lo seleccionaremos y en la propiedad "BindingSource" seleccionaremos "FacturaBindingSource":
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL
Si compilamos la aplicación pulsando F5 veremos el resultado del componente BindingNavigator y el componente DataGridView:
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL

Desarrollar aplicación con Visual Basic .Net de Visual Studio 2010 con acceso a PostgreSQL sin usar componentes visuales

Por un lado, en la clase del formulario declararemos los siguientes elementos:


Public Class Form1
    'Para la conexión con PostgreSQL sin componentes visuales
    Public cadenaConexionODBC As String =
        "DSN=bdajpdsoft;UID=postgres;PWD=0000;"
    Public conexionBD As New Odbc.OdbcConnection(cadenaConexionODBC)
    Dim comandoSQL As OdbcCommand = conexionBD.CreateCommand()
    Public datasetDatosBD As New DataSet
    Public dataAdaptarDatosDB As New Odbc.OdbcDataAdapter
  Añadiremos un botón al formulario, en el evento onClick del botón pondremos el siguiente código:
    Private Sub btAccesoPostgreSQL_Click(
            ByVal sender As System.Object,
            ByVal e As System.EventArgs) Handles btAccesoPostgreSQL.Click
        Try
            conexionBD.Open()
            MsgBox("Conexión establecida a la base de datos PostgreSQL. ",
                   MsgBoxStyle.Information, "Conexión establecida")

            'Ejemplo para crear una tabla en PostgreSQL con Visual Basic y ODBC
            If MsgBox("Se va a crear una tabla llamada 'cliente' ¿desea continuar?",
                    MsgBoxStyle.YesNo + MsgBoxStyle.Question) = MsgBoxResult.Yes Then
                comandoSQL.CommandText =
                    "CREATE TABLE cliente (codigo INTEGER, nombre VARCHAR(100))"
                dataAdaptarDatosDB.SelectCommand =
                    New Odbc.OdbcCommand(comandoSQL.CommandText, conexionBD)
                dataAdaptarDatosDB.SelectCommand.ExecuteNonQuery()
                MsgBox("Tabla creada correctamente en PostgreSQL.",
                       MsgBoxStyle.OkOnly + MsgBoxStyle.Information,
                       "Tabla creada")

                'Ejemplo para insertar un registro en una tabla PostgreSQL con Visual Basic
                If MsgBox("¿Desea insertar un registro de prueba en la tabla 'cliente'?",
                       MsgBoxStyle.Question + MsgBoxStyle.YesNo,
                       "Insertar registro en tabla PostgreSQL") = MsgBoxResult.Yes Then
                    comandoSQL.CommandText =
                        "INSERT INTO cliente (codigo, nombre) values (1, 'Prueba registro')"
                    dataAdaptarDatosDB.InsertCommand =
                        New Odbc.OdbcCommand(comandoSQL.CommandText, conexionBD)
                    dataAdaptarDatosDB.InsertCommand.ExecuteNonQuery()

                    'Ejemplo de ejecución de select en PostgreSQL con Visual Basic
                    comandoSQL.CommandText = "select * from cliente"
                    dataAdaptarDatosDB.SelectCommand =
                        New Odbc.OdbcCommand(comandoSQL.CommandText, conexionBD)
                    dataAdaptarDatosDB.Fill(datasetDatosBD)
                    MsgBox("Número de registros de la tabla 'cliente': " & _
                           CStr(datasetDatosBD.Tables(0).Rows.Count),
                            MsgBoxStyle.OkOnly + MsgBoxStyle.Information,
                            "Select ejecutado")
                End If
            End If

            conexionBD.Close()
        Catch ex As Exception
            MsgBox("Error en la conexión a la base de datos: " & ex.Message,
                   MsgBoxStyle.Critical)
        End Try
    End Sub
 
En el código anterior mostramos un ejemplo para crear una tabla, un ejemplo para insertar un registro en una tabla y un ejemplo para realizar un select de una tabla:
AjpdSoft Desarrollar aplicación con Visual Basic .Net de Visual 
Studio 2010 con acceso a PostgreSQL sin usar componentes visuales

Artículos relacionados

  

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del proyecto AjpdSoft.