Metodo FindFirst non funziona

di il
11 risposte

Metodo FindFirst non funziona

Salve,
ho un problema con il metodo Findfirst in un Recordset. L'errore che mi restituisce è il seguente:
mentre questo è il codice:
Private Sub chkPacchetto_Click()

    On Error GoTo GestErr
    Dim rstPacchetto As DAO.Recordset
    Dim strCriterio As String
    
    Call AggiornaVisibilitaPacchetto
    If Me.chkPacchetto.Value = True Then
        Call cmdPacchetto_Click
    Else
        If MsgBox("Sei sicuro di eliminare il pacchetto associato al prodotto?", vbYesNo + vbQuestion, "Conferma eliminazione") = vbYes Then
            'Cancellazione del record nella tabella pacchetto
            'apertura tabella pacchetto
            Set rstPacchetto = CurrentDb.OpenRecordset("Pacchetto")
            strCriterio = "[IDPacchetto]=" & Me.IDPacchetto.Value
            With rstPacchetto
                .MoveFirst
                .FindFirst strCriterio
                .Delete
            End With
            'cancella il riferimento del pacchetto nel prodotto
            Me.IDPacchetto.Value = ""
            MsgBox "Pacchetto cancellato correttamente.", vbOKOnly, "Cancellazione record"
        Else
            Me.cmdPacchetto.Enabled = True
            Me.IDPacchetto.Enabled = True
            Me.chkPacchetto.Value = True
        End If
    End If

GestErr_Exit:
    Set rstPacchetto = Nothing
    Exit Sub

GestErr:
    MsgBox "Si è verificato l'errore n° " & Err.Number & vbCrLf & Err.Description, vbCritical, strTitoloMsg
    Resume GestErr_Exit
   
End Sub
non riesco a capire il motivo per cui mi da errore, visto che la sintassi è la stessa che ho in altre parti del programma e lì non mi da errore.
Gli altri metodi tipo .MoveFirst, .MoveNext e similari funzionano senza problemi

Qualcuno ha qualche idea? Grazie.

11 Risposte

  • Re: Metodo FindFirst non funziona

    Probabilmente NON apri il recordset nella modalità corretta per effettuare aggiornamenti, quindi :
    
    ... OpenRecordset("TableName", dbOpenDynaset) 
    
  • Re: Metodo FindFirst non funziona

    Scusa ma devi solo cancellare il record...?
    Perché non usi semplicemente una Query Delete e conti quante cancellazioni sono state fatte...?
  • Re: Metodo FindFirst non funziona

    Si, devo solo cancellare il record associato all'IDPacchetto selezionato. Con la query SQL onestamente non ho mai provato.
    In pratica, dovrei fare un'istruzione SQL che mi cancella il record il cui IDPacchetto è quello che ho in selezione?
  • Re: Metodo FindFirst non funziona

    Appunto... una roba simile...
    
    Dim Db As DAO.Database
    Set Db = CurrentDb
    With Db
      .Execute "DELETE * FROM [T1] WHERE IdNomeCampo=" & Me!IdNomeCampo, dbFailOnerror
      If .RecordsAffected = 0 Then
         MsgBox "Error"
      End If
    End With
    
  • Re: Metodo FindFirst non funziona

    Ok, grazie. Provo e verifico.
  • Re: Metodo FindFirst non funziona

    Ha funzionato, grazie della dritta. Tra l'altro alla fine mi ha funzionato anche usando FindFirst, ma con l'apertura della tabella in modalità "dbOpenDynaset", che quindi non era quella di default.

    Nelle altre parti del database dove mi ha sempre funzionato il metodo FindFIrst ho notato che il comando di OpenRecordset lo facevo con il Recordsetclone del form. Forse potrebbe essere questo il motivo per cui non specificando altri parametri in automatico me lo apriva come Dynaset, permettendomi di usare il metodo senza problemi. Che ne pensi?
  • Re: Metodo FindFirst non funziona

    J1mmy ha scritto:


    ... l'apertura della tabella in modalità "dbOpenDynaset", che quindi non era quella di default.
    Da
    expression.OpenRecordset (Name, Type, Options, LockEdit)
    expression A variable that represents a Database object.

    Type = A RecordsetTypeEnum constant that indicates the type of Recordset to open.
    NOTE: If you open a Recordset in a Microsoft Access workspace and you don't specify a type, OpenRecordset creates a table-type Recordset, if possible. If you specify a linked table or query, OpenRecordset creates a dynaset-type Recordset.
    Se indichi una tabella il type di default è dbOpenTable, in tutti gli altri casi è dbOpenDynaset.
    Il metodo FindFirst è previsto solo per i recordset di tipo Dynaset o SnapShot mentre per il tipo Table si deve usare il metodo Seek
    Da
    To locate a record in a table-type Recordset, use the Seek method.
  • Re: Metodo FindFirst non funziona

    Il metodo Seek che però non va bene per le linked table...
  • Re: Metodo FindFirst non funziona

    @Alex ha scritto:


    Il metodo Seek che però non va bene per le linked table...
    Infatti riportando quanto presente nella pagina

    Philcattivocarattere ha scritto:


    Da
    ...NOTE: ... If you specify a linked table or query, OpenRecordset creates a dynaset-type Recordset.
    Non è un tipo Table quindi non supporta Seek.
    L'intervento preciso preciso doveva essere: "Se indichi una tabella locale, non collegata, il type di default è dbOpenTable, in tutti gli altri casi è dbOpenDynaset."
  • Re: Metodo FindFirst non funziona

    J1mmy ha scritto:


    ...Tra l'altro alla fine mi ha funzionato anche usando FindFirst, ma con l'apertura della tabella in modalità "dbOpenDynaset", che quindi non era quella di default.
    A conferma di quanto indicato nel post #2
  • Re: Metodo FindFirst non funziona

    Se indichi una tabella locale, non collegata, il type di default è dbOpenTable, in tutti gli altri casi è dbOpenDynaset
    Ok, grazie a tutti dei chiarimenti.
Devi accedere o registrarti per scrivere nel forum
11 risposte