¿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

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

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

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

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
- Compartir respuesta
