¿Como crear una macro con formularios para que me genere una información desde SQL?

Necesito una ayuda para crear una macro con formulario para generar información desde SQL, quiero que me busque en una base de datos el número de agencia que yo quiera y que me muestre los resultados de dicha agencia en una hoja excel

1 Respuesta

Respuesta
1

Asumo que te refieres a SQL Server pero no mencionas que versión usas. Hay que hacerlo todo con VBA, ADO (es lo que yo recomiendo siempre) y usando sentencias SQL pero para no seguir bajo supuestos, quizá algunos detalles ayuden a ayudarte.

Abraham Valencia

Ya,lo que quiero es un formulario donde tenga campos de texto servidor, usuario, contraseña, y un parámetro (en este caso sería codigo_agencia) la  consulta SQL sería : select *from Siafd.F7101 where cod_agencia=12, sería con VB, conexión ADO, no tengo mucho conocimiento en macros 

¿Versión de SQL SErver?

Abraham Valencia

SQL server 2012 v 11.0

ESTO ES EL CODIGO DEL FORMULARIO

Private Sub txtUsuario_Change()

Hoja2.Range("B2") = Me.txtUsuario.Value

End Sub

Private Sub txtContrasena_Change()

Hoja2.Range("B3") = Me.txtContrasena.Value

End Sub

Private Sub txtServidor_Change()

Hoja2.Range("B1") = Me.txtServidor.Value

End Sub

Private Sub txtUnopct_Change()

Hoja2.Range("B4") = Me.txtUnopct.Value

End Sub

Private Sub CommandButton1_Click()

'Dim ConsultaSQL As String

    'ConsultaSQL = Me.txtUnopct.Value

        'Application.ScreenUpdating = False

        'Hoja1.Cells.ClearContents

        'Call ConectarSQL(Sql, TextBox)

        'Me.txtQuery.SetFocus

        'Application.ScreenUpdating = True

    End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Private Sub UserForm_Initialize()

With Me

    .txtServidor.Value = Hoja2.Range("B1").Value

    .txtUsuario.Value = Hoja2.Range("B2").Value

    .txtContrasena.Value = Hoja2.Range("B3").Value

    .txtUnopct.Value = Hoja2.Range("B4").Value

    .txtUnopct.SetFocus

End With

End Sub

Function ConectarSQL(Sql As String, TextBox As String)

Dim Columna, Fila

Dim Conect As Object

On Error GoTo ErrorHandler

'Creamos un Objeto de Conexión

Set Conect = CreateObject("ADODB.Connection")

' Especificamos la Conexión a utilizar

With formGenerar

    Servidor = .txtServidor.Value

    Usuario = .txtUsuario.Value

    pass = .txtContrasena.Value

    'base = .txtBaseDatos.Value

End With

   conexion = "Provider =IBMDA400; User ID=" & Usuario & "; Password=" & pass & _

           ";Data Source=" & Servidor & ";Transport Product=Client Access;SSL=DEFAULT"

Conect.ConnectionString = conexion

'Validación que verifica que los parámetros no estén vacíos

If Sql <> vbNullString And TextBox <> vbNullString Then

    'VARIABLE para el REC de ADO

    Dim RecordSet As Object

    'ABRIMOS la Conexión a la Base de Datos

    Conect.Open

    'CREAMOS un nuevo Objeto RecordSet

    Set RecordSet = CreateObject("ADODB.Recordset")

    'Ejecutamos el SQL para llamar al RecordSet

    Sql = "select *from Siad. F6101 where unopct=" &  unopct&"

'Sigue más Código

***He Tratado de modificar ese Código pero me arroja error, quiero que la información me lo arroje en una hoja excel

Lo primero que hay que hacer es asegurar que la conexión es correcta:

Dim cnn As ADODB.Connection
cnn.ConnectionString = "Driver={SQL Server Native Client 11.0};" _
& "Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;"
cnn.Open
MsgBox "Conectado a mi BD SQLServer"

Reemplaza el nombre del servidor,  el de la base de datos, usuario y contraseña

Comentas

Abraham Valencia

Ah, por cierto, verifica tener el Driver correcto ¿sabes en dónde verlo?

Abraham Valencia

Driver?  . ¿ Dónde lo veo? 

¿Cuál es tu sistema operativo?

Abraham Valencia

Lo de la conexión está correcto, lo que yo quiero es cómo generarlo con el CommandButton1_Click y que me lo arroje en una hoja Excel

Esto es como para que te guíes. Suponiendo que quieres los datos en la fila 1 y cada campo en una columna. Ah, todo en una fila porque se supone que por el "where" solo extraes un registro.

Sub ConexionSQLServer()
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sql As String
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
cnn.ConnectionString = "Driver={SQL Server Native Client 11.0};" _
& "Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;"
cnn.Open
sql = "Select * From Siafd.F7101 Where cod_agencia=12"
With rst
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open sql, cnn, , , adCmdText
End With
For x = 1 To rst.Fields.Count
MsgBox rst.Fields(x - 1).Value
Cells(1, x) = rst.Fields(x - 1).Value
Next x
Set cnn = Nothing
Set rst = Nothing
End Sub

Por supuesto el "12"  puede ser reemplazado por una variable o el valor de un objeto.

Comentas

Abraham Valencia

Gracias, y cómo haría para que me genere la información de esa consulta con un botón? 

Pues pon el código dentro del evento "click" de un botón, obvio sin el "Sub" y el "End"

Abraham Valencia

Me sale un error:  "no se ha especificado el tipo definido por el usuario" Y me marca el : Dim cnn As ADODB.connection

Mencionaste que lo de la conexión estaba bien así que asumí que ya tenías activada al referencia correspondiente: Microsoft ActiveX Data Objects 2.8 Library

OJO, ese 2.8 puede ser otra versión en tu PC, igual actívala

Abraham Valencia

No tienes un correo para poder comunicarme contigo?, te lo agradecería

¿Cuál es el tuyo? Igual propongo que cualquier resultado sí o sí se comparta por aquí

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas