Newsgroup: it.comp.lang.visual-basic
Titolo: Ricerca in db3

Avrei la seguente richiesta da farvi.
Accedo ad un database dBIII (.dbf) (contenente una rubrica con codice, nome
telefono, indirizzo ecc.. di clienti) con l'oggetto data, rieco a gestirlo,
(aggiungere/modificare record ecc.) e funziona tutto bene.
Ora, diventato abbastanza grande, dovrei effettuare delle ricerche
inserendo, ad esempio, le prime tre/quattro lettere di un cliente. Vorrei
che con un command_button il database si portasse sul primo record che trova
e se ci sono più record che soddisfano la ricerca successivamente, ripremedo
il command_button della ricerca trovi il record successivo.
Purtroppo il "FindFirst" a quanto ho capito con dBIII non funziona.
Tempo fa avevo il problema di cercare se un record fosse o meno presente nel
database, questo sistema sarebbe adatto, se non fosse che nella ricerca è
necessario inserire tutto il nome del campo, perchè con le prime lettere non
funziona.
Vi "allego" il codice (tra l'altro preso da questo news un po' di settimane
fa, perfettamente funzionante) che per me si potrebbe adattare. Se ne avete
dell'altro + competitivo è chiaramente ben accetto.
----------------------------------------------------------------------------
---------------------
Private Sub Command1_Click()
On Error GoTo erh
Dim sUserInput As String
Dim rst As DAO.Recordset
Dim vBmk As Variant
sUserInput = InputBox("immetti codice", "CLIENTI - Ricerca x codice",
"ALFKI")
If (Len(sUserInput) = 0) Then
Else
With Me.Data1
Set rst = .Recordset.Clone
With rst
If ((.BOF = True) And (.EOF = True)) Then
    Else
    Do Until (.EOF = True)
    If (.Fields("SOCIETA").Value = sUserInput) Then
' IN QUESTO PUNTO invece di =sUserInput  non c'è un "sistema" per dire "i
primi caratteri di sUserInput  '= .fields'("SOCIETA").value??
    vBmk = .Bookmark
    Exit Do
    End If
    .MoveNext
    Loop
    End If
    .Close
    End With
    If IsEmpty(vBmk) Then
    MsgBox "il codice" & vbCrLf & "'" & sUserInput & "'" & "non esiste",
vbInformation + vbOKOnly
    Else
    .Recordset.Bookmark = vBmk
    End If
    End With
    End If
ext:
    On Error Resume Next
    rst.Close: Set rst = Nothing
    Exit Sub
erh: With Err
MsgBox (.Description), vbCritical + vbOKOnly, "ERR#" & .Number
End With
Resume ext
End Sub
----------------------------------------------------------------------------
---------------------
Sistema:
Visual Basic 6 enterprise
Win 2k
Celeron 1100 MHz -  256Mb ram
Spero di essermi espresso in maniera corretta.

 primi caratteri di sUserInput  '= .fields'("SOCIETA").value??
prova con
     If (.Fields("SOCIETA").Value LIKE "'" &  sUserInput & "*'") Then
Un'altra possibilità (devi vedere la logica del tuo programma) è quella di
creare su rst non il Clone del recset originario, ma un altro recset che
componi aggiungendo alla sezione Where originaria l'ulteriore condizione
Where:
... Select ... From ... Where varie_condizioni_originarie ...
 AND SOCIETA LIKE "'" & sUserInput & "*'"
sostituendo all'asterisco (solo in quest'ultimo comando SQL, non nella riga
di prima che è un semplice confronto fra stringhe) valido per DAO, il
carattere % se usi ADO

 ha scritto nel messaggio
news:PZa99.2830$pX1....@news2.tin.it...


 If (.Fields("SOCIETA").Value Like "*" sUserInput "*") Then
Davvero scritta cosě? Non ci credo!
--
"Ci ho messo tutta la vita a capire che non é necessario capire tutto"
(René Coty)

 ha scritto nel messaggio
news:vsR99.98515$lu5.2...@twister1.libero.it...
