Visual Basic y Sql Server con Ado Data Control

Introducción

Este artículo es una respuesta a una petición de ayuda de un lector. Necesitaban un ejemplo acerca de como conectar Visual Basic 6.0 a Sql Server, él tiene un sistema hecho en Visual Basic que se conectaba a una base de datos Access, utilizando el Data Control. He utilizado en este ejemplo Visual Basic 6.0 (con Service Pack 6), y Sql Server 2000 (Service Pack 4).

Lamentablemente, el Data Control no permite el acceso a bases de datos Sql Server directamente, y no utilizan ADO, que es mucho más eficiente que DAO para acceder a Sql Server.

Desarrollo del Ejemplo

Se tendría que utilizar ADO Data Control (ADODC) para realizar un ejemplo lo más similar a lo que utiliza actualmente en su software. El ADODC es muy similar al Data Control, para poder utilizarlo en el proyecto, hay que agregar el componente como se ve en la imagen (hacer clic para verla).



El diseño del formulario de ejemplo es simple:



Los primeros campos, permiten al usuario ingresar el nombre del Servidor, el nombre de la base de datos, el usuario con los permisos suficientes para acceder a la base de datos y la contraseña del usuario.

Hay un botón "Conectar", que hay que pulsar para establecer la conexión al servidor y a la base de datos. Al conectarse, se ejecuta una consulta inicial que rellena el datagrid con los datos recuperados.

Luego hay un campo de texto, donde se ingresará un nombre o una parte para filtrar los registros de la tabla. Hay una etiqueta donde se da el ejemplo. El ADODC se ve en modo diseño, pero en tiempo de ejecución está oculto por defecto, se puede cambiar, tal como lo hice en el ejemplo.

En esta imagen se muestra el formulario, cuando se pulsa el botón "Conectar" con los parámetros correctos, se listan los registros de la tabla employee.



Y ésta, muestra cuando se ha hecho una consulta filtrando por la palabra "an", se muestran solo los registros que contienen dentro del nombre dicha palabra.



El siguiente es el código del botón "Conectar"

Private Sub cmdConectar_Click()

Dim CadenaConexion As String

CadenaConexion = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=" + txtUsuario.Text + ";Password= " + txtPassword.Text + ";Initial Catalog=" + txtBaseDatos.Text + ";Data Source=" + txtServidor.Text


With adoEjemplo

.ConnectionString = CadenaConexion

.CommandType = adCmdText

.RecordSource = "SELECT * FROM employee"

.Refresh

End With


With DataGrid1

Set .DataSource = adoEjemplo.Recordset

.Refresh

End With


cmdConectar.Enabled = False


End Sub




Y el siguiente es el código del botón "Buscar":

Private Sub cmdBuscar_Click()

Dim Consulta As String

Consulta = "Select * from employee where fname like '%" + txtConsulta.Text + "%'"


With adoEjemplo

.RecordSource = Consulta

.Refresh

End With


With DataGrid1

Set .DataSource = adoEjemplo.Recordset

.Refresh

End With


End Sub


Conclusión

Como se ve el código no es muy complicado, y es muy similar a lo que se usaría en consultar una base de datos Access, claro que es un ejemplo, y le falta mucho para ser considerado en producción, como control de errores, y otros controles de seguridad. Además, utilizar ADODC en una solución profesional, no es recomendada, como dice la propia Microsoft, es útil para prototipos, no para una solución real.

Descarga desde aquí el código completo.

ACTUALIZADO: Olvidé indicar que la base de datos de ejemplo era la Pubs que viene por defecto con el Sql Server. Si ya la borraron o no la tienen la pueden descargar de aquí.

Espero sea de ayuda para el lector, y también para otros.

Carlos Mayanga

Mis otros blogs:
PCT: Programación y Tecnología
Sistémico en Apuros
Ciudad de Chiclayo: Tienes que conocerla

6 comentarios:

amoanuria dijo...

estoy probando su programa pero no me funciona, el problema no es del SW sino de mi servicio de BD web (strato.com). No permite acceso remoto por seguridad. Sabes de algún servicio gratuito que sí lo permita? vamos que no quiero correr mysql en localhost sino que tu programa me conecte con una base de datos remota con la IP o nombre del dominio.

MUCHAS GRACIAS

Ikanus dijo...

Hola, el programa se conecta a una base de datos Ms Sql Server, no a una en mySQL, trataré de hacer un ejemplo con mySQL, según lo que indicas.

Gracias por la visita y el comentario.

gmfreval dijo...
Este comentario ha sido eliminado por el autor.
gmfreval dijo...

kanus lo felicito por esa ayuda.
tengo una pregunta
puedo tener una conexion similar desde visual basic .net a sql7 o como se haria esa conexion??
y se puede hacer una conexion remota "ejecutable" .net pegandole a la bd sql7 ??

Gracias por su ayuda

Ikanus dijo...

Hola gmfreval, la conexión desde VB.NEt a SQl7 se puede hacer, aunque te recomiendo hacerlo a través de código ya que es más eficiente, y ya no utilizar objetos como el ADO Data Control. Este ejemplo es digamos un modelo, pero para producción, lo óptimo es realizar las conexiones "a mano", este mes he tenido muchas ocupaciones y no he podido publicar algunos artículos que quiero y entre los cuales hay uno con código.

Ahora, me preguntas sobre como hacer una "conexion remota ejecutable" .net pegandole a la bd sql7, supongo que te refieres a una conexión por red o tal vez a través de la internet, lo cual también es posible. Si puedes aclararme ese punto espero poder ayudarte un poco mas. Saludos.

gmfreval dijo...

ikanus supones bien!!, quiero que la aplicacion trabaje en red y se conecte con un pc que funge como servidor de bd sql7.

y en cuanto al aconexion de .net y sql7, tengo claro que es mejor hacerlo a mano, lo que pasa es que no encuentro un ejemplo claro de como hacerlo (ni local, ni remoto) ya que he visto varios string's de conexion pero no logro un ejemplo que funcione puntualmente con sql7. Si es posible que tengas un pequeño ejemplo de una conexion a sql7 desde .net te agradezco.
y de nuevo gracias por su ayuda