Controlar si no encuentra .Seek

Buenas, agradezco si podéis ayudarme.

Pido un código y lo busco en la base de datos y lo muestro en un formulario. Si no existiera quiero abrir otro formulario y crearlo. No se como verificar que no exista, pues lo puedo poner donde el código de error "Salida", pero no lo veo correcto. Adjunto el código

Gracias.

Public eluno As String

Private Sub Alternar1_Click()
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Pacientes")
With rst
.Index = "PrimaryKey"
eluno = InputBox("Entre el si a buscar:", , "555")
On Error GoTo salida
.Seek "=", eluno
' MsgBox (.SI & "-" & .Nombre & " " & .Apellidos & " GEnial")
' DoCmd.OpenForm "Pacientes2", , , , acFormEdit
DoCmd.OpenForm "Pacientes2", , , "[SI] ='" & eluno & " ' ", acFormEdit
salida:
MsgBox Err.Description
End With
' Form!PacientesF6
End Sub

Respuesta
1

Sería algo así... no lo he comprobado

dim db as database

set db=currentdb

dim rs as recordset

dim num_paciente as integer

num_paciente=555

set rs=db.openrecordset("select count (pacientes_id) as cuenta1 from pacientes where paciente=" & num_paciente)

' Si recordcount es >0 quiere decir que tienes algún paciente con ese ID, si no, es que no hay ninguno

if rs.recordcount>0 then

' Esta no es la manera mas eficiente de pasarle el parámetro... pero si tienes pocos pacientes (menos de 100000 por ejemplo), te funcionará perfectamente

docmd.openform "Pacientes2",,,"[pacientes_id]=" & num_paciente

end if

rs.close

set rs=nothing

Gracias, voy a verificarlo.

Veo que pusiste un valor fijo para el paciente y numérico, y no es así, es texto (y el valor lo tenia como opción en el InputBox).

COmo es de texto ¿cambiara Set rs = db.OpenRecordset("select count (SI)...?

Y el "If rs.RecordCount > 0 Then" ¿ya no seria 0, seria Null?

Voy a intentar adaptarlo, gracias

Perdona, creo que me he colado en la anterior respuesta... prueba esta mejor

dim db as database
set db=currentdb
dim rs as recordset
dim num_paciente as integer
num_paciente=555
set rs=db.openrecordset("select count (pacientes_id) as cuenta1 from pacientes where paciente=" & num_paciente)
if rs.recordcount>0 then

rs.movefist

dim cuenta1 as integer

cuenta1=cint(nz(rs.fields("cuenta1"))

if cuenta1>0 then

'
Esta no es la manera mas eficiente de pasarle el parámetro... pero si
tienes pocos pacientes (menos de 100000 por ejemplo), te funcionará
perfectamente
docmd.openform "Pacientes2",,,"[pacientes_id]=" & num_paciente
end if
rs.close
set rs=nothing

Lo siento, no me funciona. Da error de compilación en en la línea " rs.Movefist" , y no se como corregirlo.

rs.movefirst, me deje una R :)

Ok ahora compila. Pero sigo sin saber pasarlo para texto (por favor mira mi primer comentario donde te digo que no es numérico ni dato fijo). Gracias de todas formas

Uf, da error compilación en la linea "cuenta1=cint(nz(rs. ..." ,

Muchas gracias Experto.

Gracias a tus sugerencias, y las pruebas de variación para el campo a buscar sea texto, di con el resultado que funciona (puede que no sea el mejor).

EL "if .NoMacth then" fue la solución para el control de la búsqueda .Seek fallida.

Pongo el código por si puede ayudar a otras personas.

 Private Sub Alternar1_Click()
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Pacientes")
 With rst
 .Index = "PrimaryKey"
 eluno = InputBox("Entre el sip a buscar:", , "555")
 On Error GoTo salida
 .Seek "=", eluno
 If .NoMatch Then
 MsgBox "No se encontro ese registro!"
 Else
 MsgBox (!SIP & "-" & !Nombre)
 MsgBox (.SIP & "-" & .Nombre & " " & .Apellidos & " GEnial")
 DoCmd.OpenForm "Pacientes2", , , "[SIP] ='" & eluno & "'", acFormEdit
End If
salida:
 MsgBox Err.Description
 End With
 ' Form!PacientesF6
End Sub

Reitero mis agradecimientos.

Aunque posiblemente por mi mala explicación tu código no era exactamente para el tipo de dato texto, me ayudo mucho a seguir investigando y probar. Ademas Aprendí como hacerlo cuando necesite campo numérico.

Una duda que no investigue, ¿donde estaba el error de compilación que comente en el penúltimo comentario?.

Muchas gracias, por esa luz cuando estamos perdidos en el túnel.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas