Visual Basic - Ayuda con Control Data

Life is soft - evento anual de software empresarial
 
Vista:

Ayuda con Control Data

Publicado por ALH76 (278 intervenciones) el 09/09/2006 07:11:33
Buen dia a todos.

Tengo un problema y no se como resoverlo, mejor dicho, no lo entiendo, veran:

Estoy comenzando a desarrollar un pequeña aplicacion, la BD esta elaborada en Access 97. En mi formulario pongo un Control Data para manejar una tabla de esa BD, cuando la tabla se encuentra sin registro y la mando cargar, no me arroja ningun problema, pero cuando ingreso el primero registro me indica "El objeto no admite esta propiedad o metodo" y luego sigue con el proceso, es decir, si da de alta el registro.

Cuando salgo del formulario y lo cargo nuevamente, ahora si me arroja el mismo error desde q estoy cargando el formulario. Resumiendo, cuando la tabla no tiene registros todo funciona bien, pero al agregar un registro comienza a indicarme el error antes mencionado.

Para cargar la tabla pongo este codigo:
Data1.DatabaseName = App.Path & "\Control.mdb"
Data1.RecordSource = "Subestaciones"
Data1.Refresh

y cuando agrego algun registro pongo este otro codigo (solo es parte):
NomSe = InputBox("Introduzca el nombre de la subestación que desea agregar:", "Agregar subestación")
If NomSe <> "" Then
'Buscar la subestación en la tabla para verificar q no esta
Data1.Recordset.FindFirst "Se='" & NomSe & "'"
If Data1.Recordset.NoMatch Then
If Data1.Recordset.EOF = True Then
'Obtenemos el Id de la ultima compañia para agregarle 1 como consecutivo
NumSe = 1
Data1.Recordset.AddNew
Data1.Recordset!Id = NumSe
Data1.Recordset!Se = NomSe
Data1.Recordset.Update
Data1.Refresh

Deduzco q el problema esta en el control Dara, pero en q parte?

Ojala me pueda brindar su ayuda para este problema q no me deja seguir con mi proyecto.

Agradezco desde ya su valiosa ayuda.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con Control Data

Publicado por Xavi (2 intervenciones) el 09/09/2006 08:58:58
lo tienes que hacer es moverte al ultimo registro para captar el id

If NomSe <> "" Then
'Buscar la subestación en la tabla para verificar q no esta
Data1.Recordset.FindFirst "Se='" & NomSe & "'"

If Data1.Recordset.NoMatch Then ' si no loencuentra entra
Data1.Recordset.MoveLast ' se mueve al final de la base de datos
'Obtenemos el Id de la ultima compañia para agregarle 1 como consecutivo
NumSe = Data1.Recordset!id + 1 ' teniendo en cuenta que esta ordenada por el "Id"
Data1.Recordset.AddNew
Data1.Recordset!id = NumSe
Data1.Recordset!Se = NomSe
Data1.Recordset.Update
Data1.Refresh
End If

End If

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con Control Data

Publicado por ALH76 (278 intervenciones) el 09/09/2006 17:27:29
Gracias por tu respuesta Xavi, pero no funciono, de hecho asi lo tenia en un inicio y despues tuve q agregar la linea de Data1.Recordset.EOF ya q cuando agregaba por primera ocasion un registro me indicaba un error donde decia q "No hay ningun registro activo" (error 3021). Cuando agrego la linea de comando antes mencionada, soluciono el error 3021, pero repito, cuando la tabla no tiene registros no me indica ningun error, sin embargo al ingresar el primer registro, comienza a mostrar el error "El objeto no admite esta propiedad o metodo".

Alguna otra idea al respecto, de verdad q me tiene intrigado este error, no se por donde entrarle.

Gracias por tu valiosa ayuda.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con Control Data

Publicado por Ronald Mavarez (15 intervenciones) el 09/09/2006 18:00:17
Ok, el Problema 3021 es obviamente por que no tienes registros en la bd, no tiene en donde buscar, usa el metodo recordcount para validar si esta bs tiene registros o no, ahi te pongo una funcion sencila pa comprobar

