Buscaacento

Hola soy antonio domínguez, otra vez. Te escribo para comentarte que si se pone la función Yaexiste siempre encuentra una cadena en la base de datos que coincide y es que se encuentra a sí misma. El código sin ese error queda así. Supongo que no es una solución muy elegante pero así funciona. Si hay otra cosa m, ejor simelo y así lo aprendo y si hay que pagarte por consultas me lo dices también. Ante todo muchas gracias. Ahí va:
Private Sub Comando7_Click()
Dim repe As Boolean
repe = Yaexiste(Me.Apellidos, Me.Nombre) 'se le pasa a la funcion los campos nombre y apellidos actuales del formulario
If repe Then
MsgBox "ya existe un cliente con ese mismo nombre y apellido"
End If
End Sub
Function Yaexiste(NApellidos, NNombre) As Boolean
Dim mibd As Database, mirec As Recordset, criteria As String, flag As Integer
Set mibd = CurrentDb()
Set mirec = mibd.OpenRecordset("Tabla1", dbOpenSnapshot)
criteria = "[Apellidos] & [Nombre] Like '" & Buscaacent(NApellidos & NNombre) & "'"
mirec.MoveFirst
mirec.FindFirst criteria
If Not mirec.NoMatch Then
mirec.FindNext criteria
If Not mirec.NoMatch Then
Yaexiste = True
Else
Yaexiste = False
End If
End If
End Function
Dudas:
1.- Quiero que no tenga que pulsar ningún botón para que se ejecute este procedimiento, sino que actualñice la base y lo ponga en marcha la base solita. HE pensado en que cuando el enfoque este en añadir o en una textbox se ejecute, no se si es lo mejor.
Gracias
1

1 Respuesta

9.725 pts.
Cuando he hecho la función ha sido pensando en la manera en que yo habitualmente trabajo. Para dar un alta utilizo un formulario distinto que sirve para validar los datos y luego para alimentar la tabla de clientes y un histórico de movimientos...
Perfectamente puede valer dar de alta en el mismo formulario, pero entonces cambian los planteamientos:
La comprobación de si está repetido deberías meterla en los eventos beforeupdate de apellidos y de nombre, así aún no existiría en la tabla si fuese el primero. Como es posible que uno de los dos fuese nuelo, habría que meter un nz() en los parámentros
Private sub Apellidos_beforeupdate(cancel)
Dim repe As Boolean
repe = Yaexiste(nz(Me.Apellidos),nz( Me.Nombre)) 'utilizamos nz para evitar problemas de nulos
If repe Then
MsgBox "ya existe un cliente con ese mismo nombre y apellido"
...
cancel=true ' Poniendo cancel=true evitamos que el campo se actualice
End If
end sub
Private sub nombre_beforeupdate(cancel)
Apellidos_beforeupdate(cancel)
end sub
Utilizando este método evitamos tener que usar Findnext pues se buscamos antes de que estén los datos en la tabla.
En el contexto en que tú lo utilizabas quizás fuera más elegante usar count o dcount en lugar de Findfirst-Findnext, pero, ¡Que coño! Lo verdaderamente elegante es trabajar lo menos posible para conseguir los mismos resultados y si tú ya has dado con una solución.
He estado tentado de sugerirte que la búsqueda la hicieras en el recordsetclone del formulario en vez de en la tabla, pero luego me he dado cuente de que éste puede estar filltrado ...
Lo de pagar por las consultas... Serías el primero, aunque me lo estoy planteando.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas