Ayuda con VB6 y BD

Estoy comenzando a aprender a trabajar con Bases de Datos desde Visual Basic 6, pero se me han presentado hasta ahora tres inconvenientes que no se como resolverlos.
El Primer Inconveniente:

Al colocar este código: "If Data1.Recordset.RecordCount = 0 then." en un formulario en "Form_Load "(Al cargar o abrir el formulario), me sale lo siguiente.
 "Error '91' en tiempo de ejecución: Variable de tipo Object de bloque With no esta establecida"
Después de largo rato tratando de resolver el problema, me funcionó cambiando de "Form_Load" a "Form_Active". De esta manera funciona perfectamente. Pero sin embargo, me gustaría saber porque me sale este error y como solucionarlo para cuando me vuelva ocurrir en futuras ocasiones.
 ____________________________________________________________________
Y el Segundo Inconveniente:

Al colocar el código siguiente:
Data1. Recordset. AddNew
Label2.Caption = Val(Data1.Recordset.RecordCount) + 1   '"Este seria el N° de ID"
Data1. UpdateRecord
Data1. Refresh

Me sale el siguiente error.
"Error '3426' en tiempo de ejecución: Esta acción fue cancelada por el objeto asociado"

Tengo bastante rato tratando de solucionarlo pero nada.
Te explico.
Esas 4 líneas de código las coloco dentro de un Botón "GUARDAR" (Command1_Clik) y es cuando me sale el error.
Sin embargo, en otro botón "NUEVO" (Command2_Click) si coloco solo las dos primeras líneas de código:
"Data1.Recordset.AddNew" y
" Label2.Caption = Val(Data1.Recordset.RecordCount) + 1"
      
Y en el Botón "GUARDAR" coloco las otras dos lineas de código:
"Data1.UpdateRecord" y
"Data1.Refresh"
De esta manera, funciona perfectamente.
La cosa es que yo quisiera eliminar el botón "NUEVO" para que en el botón "GUARDAR" haga las dos cosas simultáneamente, es decir que añada un nuevo registro y automáticamente guarde los datos del mismo.
 _________________________________________________________________
Y el tercer y ultimo Inconveniente:
Como debo hacer para realizar una consulta especifica a mi base de datos. Es decir si por ejemplo, tengo una tabla con una lista de 1000 personas y solo quiero visualizar personas del sexo femenino y que estén entre el rango de edad de "20 a 30" años.
¿Cuál seria el código para esto?
¿Podría ser en un FlexGrid la visualización y como?
Espero que no te sea complicado entenderme y me puedas ayudar en esto.
Respuesta
1
Lo más práctico que se me ocurre para tu segunda pregunta del botón "nuevo" es que lo puedes ucultar en la userform para que no se vea y utiliza esta instrucción en la userform que lo contiene, cambiale a la userform el nombre como aparece aquí..
Private Sub UserForm_Activate()
CommandButton1_Click
Con esto se activará automáticamente el botón nuevo al activarse la userform...
Te aconsejo poner solo una consulta por vez para tener tiempo de ayudarte...
Después te contesto la tercera...

5 respuestas más de otros expertos

Respuesta
1
Te voy a ayudar pero primero que nada yo no trabajo con data, estas muy limitado.
Así que vamos a seguir trabajando con recordset pero la conexión la vamos a hacer con código y después trabajamos con los recordset
el primero error puede ser que al cargar el load no tengas seteado el data o el recordset
es un error común de cuando un objeto no es declarado o no tiene la conexión a la base de datos.
Y el seg y ter problema lo vamos a solucionar sacando el data del sistema
si te parece bien seguimos adelante y te paso el código para que empieces a trabajar
conexión, y abm para las modificaciones
saludos
Leandro
Gracias por responderme...
Ok... Me parece excelente lo que me dices. Cuando quieras me mandas el código y me explicas en lo posible como funciona
Gracias de nuevo
Primero la conexión
Esto lo pones en un modulo conexión
Public Cn As ADODB.Connection
Public Rs As ADODB.Recordset
Public Rs1 As ADODB.Recordset
Public Rs2 As ADODB.Recordset
'declaras las variables publicas
Public Sub Coneccion()
'On Error GoTo ERRORES
    Set Cn = New ADODB.Connection
    sruta = App.Path & ("\anses.mdb")
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sruta & ";" & _
    "jet OLEDB:DATABASE PassWORD = sololea"
Exit Sub
ERRORES:
    MsgBox "Error en la Conexión a la Base de Datos", vbExclamation, "Error en Conexión"
    End
