Autor Tema: Duda con ADO adOpenStatic  (Leído 9278 veces)

0 Usuarios y 1 Visitante están viendo este tema.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Duda con ADO adOpenStatic
« 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.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Duda con ADO adOpenStatic
« Respuesta #1 en: Abril 27, 2011, 04:25:43 pm »
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

Código: [Seleccionar]
'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.

Código: [Seleccionar]
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

Código: [Seleccionar]
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...!

Código: [Seleccionar]
'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
Miguel Núñez.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Duda con ADO adOpenStatic
« Respuesta #2 en: Abril 27, 2011, 05:04:22 pm »
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.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Duda con ADO adOpenStatic
« Respuesta #3 en: Abril 27, 2011, 05:50:42 pm »
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).
Miguel Núñez.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Duda con ADO adOpenStatic
« Respuesta #4 en: Abril 27, 2011, 09:57:29 pm »
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
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Duda con ADO adOpenStatic
« Respuesta #5 en: Abril 28, 2011, 04:24:02 am »
Pero si solo vas a llenar reportes o informes mejor es usar adOpenKeySet o adOpenStatic porque es un poco mas rápido.
Me encuentras en YAcosta.com