Desde Venezuela, quisiera saber como hago en visual basic para controlar una bd en sql es 2000, aplicando formularios tal como si estuviera en uno de los ejemplos de access
Respuesta de athrarn
1
1
athrarn, - Sistemas Operativos : - MS-DOS, Windows 3
Lo que quieres hacer, si no te he entendido bien, es una conexión remota a la base de datos de SQL Server y a partir ella, controlarla a partir de formularios generados en Visual Basic. Para ello, te remito a una pregunta que ya me hicieron a la que contesté esto (la he modificado para SQL Server) : Create una conexion ADO de este estilo : Me genero una clase para controlar la conexión y añado al menu de referencias las Microsoft Ado 2.5 Library. La clase es de este estilo : Option Explicit Private Conexion As ADODB.Connection Dim innerRS As ADODB.Recordset Private Sub Class_Initialize() On Error GoTo FalloConexion Set Conexion = New ADODB.Connection Conexion.ConnectionString = strMontarCad(LOGIN, PASS, "", SERVICIO) Conexion.Open Exit Sub FalloConexion: MsgBox Err.Description End Sub Private Function strMontarCad(ByVal PestrUsuario As String, ByVal PestrClave As String, ByVal PestrServidor As String, ByVal PestrBD As String) As String Dim mCadenaConex As String ' Esta era la cadena para conectar a Oracle 'mCadenaConex = "Provider=MSDAORA.1;Password=" & PestrClave & ";User ID=" & PestrUsuario & ";Data Source=" & PestrBD & ";Persist Security Info=True" ' Otra cadena para conectar a Oracle, pero por OLEDB 'mCadenaConex = "Provider=OraOLEDB.Oracle.1;Password=" & PestrClave & ";User ID=" & PestrUsuario & ";Data Source= " & PestrBD & ";Persist Security Info=true" ' La que te interesa, para conectar con SQL SERVER ' O esta : 'mCadenaConex = "server=tonydev;database=northwind;uid=tony;pwd=hrmmm"' O esta 'mCadenaConex = "server=tonydev;database=northwind;trusted_connection=yes" 'Una cadena para conectar con ACESS 'mCadenaConex = "Provider =Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\BaseDeDatos\Primarios.mdb;" strMontarCad = mCadenaConex End Function Public Function ExecuteQuery(SQL As String) As ADODB.Recordset Set innerRS = New ADODB.Recordset innerRS.CacheSize = 30 InnerRS. Open SQL, Conexion. ConnectionString, adOpenForwardOnly, adLockBatchOptimistic, adAsyncFetch Set ExecuteQuery = innerRS End Function Public Sub ExecuteSQL(SQL As String) Conexion. BeginTrans Conexion.Execute SQL Conexion.CommitTrans DoEvents End Sub Private Sub Class_Terminate() If (Conexion.State <> adStateClosed) Then Conexion.Close End If End Sub Una vez creada la clase, digamos que la llamamos ClsConexion. Se usaria de este modo : Te declaras un objeto de la clase : Public Conexion As ClsConexion Set Conexion = New ClsConexion Una vez declarado el objeto, para generar una consulta solo debes hacer lo siguiente : Dim SQL As String Dim rsPrivado As Recordset SQL = "Select PAGOS from TABLAPAGOS " Set rsPrivado = Conexion.ExecuteQuery(SQL) ' A partir de esto, rsPrivado contiene los datos de la consulta. De este modo, ' rsPrivado(0).value sera el primer campo del valor resultado de la SQL Y en este caso el único... Para el caso 2 : SQL = "Select APELLIDOS from TABLAAPELLIDOS where APELLIDOS <> 'MEZA ALVA' GROUP BY APELLIDOS" Set rsPrivado = Conexion.ExecuteQuery(SQL) En este caso, para recorrerte los campos de la consulta, tendrás que hacerlo de este modo : ' Desde el primer elemento, al último... While Not rsPrivado.EOF msgBox( rsPrivado(0)) ' Escribir rs(Privado(0) es lo mismo que poner rsPrivado ("APELLIDOS") ' Bien, ahora pasariamos al siguiente elemento... rsPrivado.MoveNext ' Y cerramos el bucle... Wend Si obteniendo los campos de ese modo y almacenas un array de IDs por registro, solo tienes que hacer los updates y los deletes por SQL Con el objeto conexión y el método executeSQL. Ahora si, antes de hacer la actualización o borrado del campo, puedes validar que este existe. Con la sentencia Select. Así cargo yo un combo : Dim rsPrivado As Recordset Dim SQL As String SQL = "Select " & CampoId & " , " & CampoDescripcion & _ " from " & strTabla If Where <> "" Then SQL = SQL & " WHERE " & Where End If SQL = SQL & " GROUP BY " & CampoId & " , " & CampoDescripcion SQL = SQL & " ORDER BY " & CampoDescripcion Set rsPrivado = Conexion.ExecuteQuery(SQL) While Not rsPrivado.EOF Me.Combo1.AddItem rsPrivado(1) ReDim Preserve ArrayPosicionID(0 To Combo1.ListCount - 1) ArrayPosicionID(UBound(ArrayPosicionID)) = rsPrivado(0) rsPrivado.MoveNext Wend If Combo1.ListCount <> 0 Then Combo1.ListIndex = 0 End If