End Sub
Public Sub Abre(consulta As String)
'On Error GoTo ERRORES
Set Rs2 = New ADODB.Recordset
Rs2.Open consulta, Cn, adOpenDynamic, adLockOptimistic, 1
Exit Sub
ERRORES:
MsgBox "Error a Realizar SQL en la Base", vbExclamation, "Error en Consulta"
End Sub
dos procedimientos, uno para la conexion, tenes que poner la tuya
Y el otro es para recibir la consulta, podes agregar más parámetros para los tipos de cursores y lectura.
despues en el form en el load pones
Call Coneccion
ahi vas a llamar a la conexion para que se conecte a la base
ejemplo de un boton alta
Private Sub cmdalta_Click()
'On Error GoTo ERRORES
    Call Abre("select * from datos_prof")
    Rs.AddNew
        Rs!cuil = ArmaCuil
        Rs!legajo = txtleg.Text
        Rs!apellido = txtnombre.Text
        If txtcargo.Text <> "" Then
            Rs!cargo = txtcargo.Text
        End If
    Rs.Update
        Rs.Close
    MsgBox "SE DIO DE ALTA EL PROFESOR", vbExclamation, "NUEVO PROFESOR"
    Call Vaciar
    txtleg.SetFocus
Exit Sub
ERRORES:
   MsgBox "Error al Dar de Alta el Profesor, Verifique Datos", vbExclamation, "Error en Alta"
End Sub
ejemplo de un boton modificar
Private Sub cmdmodif_Click()
'On Error GoTo ERRORES
    Call Abre("select * from datos_prof where CUIL = '" & ArmaCuil & "' and legajo = " & txtleg)
            Rs!legajo = txtleg
            Rs!apellido = txtnombre
            Rs!cargo = txtcargo.Text
Rs.Update
        Rs.Close
        MsgBox "SE MODIFICO LOS DATOS DEL PROFESOR", vbExclamation, "MODIFICO DATOS PROFESOR"
        txtleg.SetFocus
    Else
    MsgBox "Debe Seleccionar un Profesor de la grilla", vbInformation, "ABM Profesores"
End If
Exit Sub
ERRORES:
MsgBox "Verificar Los Datos, !!!Recuerde Que el Cuil no se Modifica una Vez Cargado¡¡¡", vbExclamation, "Error en la Modificación"
End Sub
ejemplo de un boton eliminar con pregunta incluida
'On Error GoTo ERRORES
Private Sub cmdbaja_Click()
If ArmaCuil <> "" Then
    If MsgBox("Seguro Desea Eliminar al Profesor", vbExclamation + vbYesNo, "Eliminación de un Profesor") = vbYes Then
      Call Abre("delete * from datos_prof where CUIL = '" & ArmaCuil & "' and legajo = " & txtleg)
      Call Abre("delete * from licencias where CUIL = '" & ArmaCuil & "' and legajo = " & txtleg)
      txtleg.SetFocus
    End If
  Else
    MsgBox "Debe Seleccionar un Profesor de la grilla", vbInformation, "ABM Profesores"
End If
Exit Sub
ERRORES:
MsgBox "Error al Eliminar, Por Favor Verificar datos e intentar de Vuelta", vbExclamation, "Error"
Bueno es importante que leas y revises como se una un recordset, hay muchas formas de trabajarlos, esta forma es la más sencilla de aprender después vas a ir viendo que hay manera de trabajar los cursores para que tenga menos recursos la maquina y etc.
También hay muchísimas maneras de hacer una conexión, en internet tienes muchas variantes.
Empezá por el alta así vas ganando confianza y con 2 o 3 campos como mucho y le vas agregando de a poco.
Bueno, cualquier duda me avisas
Respuesta
1
1. En el load no se ha cargado aun los datos en el control... eso supongo, porque yo jamas trabajado con esos controles
2. El label no hace parte del control de datos por eso te aparece el error, debes asignarle valores a cada campo del registro algo como data1. Recordset. fields(1) = "algo". Como te dije antes, es posible que no sea la sintaxis correcta, la debes investigar.
3. Para esto debes crear una consulta en SQL a la base de datos.
Revisa el curso de VB6 de guille, lo encuentras en www.elguille.info
Respuesta
1
para lo primero, entra aqui http://www.recursosvisualbasic.com.ar/htm/tutoriales/tutorial-basico2.htm
Ahí hay una referencia a lo que preguntas.
Para lo segundo no trabajo con data.
Y para lo tercero, debes aprender SQL inmerso, así se hará más fácil el tema de ejecutar vía query las consultas. por ejemplo SELECT * FROM personas WHERE sexo = 'Femenino' AND edad BETWEEN '20' AND '30'
Eso es una query y ademas eso mismo lo puedes poner en un formulario en un botón en lo que quieras... cualquier consulta no dudes en preguntarlo t epuedo ayudar...
Respuesta
-1
Pues como todos empezamos sin conocer nada de la programación, tomamos lo que creemos que es fácil je je pero no te preocupes, acá te dejo mi página en Taringa para que mejor utilices el DataGrid que es el más común para hacer lo que me pides pues tiene más cosas y mejor manejabilidad que el data.
Post Taringa Visual Basic 6
Acá te espero para ver que dudas te provoca el Datagrid, también te dejo mi correo ([email protected]) por si necesitas ayuda más especifica o en tiempo real por messenger.
Un Saludo.. Feliz Halloween xD..
L.I. Juan Carmona.
Respuesta
-1
Para poderte ayudar mejor necesito que me envíes tu proyecto a [email protected] para checar mejor todo tu código e identificarlo más fácil.
Disculpa por tardar en responder, no volverá a pasar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas