• Jueves 14 de Noviembre de 2024, 16:46

Autor Tema:  Archivos Secuenciales  (Leído 2435 veces)

sircuit

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Archivos Secuenciales
« en: Domingo 6 de Febrero de 2005, 17:44 »
0
Si yo de nuevo :D hehe
saben que estaba aprendiendo a como hacer una mini agenda de manera que lea, escriba y borre (traspase) datos...
en fin... todo bien salvo la parte de lea o buscar datos por que al principio no hubo problema pero quise ponerle unos msgox para que se vea mejor que creo que tengo un problema con la estruccturacion de codigo ya que despues de leer los datos, si el text correspondiente a buscar es igual aa la variable que me ponga los datos, de lo contrario que me salga otro msgbox que me diga que no fueron encontrado... resulta que, apesar de que los encontro igual me tira la estrucctura del else lo cual no debiera ocurrir
miren:

Código: Text
  1.  
  2. Private Sub Command1_Click()
  3. Dim conf As Integer
  4. Open App.Path & "\datos.dat" For Input As 1
  5. Do While Not EOF(1)
  6. Input #1, namec
  7. Input #1, direc
  8. Input #1, telc
  9. Input #1, emc
  10. Input #1, comc
  11. If Text6.Text = namec Then
  12. Text1.Text = namec
  13. Text2.Text = direc
  14. Text3.Text = telc
  15. Text4.Text = emc
  16. Text5.Text = comc
  17. MsgBox "La ficha de " & Text6.Text & " ha sido encontrada", vbInformation + vbOKOnly, "Información"
  18. Else
  19. Call huhu
  20. End If
  21. Loop
  22. Close #1
  23. End Sub
  24.  
  25. Private Sub huhu()
  26. conf = MsgBox("La ficha de " & Text6.Text & " no ha sido encontrada." + vbCrLf + "Desea realizar una nueva busqueda ?", vbQuestion + vbYesNo, "Información")
  27. If conf = vbYes Then
  28. Text6.Text = ""
  29. Text6.SetFocus
  30. End If
  31. End Sub
  32.  
  33.  

espero que me puedan ayudar a identificar la parte erronea.
salu2

Jose Arriagada

  • Miembro MUY activo
  • ***
  • Mensajes: 373
    • Ver Perfil
Re: Archivos Secuenciales
« Respuesta #1 en: Lunes 7 de Febrero de 2005, 13:37 »
0
Lo que ocurre es que tienes un loop sin una condicion de termino en caso que encuentres lo que buscas.


Private Sub Command1_Click()
Dim conf As Integer
DIM FLAG AS INTEGER
FLAG=1
Open App.Path & "\datos.dat" For Input As 1
Do While Not EOF(1) AND FLAG=1
Input #1, namec
Input #1, direc
Input #1, telc
Input #1, emc
Input #1, comc
If Text6.Text = namec Then
FLAG=0
Text1.Text = namec
Text2.Text = direc
Text3.Text = telc
Text4.Text = emc
Text5.Text = comc
MsgBox "La ficha de " & Text6.Text & " ha sido encontrada", vbInformation + vbOKOnly, "Información"
Else
Call huhu
End If
Loop
Close #1
End Sub

sircuit

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Archivos Secuenciales
« Respuesta #2 en: Lunes 7 de Febrero de 2005, 16:53 »
0
mmm la verdad amigo es que eso no me soluciono el problema...
igual seria interesante que explicaras por que solo agregaste flag=1 y luego flag=0

lo que me ocurre es que si encuentra la ficha escrita dentro de las primeras lineas me la tira como ha sido encontrada ytodo bien... PERO si busco otra ficha me tira como que esa no ha sido encontrada y me sale DOS VECES ese msgbox y luego me dice que la encontro...

tambien si una ficha no esta en datos.dat me tira dos veces el mismo msgbox... por que sera esto ?

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Archivos Secuenciales
« Respuesta #3 en: Martes 8 de Febrero de 2005, 15:24 »
0
Hola.

Visto así por encima, creo que lo que debes hacer es eliminar el aviso de que no se ha encontrado coincidencia fuera del bucle: tal como está el mensaje aparecerá por cada uno de los registros que no coinciden.

La cosa quedaría asín:
Código: Text
  1.  
  2. Private Sub Command1_Click()
  3.    Dim iCanal As Integer, sPath As String
  4.    Dim bEncontrado As Boolean
  5.    sPath = App.Path
  6.    If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
  7.    iCanal = FreeFile
  8.    Open sPath & "datos.dat" For Input As #iCanal
  9.    Do Until bEncontrado Or EOF(iCanal)
  10.       Input #iCanal, namec
  11.       Input #iCanal, direc
  12.       Input #iCanal, telc
  13.       Input #iCanal, emc
  14.       Input #iCanal, comc
  15.       If Text6.Text = namec Then
  16.          Text1.Text = namec
  17.          Text2.Text = direc
  18.          Text3.Text = telc
  19.          Text4.Text = emc
  20.          Text5.Text = comc
  21.          MsgBox "La ficha de " & Text6.Text & " ha sido encontrada", vbInformation + vbOKOnly, "Información"
  22.          bEncontrado = True
  23.       End If    
  24.    Loop
  25.    if Not bEncontrado Then huhu
  26.    Close #iCanal
  27. End Sub
  28.  
  29. Private Sub huhu()
  30.    If MsgBox("La ficha de " & Text6.Text _
  31.    & " no ha sido encontrada." & vbCrLf _
  32.    & "Desea realizar una nueva busqueda ?" _
  33.    , vbQuestion + vbYesNo, "Información") = vbYes Then
  34.       Text6.Text = ""
  35.       Text6.SetFocus
  36.    End If
  37. End Sub
  38.  
  39.  

Chau.

sircuit

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Archivos Secuenciales
« Respuesta #4 en: Martes 8 de Febrero de 2005, 16:36 »
0
mmm interesante la forma que tomo pero dime una cosa

para que sirve la instruccion If Right(sPath, 1) <> "\" Then sPath = sPath & "\"

salu2

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Archivos Secuenciales
« Respuesta #5 en: Martes 8 de Febrero de 2005, 16:41 »
0
Hola sircuit.

Normalmente App.Path devuelve la vía de acceso de la aplicación sin el carácter "\" al final, pero... si resulta que la vía de acceso de la aplicación coincide con la raíz de una unidad, entonces devuelve C:\ o D:\ o lo que sea, es decir, con el carácter "\" al final. De ahí el interés de realizar siempre esa comprobación para evitar posibles errores si se da el caso.

Chao.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Archivos Secuenciales
« Respuesta #6 en: Martes 8 de Febrero de 2005, 16:43 »
0
Esta observando si el ultimo caracter es un contraslash, sino lo es, 'tonces le asigna a la variable el "\"
El pasado son solo recuerdos, el futuro son solo sueños

sircuit

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Archivos Secuenciales
« Respuesta #7 en: Martes 8 de Febrero de 2005, 19:23 »
0
:o que bien...
muchas gracias muhachos

pero...

tengo una duda mas:
por que la nececidad de declarar bEncontrado As Boolean y poner la sentencia Do Until bEncontrado Or EOF(iCanal), no seria maa conveniente como estaba el original osea do while not eof(iCanal) ?


salu2

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Archivos Secuenciales
« Respuesta #8 en: Miércoles 9 de Febrero de 2005, 14:32 »
0
Porque así te ahorras recorrer el resto del archivo una vez que ya has encontrado una coincidencia.

Adeus.

sircuit

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Archivos Secuenciales
« Respuesta #9 en: Miércoles 9 de Febrero de 2005, 16:51 »
0
:o muchas gracias
salu2