Hola gusto en saludarle, mire trabajo con VB 6.0, tengo una form1 con un Combo1 y una Base de Datos en Access la cual tiene una tabla que contiene código, producto y preciounitario, y deseo cargar de la BD la columna producto al Combo1. Gracias de antemano.
1 Respuesta
Respuesta de athrarn
1
1
athrarn, - Sistemas Operativos : - MS-DOS, Windows 3
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 ACCESS 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