AYUDA. NO SE EJECUTA EL IF

Rossana
17 de Julio del 2004

Aquí el valor introducido en txtpropici es numérico, es una cédula. Lo que trato es ver si la cédula se repite en la tabla1, si está se ejecuta el mensaje "Existe" sino sigue al siguiente, pero acá así yo introduzca en txtpropici una cédula que está en la tabla1 no se muestra el mensaje. Si alguien puede ver lo que está ocurriendo por favor.

Dim buscacedula As Long
TABLA1.MoveFirst
Do While TABLA1.EOF = False
buscacedula = Val(txtpropici)
If (TABLA1!cedula) = " & buscacedula & " Then
MsgBox "Existe"
Exit Do
Else
TABLA1.MoveNext
End If
Loop

Bartolom
17 de Julio del 2004
TAL COMO TE RESPONDI ANTERIORMENTE EN TU OTRO POSTEO, UTILIZA EL MÉTODO FIND, NO EL FINDFIRST NI EL SEEK. VAS A VER QUE RESULTA DE INMEDIATO, YA QUE RECORRE TODO EL RECORDSET.

Ah, y la expresión " & buscacedula & " escríbela así:

" ' & buscacedula & ' "

Saludos
Bartolom
Chile

Rossana
17 de Julio del 2004
He intentado todas las maneras. También con el FIND, pero tampoco funcionó. Utilicé este código:

buscacedula as long
buscacedula = txtpropici
tabla.movefirst
tabla.find "campocedula = buscacedula"
if not tabla.eof then
msgbox "EXISTE"
end if

Sabrás si ésta es la sintaxis correcta

Saludos!

tecniCam
17 de Julio del 2004
Ejemplo de los métodos FindFirst, FindLast, FindNext y FindPrevious

Este ejemplo utiliza los métodos FindFirst, FindLast, FindNext y FindPrevious para mover el puntero del registro de un objeto Recordset basado en una cadena de búsqueda suministrada y un comando. Se necesita la función EncontrarCualquiera para ejecutar este procedimiento.

Sub FindFirstX()

Dim dbsNeptuno As Database
Dim rstClientes As Recordset
Dim strPaís As String
Dim varMarcador As Variant
Dim strMensaje As String
Dim intComando As Integer

Set dbsNeptuno = OpenDatabase("Neptuno.mdb")
Set rstClientes = dbsNeptuno.OpenRecordset( _
"SELECT NombreCompañía, Ciudad, País " & _
"FROM Clientes ORDER BY NombreCompañía", _
dbOpenSnapshot)

Do While True
' Obtiene una entrada del usuario y construye la cadena de búsqueda.
strPaís = _
Trim(InputBox("Introduzca el país a buscar."))
If strPaís = "" Then Exit Do
strPaís = "País = '" & strPaís & "'"

With rstClientes
' Llena el Recordset.
.MoveLast
' Encuentra el primer registro que coincide
' con la cadena de búsqueda. Sale del bucle si no existe ningún registro.
.FindFirst strPaís
If .NoMatch Then
MsgBox "No se encontraron registros con " & _
strPaís & "."
Exit Do
End If

Do While True
' Almacena el marcador de posición del registro actual.
varMarcador = .Bookmark
' Obtiene la elección del usuario del método a utilizar.
strMensaje = "Compañía: " & !NombreCompañía & _
vbCr & "Ciudad: " & !Ciudad & ", " & _
!País & vbCr & vbCr & _
strPaís & vbCr & vbCr & _
"[1 - Primero, 2 - Último, " & _
vbCr & "3 - Siguiente, " & _
"4 - Anterior]"
intComando = Val(Left(InputBox(strMensaje), 1))
If intComando < 1 Or intComando > 4 Then Exit Do

' Utiliza el método Find seleccionado. Si
' falla Find, vuelve al último registro actual.
If EncontrarCualquiera(intComando, rstClientes, _
strPaís) = False Then
.Bookmark = varMarcador
MsgBox "No hay coincidencias –volviendo al " & _
"registro actual."
End If

Loop

End With

Exit Do
Loop

rstClientes.Close
dbsNeptuno.Close

End Sub

Function EncontrarCualquiera(intChoice As Integer, _
rstTemp As Recordset, _
strEncontrar As String) As Boolean

' Utiliza el método Find basado en la entrada del usuario.
Select Case intChoice
Case 1
rstTemp.FindFirst strEncontrar
Case 2
rstTemp.FindLast strEncontrar
Case 3
rstTemp.FindNext strEncontrar
Case 4
rstTemp.FindPrevious strEncontrar
End Select

' Establece el valor devuleto basado en la propiedad NoMatch.
EncontrarCualquiera = IIf(rstTemp.NoMatch, False, True)

End Function

tecniCam
17 de Julio del 2004
Ejemplo de las propiedades Filter y RecordCount
Este ejemplo utiliza la propiedad Filter para abrir un nuevo objeto Recordset basado en una condición especificada aplicada a un objeto Recordset existente. Utiliza la propiedad RecordCount para mostrar el número de registros de ambos objetos Recordset. La función FilterField es necesaria para poder ejecutar este procedimiento.

Public Sub FilterX()

Dim rstPublishers As ADODB.Recordset
Dim rstPublishersCountry As ADODB.Recordset
Dim strCnn As String
Dim intPublisherCount As Integer
Dim strCountry As String
Dim strMessage As String

' Abre un objeto Recordset con datos de la tabla Editores.
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
Set rstPublishers = New ADODB.Recordset
rstPublishers.CursorType = adOpenStatic
rstPublishers.Open "editores", strCnn, , , adCmdTable

' Llena el objeto Recordset.
intPublisherCount = rstPublishers.RecordCount

' Obtiene la entrada del usuario.
strCountry = Trim(InputBox( _
"Escriba el país por el que desea filtrar:"))

If strCountry <> "" Then
' Abre un objeto Recordset filtrado.
Set rstPublishersCountry = _
FilterField(rstPublishers, "País", strCountry)

If rstPublishersCountry.RecordCount = 0 Then
MsgBox "No hay editores de ese país."
Else
' Imprime el número de registros del objeto Recordset
' original y del objeto Recordset filtrado.
strMessage = "Pedidos del conjunto de registros original: " & _
vbCr & intPublisherCount & vbCr & _
"Pedidos del conjunto de registros filtrado (País = '" & _
strCountry & "'): " & vbCr & _
rstPublishersCountry.RecordCount
MsgBox strMessage
End If
rstPublishersCountry.Close

End If

End Sub

Public Function FilterField(rstTemp As ADODB.Recordset, _
strField As String, strFilter As String) As ADODB.Recordset

' Establece un filtro sobre el objeto Recordset especificado y,
' después, abre un nuevo objeto Recordset.
rstTemp.Filter = strField & " = '" & strFilter & "'"
Set FilterField = rstTemp

End Function

Nota Cuando se conocen los datos que se desean seleccionar, suele ser más eficiente abrir un objeto Recordset con una instrucción SQL. El ejemplo siguiente ilustra cómo se puede crear un único objeto Recordset y obtener registros de un país específico.

Public Sub FilterX2()

Dim rstPublishers As ADODB.Recordset
Dim strCnn As String

' Abre un objeto Recordset con datos de la tabla Editores.
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
Set rstPublishers = New ADODB.Recordset
rstPublishers.CursorType = adOpenStatic
rstPublishers.Open "SELECT * FROM Editores " & _
"WHERE País = 'EE.UU.'", strCnn, , , adCmdText

' Imprime los datos actuales en un objeto Recordset.
rstPublishers.MoveFirst
Do While Not rstPublishers.EOF
Debug.Print rstPublishers!pub_name & ", " & _
rstPublishers!country
rstPublishers.MoveNext
Loop

rstPublishers.Close

End Sub

tecniCam
17 de Julio del 2004
Si ya dices que es numérico, ¿por qué marcas la variable <buscacedula> entre comillas?

Astonifer
17 de Julio del 2004
sencillameente digita este c{odigo:

Dim buscacedula As single
TABLA1.MOVEFIRST
TABLA1.FINDFIRST"CEDULA=" & VAL(TXTPROPICI)
IF TABLA1.NOMATCH THEN
MSGBOX "NO EXISTE"
ELSE
MSGBOX "EXISTE"
ENDIF

CLARO QUE BUSCAS SOLO UN DATO ESPECIFICADO SIN UTILIZAR EL DO WHILE
CUALQUIER COSA [email protected]
SUERTE