Espero me puedas ayudar

Tengo un problema, espero me puedas ayudar... Tengo una base de datos en mysql, realizo una conexión a ella mediante myodbc, la conexión a esta no me da problemas, el problema radica en que los cursores un cursor que abro dentro del formulario siempre me devuelve BOF = TRUE Y EOF = TRUE AUNQUE EXISTAN DATOS DENTRO DE LA TABLA SOBRE LA QUE HAGO EL CURSOR, no se si es las propiedades del cursor o que, he intentado de todas las formas y nada,
mi correo es [email protected], si puedes enviarme el tuyo para explicarte mejor, y enviarte el fuente te lo agradecería, tengo como dos semanas trancado por ese problema, de todas maneras si puedes contestarme por este medio seria de gran ayuda...
Este es el código que utilizo para ver si le encuentras detalles al momento de abrir el curor o cualquier otra cosa:
Public WithEvents Configuracion As ADODB.Recordset
Private IdVida As Integer
Dim MiError As ADODB.error
Dim v_Des As String
Public mNumero As String
Public mFecha As String
Public nTipoD As String
Dim sWhere As String
Private Sub Form_Load()
On Error GoTo CONEXION
Dim sSql As String
Set DB = New ADODB.Connection
Set Configuracion = New ADODB.Recordset
'conecta con la base de datos formara parte del modulo
DB.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" _
& "SERVER=localhost;" _
& "DATABASE=registro;" _
& "UID=root;" _
& "PWD=;" _
& "OPTION=" & 1 + 2 + 8 + 32 + 2048 + 16384
DB.Open
EstadoOpcion False, 0
' indica el tipo de cursor del recordset
With Cb_identificacion
.AddItem ("Cedula")
.AddItem ("Pasaporte")
.AddItem ("Sin Identificación")
End With
'''ABRIR CONFIGURACION PARA HACER LAS PRUEBAS DEL FORM PARA LAS VARIABLES
'''QUE SE UTILIZAN AL GUARDAR
sSql = "SELECT * FROM Configuracion"
With Configuracion
.Open sSql, DB
gv_jefe = !Cfg_Jefe
gv_prefe = !Cfg_prefe
gv_secre = !cfg_secre
'gv_Autor = !Cfg_Autor
gv_gaceta = !Cfg_Gaceta
gv_Fechag = !Cfg_FecGaceta
gv_res = !Cfg_Res
gv_Fecres = !Cfg_FecRes
gv_encargado = !Cfg_encargado
End With
Configuracion.Close
Set Configuracion = Nothing
Set Vida = New ADODB.Recordset
sSql = "SELECT * FROM Vida"
With Vida
.CursorType = adOpenKeyset
.CursorLocation = adUseClient
.Open sSql, DB, adOpenDynamic, adLockOptimistic
End With
'''''''''''''''''' envia mes de error en caso de ocurrir
CONEXION:
If Not Err.Number = Empty Then
For Each MiError In DB.Errors
MsgBox ("Error VB:" & MiError.Number & vbCrLf _
& "Error Oracle:" & MiError.NativeError & vbCrLf _
& "Error SQL:" & MiError.SQLState & vbCrLf _
& "Generado Por:" & MiError.Source & vbCrLf _
& "Descripción:" & MiError.Description)
Next
End If
End Sub
Private Sub Guardar()
On Error GoTo Mensaje
IdVida = tx_control.Text
With Vida
' aqui es donde nunca se cumple
If Not .BOF And Not .EOF Then
.Find "fe_corr = " & IdVida
End If
If Not .EOF Then
asignar 'carga los datos
'!usr_mod
!fe_fecmod = Now
.Update
tx_control.Text = !fe_corr
StatusBar1.Panels(3).Text = "Registro Modificado....."
Else
.AddNew
!fe_fecha = Now
!fe_ano = Year(Now)
Call asignar 'carga los datos
.Update
tx_control.Text = !fe_corr
' INCREMENTAR NRO HASTA QUE CAMBIE DE AÑO
Set ConfActas = New ADODB.Recordset
With ConfActas
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.Open "Conf_Actas", DB
.AddNew
!nro_acta = tx_control.Text '"53" 'Tx_nro.Text ' ESTAS VARIABLES SE CARGARAN EN LA
!ano = Tx_ano.Text 'PANTALLA PRINCIPAL
!tipo_doc = "V"
!jefe = gv_jefe
!secre = gv_secre
!prefectura = gv_prefe
!Gaceta = gv_gaceta
!fec_gaceta = gv_Fechag
!resolucion = gv_res
!fec_resolucion = gv_Fecres
!encargado = gv_encargado
.Update
.Close
Set ConfActas = Nothing
End With
StatusBar1.Panels(3).Text = "Registro Añadido....."
End If
End With
Opcion(1).Enabled = True
Menu(1).Enabled = False
Mensaje:
If Not Err.Number = Empty Then
For Each MiError In DB.Errors
MsgBox ("Error VB:" & MiError.Number & vbCrLf _
& "Error Oracle:" & MiError.NativeError & vbCrLf _
& "Error SQL:" & MiError.SQLState & vbCrLf _
& "Generado Por:" & MiError.Source & vbCrLf _
& "Descripción:" & MiError.Description)
Next
End If
End Sub

1 Respuesta

Respuesta
1
Cópiate este ejemplo en un nuevo Proyecto de Visual basic y ejecutalo! Aquí veras las cuatro operaciones básicas de base de datos que tu necesitaras para utilizar ADO con MySQL.
Espero que te sea de ayuda.
Cualquier cosa vuelve a consultarme.
Private Sub myodbc_ado_Click()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim sql As String
'connect to MySQL server using MySQL ODBC 3.51 Driver
Set conn = New ADODB.Connection
conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};"_
& "SERVER=localhost;"_
& " DATABASE=test;"_
& "UID=root;PWD=; OPTION=3"
conn.Open
'create table
conn.Execute "DROP TABLE IF EXISTS my_ado"
conn.Execute "CREATE TABLE my_ado(id int not null primary key, name varchar(20)," _
& "txt text, dt date, tm time, ts timestamp)"
'direct insert
conn.Execute "INSERT INTO my_ado(id,name,txt) values(1,100,'venu')"
conn.Execute "INSERT INTO my_ado(id,name,txt) values(2,200,'MySQL')"
conn.Execute "INSERT INTO my_ado(id,name,txt) values(3,300,'Delete')"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseServer
'fetch the initial table ..
rs.Open "SELECT * FROM my_ado", conn
Debug.Print rs.RecordCount
rs.MoveFirst
Debug.Print String(50, "-") & "Initial my_ado Result Set " & String(50, "-")
For Each fld In rs.Fields
Debug.Print fld.Name,
Next
Debug.Print
Do Until rs.EOF
For Each fld In rs.Fields
Debug.Print fld.Value,
Next
rs.MoveNext
Debug.Print
Loop
rs.Close
'rs insert
rs.Open "select * from my_ado", conn, adOpenDynamic, adLockOptimistic
rs.AddNew
rs!Name = "Monty"
rs!txt = "Insert row"
rs.Update
rs.Close
'rs update
rs.Open "SELECT * FROM my_ado"
rs!Name = "update"
rs!txt = "updated-row"
rs.Update
rs.Close
'rs update second time..
rs.Open "SELECT * FROM my_ado"
rs!Name = "update"
rs!txt = "updated-second-time"
rs.Update
rs.Close
'rs delete
rs.Open "SELECT * FROM my_ado"
Rs. MoveNext
Rs. MoveNext
rs.Delete
Rs. Close
'fetch the updated table ..
rs.Open "SELECT * FROM my_ado", conn
Debug. Print rs. RecordCount
Rs. MoveFirst
Debug.Print String(50, "-") & "Updated my_ado Result Set " & String(50, "-")
For Each fld In rs.Fields
Debug.Print fld.Name,
Next
Debug.Print
Do Until rs.EOF
For Each fld In rs.Fields
Debug.Print fld.Value,
Next
Rs. MoveNext
Debug. Print
Loop
Rs. Close
Conn. Close
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas