Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: E N T E R en Abril 27, 2011, 01:33:13 pm
-
Hola amigos del foro aca con una duda con el ADO estoy usando MySQL 5.1 y mi duda es cual me conviene utilizar entre estos:
adOpenDynamic, adOpenForwardOnly, adOpenKeyset, adOpenStatic
'//----> Esto lo tengo en un modulo
Public cnADO As ADODB.Connection '// Conexion ADO
Public rsADO As ADODB.Recordset '// RecordSet ADO
Public StrSQL As String '// Parametro para MySQL
Public ComandoSQL As String '// Comando MySQL
Public Sub ConectarADO()
Set cnADO = New ADODB.Connection
Set rsADO = New ADODB.Recordset
rsADO.CursorLocation = adUseClient
cnADO.ConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=control_stock; User=root;Password=123;Option=3;"
cnADO.Open
End Sub
Public Sub CerrarADO()
cnADO.Close
Set cnADO = Nothing
Set rsADO = Nothing
End Sub
'//----> Esto en un Boton
Private Sub Command2_Click()
StrSQL = "SELECT codigo FROM clientes"
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
'// Conectar la Base Datos con ADO
Call ConectarADO
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
'--> ACA ES MI DUDA QUE TENGO QUE UTILIZAR AHI
rsADO.Open StrSQL, cnADO, adOpenStatic, adLockOptimistic, adCmdText
Text1.Text = rsADO.Fields("CODIGO")
rsADO.MoveNext
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
'// Cerrar la base de datos y liberar la memoria
Call CerrarADO
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
End Sub
La idea con este programa es crear un cliente/servidor. Por eso es mi duda cual es el que mas me conviene.
-
Te explico como realizo yo la conex a mi BD usando Cliente - Servidor. NO importa si es MySQL, Firebird, Oracle, SQL Server, SQL Front, etc... Lo que sea...! Te explico..!
Tengo un Modulo llamado: ModConex.Bas
'Declaro mi variable de Conexión
Public NewConnection As New ADODB.Connection
'Realizo mi conexión
Public Sub Abrir_Conex()
Dim StrConnectionString as String
StrConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=BudGet;Data Source=MNUNEZ" 'Aca va tu string de conexión. Por ser MySQL usas ODBC...!
NewConnection.CursorLocation = adUseServer
NewConnection.ConnectionString = StrConnectionString
NewConnection.CommandTimeout = 0
NewConnection.Open
End Sub
Y para aperturar la conex usa asi en el Load o donde inicializas el proyecto.
Private Sub Form_Load()
Abrir_Conex
End Sub
Cómo puedes saber el estado de tu conexión?
Ejecuta un: Debug.Print NewConnection.State
Si devuelve 1 esta conectado, si devuelve 0 no esta conectado...!
Ahora, para abrir una tabla y ejecutar una consulta SQL, Qué hago? OK aquí voy...
En el mismo Modulo ModConex.Bas
Public Sub OPENTABLA(Xrecordset As ADODB.Recordset, xselect As String, NWConnection As ADODB.Connection, tipocursor As Integer, Optional MuestraError As Boolean)
On Error GoTo basedato
If Xrecordset.State = adStateOpen Then Xrecordset.Close
Xrecordset.ActiveConnection = NWConnection
Xrecordset.CursorType = adOpenDynamic
Xrecordset.CursorLocation = tipocursor
Xrecordset.LockType = adLockOptimistic
Xrecordset.Open xselect
Exit Sub
On Error GoTo 0
basedato:
If MuestraError = True Then
MsjExc "Operación no permitida. " + Err.Description + " Error numero " + Str(Err.Number)
Resume Next
End If
End Sub
Cómo uso eso??? Aquí voy...!
'Para realizar un insert
Dim RSInsertar As New ADODB.Recordset
OPENTABLA RSInsertar, "INSERT INTO tbl_txt(id_cuenta_contable,id_unidad_negocio,id_status,det_txt,obs_txt)Values(" & ID_CC & "," & ID_UN & "," & Status & ",'" & Detalle & "','" & Observacion & "')", NewConnection, 3
'Para realizar un delete
Dim RsEliminar As New ADODB.Recordset
OPENTABLA RsEliminar, "Delete From tbl_txt where id_cuenta_contable=" & ID & " and id_unidad_negocio=" & ID_UNIDAD & "", NewConnection, 3
'Para realizar un Update
Dim RsActualizar As New ADODB.Recordset
OPENTABLA RsActualizar, "Update tbl_txt set Monto = '" & FormatNumber(txtMonto.text,2) & "' where id_cuenta_contable=" & ID & " and id_unidad_negocio=" & ID_UNIDAD & "", NewConnection, 3
'Para realizar un select y visualizar un registro
'Ejemplo obtenido de mi sistema
Public Sub Movimiento_MES()
On Error Resume Next
Dim Ver_Monto As New ADODB.Recordset
OPENTABLA Ver_Monto, "SELECT Monto_Mes FROM tbl_TXT WHERE id_cuenta_contable=" & ID_CC & " and id_unidad_negocio=" & ID_UNIDAD, NewConnection, 3
If Ver_Monto.State = 1 Then
If Ver_Monto.EOF = False Then
txtMontoMes.Text = FormatNumber(Ver_Monto!Monto_Mes, 2)
End If
End If
End Sub
Bueno espero te sea de ayuda esto..! Saludos
-
ssccaann43 MUCHISIMAS gracias por responder, creo que no me explique bien, la duda que yo tenia es solamente con estos cursores.
adOpenDynamic, adOpenForwardOnly, adOpenKeyset, adOpenStatic
Yo estoy usando esta forma: rsADO.Open StrSQL, cnADO, adOpenStatic, adLockOptimistic, adCmdText
y vos estas usando esta forma
Xrecordset.CursorType = adOpenDynamic
La duda que tengo es como se que cursor utilizar. Solo eso quiero saber y por que utilizarlo ese.
-
Ok, te explico un poco sobre los cursores y bloqueos...
Tipos de cursores para la propiedad RecordSet.CursorType
Tipo de Cursor: adOpenForwardOnly
Valor: 0
Descripción: Cursor por defecto; permite recorrer el recordset en forma secuencial.
Tipo de Cursor: adOpenKeySet
Valor: 1
Descripción: Permite moverse hacia delante y atrás en el recordset. Permite observar las modificaciones en los datos, pero no si existen ingresos de nuevos registros.
Tipo de Cursor: adOpenDynamic
Valor: 2
Descripción: Permite moverse en cualquier sentido, viendo cualquier ingreso, modificación, eliminación de datos en el recordset.
Tipo de Cursor: adOpenStatic
Valor: 3
Descripción: Permite moverse en cualquier sentido, pero no se verá ningún cambio ocurrido en la tabla.
Tipos de bloqueo para la propiedad RecordSet.LockType
Tipo de Bloqueo: adLockReadOnly
Valor: 1
Descripción: Es el bloqueo por defecto y no permite modificar los registros de la tabla.
Tipo de Bloqueo: adLockPessimistic
Valor: 2
Descripción: Una vez que la tabla es abierta, la misma queda bloqueada para los demás usuarios.
Tipo de Bloqueo: adLockOptimistic
Valor: 3
Descripción: La tabla sólo será bloqueada a los demás usuarios mientras se ejecute una operación de actualización (update). De esta forma la tabla se bloqueará durante menos tiempo que con el método anterior.
Tipo de Cursor: adBatchOptimistic
Valor: 4
Descripción: Los registros serán actualizados por lotes (batch).
-
Mas claro que el agua imposible. Entonces el que mas me conviene usar es esta:
Tipo de Cursor: adOpenDynamic
Valor: 2
Descripción: Permite moverse en cualquier sentido, viendo cualquier ingreso, modificación, eliminación de datos en el recordset.
Gracias: :D
-
Pero si solo vas a llenar reportes o informes mejor es usar adOpenKeySet o adOpenStatic porque es un poco mas rápido.