Newsgroup: it.comp.lang.visual-basic
Titolo: Ricerca dati in un database

Ciao, il mio problema è di riuscire a cercare in un database (db3) collegato
all'oggetto data, un codice (ma potrebbe essere benissimo altro) inserendo
il criterio di ricerca in una inputbox.
Uso il seguente codice ma non funziona, l'errore lo da alla stringa di
data1.recordset.findfirst (quella con *)
Sapete darmi una spiegazione o una strada alternativa? Preferirei non usare
stringhe sql.
Versione Visual Basic 6, Win2k
Private Sub Command1_Click()
Dim Ricerca As String
Dim CampoRicerca As String
CampoRicerca = InputBox("stringa da cercare:")
Ricerca = "CODICE = """ & CampoRicerca & """"
Text1.Text = Data1.Recordset.FindFirst(Ricerca) '* Anche senza
text1.text= non funziona
If Data1.Recordset.NoMatch Then
MsgBox "stringa nn trovata"
End If
End Sub

 data1.recordset.findfirst (quella con *)
Prova con
Ricerca = "CODICE = '" & CampoRicerca & "'"

> "silvana" [...]:

    Il metodo FindFirst non e' supportato con i file dbf.
    Senza cambiare di molto il tuo approccio (comunque da rivedere!)
potresti seguire la traccia qui sotto. Non credo che la stringa sql che ho
usato possa essere considerata del tipo che preferisci non usare. Ho usato
"clienti.dbf", ottenuto dall'esempio "northwind".
Option Explicit
Private Sub Command1_Click()
  On Error GoTo erh
  Dim sUserInput  As String
  Dim rst         As dao.Recordset
  sUserInput _
    = InputBox( _
          "Immetti Codice" _
        , "CLIENTI - Ricerca per codice" _
        , "ALFKI")
  If (Len(sUserInput) = 0) Then
    ' L'utente ha rinunciato.
  Else
    With Me.Data1
      Set rst _
        = .Database.OpenRecordset( _
              "SELECT NOMESOCIET" _
            & " FROM " _
            & .Recordset.Fields("IDCLIENTE").SourceTable _
            & " WHERE IDCLIENTE = '" & sUserInput & "'" _
            , dao.dbOpenSnapshot _
            , dao.dbFailOnError)
      With rst
        If ((.BOF = True) And (.EOF = True)) Then
          MsgBox _
              "Il Codice" & vbCrLf _
            & "'" & sUserInput & "'" _
            & "non esiste." _
            , vbInformation + vbOKOnly
        Else
          Me.Text1.Text = .Fields("NOMESOCIET").Value
        End If
      End With
    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
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

> "Maurizio Borrelli" [...]:

[...]
    Scusami, mi ero dimenticato che se usi l'oggetto Data evidentemente hai
anche i controlli associati al recordset. La seguente e' un'ulteriore
ipotesi che fa uso dei bookmark e di un clone del recordset:
Private Sub Command2_Click()
  On Error GoTo erh
  Dim sUserInput  As String
  Dim rst         As dao.Recordset
  Dim vBmk        As Variant
  sUserInput _
    = InputBox( _
          "Immetti Codice" _
        , "CLIENTI - Ricerca per codice" _
        , "ALFKI")
  If (Len(sUserInput) = 0) Then
    ' L'utente ha rinunciato.
  Else
    With Me.Data1
      Set rst = .Recordset.Clone
      With rst
        If ((.BOF = True) And (.EOF = True)) Then
          '
        Else
          Do Until (.EOF = True)
            If (.Fields("IDCLIENTE").Value = sUserInput) Then
              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
