Autor Tema: Ejemplo ADO sin cerrar conexion  (Leído 4628 veces)

0 Usuarios y 2 Visitantes 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
Ejemplo ADO sin cerrar conexion
« en: Septiembre 19, 2011, 03:16:41 pm »
Bueno en vista de querer mejorar cree este pequeño ejemplo para ir depurando algunas cosas que estaba mal a según mis compañero.

Link del proyecto: http://www.megaupload.com/?d=3F1A3WET
Esta bien este método ?

Modulo -1


Código: [Seleccionar]
Option Explicit

Public mc As ADODB.Connection   'Conexion Principal
Public rs As ADODB.Recordset    'Recordset Principal

'Public mCmd As ADODB.Command   'Para Ejecutar Comandos

Public ComandoSQL As String
Public SQL As String


Sub Main()
   
    On Error GoTo ErrorHandler
   
    Set mc = New ADODB.Connection
    Set rs = New ADODB.Recordset
   
    'Set mCmd = New ADODB.Command
   
    mc.ConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=control_hotel; User=root;Password=;Option=3;"
    mc.Open
   
    Form1.Show ' Aca mostras tu Formulario de inicio

ErrorHandler:
   
    If Err <> 0 Then
        MsgBox "Error Nº: " & Err.Number & vbCrLf & vbCrLf & Err.Source & vbCrLf & vbCrLf & Err.Description, vbCritical, "Error"
    End If

End Sub


EN el Form.


Código: [Seleccionar]
Dim xNFactura As Integer


Private Sub Form_Load()
    Call cmdLeerRegistros_Click
End Sub


Private Sub cmdLeerRegistros_Click()
   
    ListView1.ListItems.Clear
   
    If rs.State = adStateOpen Then rs.Close
   
    SQL = "SELECT * FROM proveedor"
    rs.Open SQL, mc, adOpenDynamic, adLockBatchOptimistic
   
    Do Until rs.EOF
        Set lv = ListView1.ListItems.Add()
        With rs
            lv.Text = .Fields("codigo")
            lv.SubItems(1) = .Fields("cedula") & ""
            lv.SubItems(2) = .Fields("nombre") & ""
            lv.SubItems(3) = .Fields("telefono1") & ""
            rs.MoveNext
        End With
    Loop
   
End Sub

Sub TRAER_NFACTURA()
   
    xNFactura = 0
   
    SQL = "SELECT numero FROM nfactura"
    If rs.State = adStateOpen Then rs.Close
    rs.Open SQL, mc, adOpenDynamic, adLockBatchOptimistic, adCmdText
   
    Do Until rs.EOF
        xNFactura = rs.Fields("numero") + 1
        rs.MoveNext
    Loop

End Sub

Private Sub cmdGuardar_Click()
   
    Call TRAER_NFACTURA
   
    V01 = "'" & xNFactura & "'"
    V02 = "'CIBER'"
   
    mc.BeginTrans
   
        For i = 1 To 5
            ComandoSQL = "INSERT INTO proveedor (cedula,nombre) VALUES (" & V01 & "," & V02 & ")"
            mc.Execute ComandoSQL
        Next i
       
        ComandoSQL = "UPDATE nfactura SET numero = " & V01
        mc.Execute ComandoSQL
   
    mc.CommitTrans

End Sub


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:Ejemplo ADO sin cerrar conexion
« Respuesta #1 en: Septiembre 19, 2011, 03:44:04 pm »
Esta bien, lo unico que yo te recomiendo es que uses Recordset diferentes...

Por ejemplo para tus proveedores rsProveedor as RecordSet, facturas rsFacturas as RecordSet, en fin..

De manera que tengas todo ordenado...! Ya que si realizas varias busquedas anidadas, se vuelve un problemon...!

Saludos
Miguel Núñez.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ejemplo ADO sin cerrar conexion
« Respuesta #2 en: Septiembre 19, 2011, 07:59:44 pm »
Concuerdo con Miguel N.
Me encuentras en YAcosta.com

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Ejemplo ADO sin cerrar conexion
« Respuesta #3 en: Septiembre 19, 2011, 08:48:55 pm »
En que sentido es problemon algún ejemplo para salir de la duda, este método no me va a crear problema si uso en red, por que unos de mi cliente vive en otra ciudad y con el método que yo usaba no tengo problema. El podía hacer su consulta desde otra ciudad sin problema.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Ejemplo ADO sin cerrar conexion
« Respuesta #4 en: Septiembre 19, 2011, 09:50:39 pm »
En que sentido es problemon algún ejemplo para salir de la duda, este método no me va a crear problema si uso en red, por que unos de mi cliente vive en otra ciudad y con el método que yo usaba no tengo problema. El podía hacer su consulta desde otra ciudad sin problema.

haber, algo que debes saber es que no importa si te funciona "bien", a veces que "funcione" no quiere decir que este bien.

hay veces que las cosas se pueden solucionar de varias maneras, pero una siempre es la mejor, y si usas la "peor" forma te va a dar el mismo resultado que la mejor y por eso te va a parecer que la foma que usabas "era suficiente".

el modulo es el que puse yo en el foro de VB MUNDO no ? esta bien.

el recordset publico llamado "rs" se usa para consultas rapidas, o sea funciones que necesite recuperar un valor y lo cerras, por ejemplo saber el ultimo ID de una tabla, abris el recordset, sacas el valor y cerras, asi de simple.

pero para hacer otras cosas que necesites hacer mas operaciones, ya vas a necesitar declarar los recordset que vos quieras como local en el formulario.

lo que esta mal es esto:

Código: [Seleccionar]
If rs.State = adStateOpen Then rs.Close
no es necesaro para cargar el listview, despues de Loop lo cerras con rs.Close

y la funcion que trae el numero de factura deberia ser una funcion que retorne un valor, asi te ahorras la variable.

y no abras los recordset con adOpenDynamic, el adOpenFordwardOnly es el mas rapido de todos, y mas si solo necesitas recorrerlo para adelante solamente.

saludos.