Function Registros() As Boolean
On Error Resume Next
Dim A
Me.Data1.Recordset.MoveLast
A = Me.Data1.Recordset.RecordCount
Me.Data1.Refresh
If A >= 1 Then
Registros = True
Else
Registros = False
End If
End Function

y con respecto al metodo o propiedad "Data1.Recordset.FindFirst". este ejecuta una busqueda en la bd, pero me parece mejor una consulta directa para que puedas visualizar mejor tu codigo, por ejemplo, el recordsource es como un asistente de consultas en donde tu especificas elo que quieres de la base de datos, nunca me han gustado los asistentes por lo que pongo mis consultas directas, por ejemplo, tu cuando colocas "Subestaciones", el objeto data intepreta que es el nombre de la tabla y le envia a la base de datos esta consulta "Select * from Subestaciones", en tu caso para buscar deberias utilizar uno como este que esta debajo

Dim valor
valor = "1" 'buscara este valor en la consulta
Data1.RecordSource = "select * from Subestaciones where Se = " & valor ' Se es el nombre del campo donde va abuscar

Data1.Refresh ' esto solo te te devuelve los registros que cumplan con esta condicion
'para tener todos los registros otra vez usa data1.recordsource = "select * from Subestaciones"

Espero que te haya servido de algo, cualquier duda puedes bajar un tutorial de consultas Sql en Access o preguntar de nuevo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con Control Data

Publicado por ALH76 (278 intervenciones) el 11/09/2006 03:04:39
Ok Ronald, agradezco todo tu comentario y tienes toda la razon en cuanto al Recordset, en cuanto al error 3021, como dije en la nota anterior, ya esta resuelto.

Mi problema es el mismo. Cuando abro la tabla y esta se encuentra sin registros todo funciona bien, pero al ingresar el primer registro me dice q "El objeto no admite esta propiedad o metodo", esto sucedo cuando agrego el primer registro, pero si lo agrega, despues cierro el proyecto y lo vuelvo abrir y desde alli me esta indicando el error señalado.

En las lineas de codigo he quitado algunas como un Data1.Refresh y me doy cuenta q ahi no me marca el error, por lo cual pienso q el control Data no esta del todo bien.

He estado buscado informacion en Internet y puede ser q sea algo sobre el motor Microsoft Jet, pero si saben algo mas y pueden orientarme al respecto lo agradeceria mucho.

Estoy utilizando una BD hecha en Access 97.

Este es solo parte del codigo cuando abro el form:
Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\ControlV97.mdb"
Data1.RecordSource = "Subestaciones"
Data1.Refresh

Y este cuando agrego un registro:
NomSe = InputBox("Introduzca el nombre de la subestación que desea agregar:", "Agregar subestación")
If NomSe <> "" Then
'Buscar la subestación en la tabla para verificar q no esta
Data1.Recordset.FindFirst "Se='" & NomSe & "'"
If Data1.Recordset.NoMatch Then
'Ponemos el orden por Id para obtener el ulimo numero
'Option1.Value = True
If Data1.Recordset.EOF = True Then
'Obtenemos el Id de la ultima compañia para agregarle 1 como consecutivo
NumSe = Data1.Recordset!Id + 1
Data1.Recordset.AddNew
Data1.Recordset!Id = NumSe
Data1.Recordset!Se = NomSe
Data1.Recordset.Update
Data1.Refresh

Repito cuando quito la linea Data1.Refresh, ya no me indica el error.

Alguna sugerencia al respecto, de verdad necesito resolver este embrollo.

Nuevamente mil gracias por leer esta nota.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con Control Data

Publicado por Jasall (60 intervenciones) el 09/09/2006 22:25:14
Buenas, quizas el problema esta en el codigo que te falta por mostrar, con lo que muestras lo que hace es grabar 1 registro el primero ya que con este codigo solo se encontrara con la condicion Eof la primera vez que ejecutes la aplicacion con la db vacia, luego al tener un registro la bd no volvera a entrar en la condicion.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar