Una duda de access 2003

Hola hace poco te hice una pregunta con respecto a que quería hacer un formulario
Para ingresar datos pero que mi sentencia sql no me tomaba lo que ingresaba en el cuadro de texto. Por cierto eso ya esta completamente solucionado.
Utilizo la tabla Persona: rut, dinero
Mi formulario es el siguiente:
rut: [cuandro de texto llamado txtrut]
Dinero: [cuadro de texto llamado txtdinero]
[boton insertar llamado cmdinsertar]
Resulta que si presiono insertar y no he escrito nada en los cuadros de arriba, ¿me manda a un error =S... Sabes como podría controlar ese error? Por ejemplo: si no hay nada en los campos desplegar un mensaje "debe ingresar los campos" y que se devuelva al formulario para reintentarlo.
¿Una cosa más como puedo abrir un formulario aparatir de un evento?
Tengo un botón que se llama ver tabla y cree una consulta en sql que me muestra todosl os datos de la tabla Persona. Mi idea es que al hacer click en el botón se abra ese formulario.
Muchísimas gracias por tu tiempo nuevamente ;D... Que dios t bendiga ;D

1 respuesta

Respuesta
1
If IsNull(Form!txtRut.Value)=True or IsNull(form!txtdinero.Value)=true then
MsgBox("Debe ingresar los campos")
Else
DoCmd.Runsql "Insert Into ..........
End If
Para abrir un formulario:
DoCmd. OpenForm "NombreFormulario", acNormal
Muchas gracias ;D, una ultima cosa. ¿Cómo puedo comprobar que un dato esta ne mi base de datos para así no agregarlo?
intente con un if docmd.findrecord "& form!txtrut.value",,true,,true pero no me deja. incluso agrego el then pero tapoco me deja.
¿Alguna idea de como hacerlo?... muchísimas gracias por tu tiempo ;D tu ayuda a sido indispensable para mi ;D
Una ultima cosita ><. Resulta que quiero usar un formulario para borrar
RUt: [cuadro de texto llamado txtborrarrut]
[boton borrar llamado cmdborrar]
Este código utilice (para el botón):
 Private Sub cmdborrar_Click()
Dim SQL2 As String
If IsNull(Form!txtborrarrut.Value) = True Then
MsgBox ("Debe Ingresar el rut para Borrar el registro")
GoSub salir
Else
SQL2 = "DELETE FROM Persona WHERE rut=" & Form!txtborrarrut.Value & ""
DoCmd.RunSQL SQL2
End If
salir:
End Sub
Pero me tira error. Se que el problemas es el parámetro que le estoy entregando ya que si le pongo un valor directamente me funciona.
como  le entrego los parametros a una sentencia DELETE? para una sentencia UPDATE es distinto? muchas gracias nuevamente ;D
¿Sabes lo que es un recordset?
Es porque, si no lo sabes, explicártelo y sino ir directamente al grano.
Hasta luego, Angeles
nop, la verdad no se lo que es =S
Vale,
Hemos hablado de colecciones y objetos, un recordset es un objeto de la colección recordsets del objeto database. Esto es para después, para relacionarlo al objeto al que pertenece su colección. Básicamente un recordset es una vista de la tabla, es decir una consulta de selección. Mediante un recordset, por ejemplo, podemos recorrer los registros seleccionados de una tabla con el bucle Do While ... Loop. Pero un recordset también sirve para decirnos si la consulta devuelve resultados o no, por ello lo utilizaremos para saber si el registro existe o no en la tabla.
Para declarar variables en access, si son privadas, es decir actúan unicamente para el código en el que estás, se utiliza Dim NombreVariable As, se pueden declarar variable de tipo string Dim vTexto As string, de tipo numérico Dim vNum As double... pero también hay que declarar los objetos que vamos a utilizar. Por ello tendremos que declarar el objeto Base de Datos al que pertenece el recordset y el propio objeto recordset.
En definitiva, el código sería:
Dim db As Database
Dim rs As Recordset
'Nos referimos a la BD en la que estamos trabajando:
Set db=CurrentDb()
'Abrimos el recordset:
Set rs=db.Openrecordset("Select * from Persona where rut='" & form!txtRut.Value & "'")
'Como verás el recordset (rs) lo referimos al objeto al que pertenece (db)
'Ahora vemos si nos devuelve registros o no
If IsNull(rs!rut)=True then 'referimos el campo rut al recordset rs al que pertenece
msgbox("No existe")
else
msgbox("Existe")
end if 
Ahora miro tú otra pregunta.
En la sql del DELETE ¿Qué error te da exactamente?
Me dice que ha ocurrido el error 3464 en le tiempo de ejecución, no coinciden los datos en la expresión de criterios
te dejo una imagen =). Rut es del tipo texto.
Saludos
Como es de tipo texto tiene que ir entre comillas simples:
='" & Form!txtborrarrut.Value & "'"
pero si lo tengo = como lo pusiste 
SQL2="DELETE FROM Persona Where rut="& form!txtborrarrut.Value &" "
En una respuesta anterior te dije esto:
Para meter este valor en una sql harías:
Si el campo al que quieres igualar es de texto:
'" & form!txtRut.Value & "'
si es numérico:
" & form!txtRut.Value & "
si es de tipo fecha:
cDate('" & form!txtRut.Value & "')
por lo que si el campo rut es de texto tendrás que poner
SQL2="DELETE FROM Persona Where rut='" & form!txtborrarrut.Value & "'"
aaaa ok, muchas gracias ;D, me sirvio mucho =). No me había dado cuenta que eran comillas simples entre las comillas.
Con respecto al recorset tengo una duda. cuando dices
if IsNull(rs!rut) estas diciendo si el valor del rut que devuelve la consula sql "Select * from Persona where rut='" & form!txtRut.Value & "'" es nulo o no no ?
El problema es que no se por que no me toma esa condición y me dice que todo Existe
de hecho puedo dejar la casilla de texto en blanco (por que hice un formulario para ver si un registro existía o no, de manera de entender tu código) (la casilla la llame txtesta) y al apretar el botón preguntar (cmdesta) me sale el box "Existe"
es como si no me estufiera tomando el IF.
Saludos  y muchas gracias por todo tu tiempo =), realmente me estas ayudando =P
Efectivamente con IsNull le estoy preguntando se devuelve registros o no, como el cuadro de texto se llama txtesta la consulta la tendrás que igualar a este campo:
where rut='" & form!txtEsta.Value & "'"
¿Lo has hecho así?
si, lo use así. Mira este es mi código
Private Sub cmdesta_Click()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("select * from Persona where rut='" & Form!txtesta.Value & "'")
If IsNull(rs!rut) = True Then
MsgBox ("NO existe")
Else
MsgBox ("Existe")
End If
End Sub
Me da la sensación de que no toma la sentencia SQL.
Saludos
Para comprobar que te devuelve la sql pon, entre el recordset y el If un mensaje:
Set rs.......
MsgBox(rs!rut)
If IsNull.....
A ver que nos devuelve.
Puse un mensaje entre el if y el record set:
Set rs = db.OpenRecordset("select * from Persona where rut='" & Form!txtesta.Value & "'")
MsgBox ("hola")
If IsNull(rs!rut) = True Then
Y me lo tira antes de e lmensaje existe (como debería ser)
Lo raro es que si dejo el cuadro de texto en blanco no me alega por que la sentencia sql este mala, como me pasaba cuando quería agregar (ya que estaría igualando el valor de rut a null)
Por alguna extraña razón me esta tomando el Else y me muestra el mensaje existe.
Lo que quiero decir es que pongas en el mensaje rs! Rut (el valor del campo rut) para ver lo que te devuelve
aaa perdón, hice lo que me pidió . Si pongo un valor de rut que esta en la tabla me muestra el mismo numero, pero si ese valor no existe me sale el error 3021 que dice: No hay ningún registro activo
Efectivamente, al no existir registros no hay ni nulo ni nada.
Tenemos que utilizar la función EOF() el EOF se activa cuando llegamos al final del fichero, como un recordset cuando se abre siempre se posiciona en el primer registro (si tiene registros obviamente) la función nos devolvuelve Falso, pero si no tiene registros, la función nos devolverá Verdadero, es decir estamos al final del fichero y no podemos leer registros.
Private Sub cmdesta_Click()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("select * from Persona where rut='" & Form!txtesta.Value & "'")
If rs.Eof = True Then
MsgBox ("NO existe")
Else
MsgBox ("Existe")
End If
End Sub
Esto se utiliza mucho en los bucles Do While ... Loop
supón que quieres recorrer los registros de un recordset rs harías:
Do While Not rs. Eof 'Mientras no sea final de fichero hazme
... el código que sea, actualizar registros, insertar...
...
Rs. MoveNext 'nos movemos al siguiente registro
Loop 'volvemos al principio del bucle
Esto último para que entiendas un poco mejor como funciona EOF
Me cuentas.
Se me ocurre... También puedes hacer con IsNull pero al revés, es decir si tiene un valor... sino ...
Private Sub cmdesta_Click()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("select * from Persona where rut='" & Form!txtesta.Value & "'")
If IsNull(rs!rut) = False Then
MsgBox ("existe")
Else
MsgBox ("NO Existe")
End If
End Sub
De las dos formas debería de funcionar.
Ya me contarás

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas