Identificativo articolo: 210127 - Ultima modifica: mercoledì 21 febbraio 2007 - Revisione: 3.0

ACC2000: Creazione di funzioni analoghe a DFirst() e DLast()

Questo articolo è stato precedentemente pubblicato con il codice di riferimento I210127
Utenti esperti: sono richieste conoscenze avanzate di gestione di codice, interoperabilità e funzioni multiutente.

Il contenuto di questo articolo è applicabile solo ai database di Microsoft Access (mdb).

In questa pagina

Espandi tutto | Chiudi tutto

Sommario

Per impostazione predefinita, le funzioni DFirst() e DLast() restituiscono sempre il primo e l'ultimo record immesso nella tabella sottostante, non il primo e l'ultimo record ordinato dall'indice della tabella o dai criteri di ordinamento della query. Le funzioni DFirst() e DLast() ignorano gli indici, ivi compresi le chiavi primarie e i criteri di ordinamento.

In questo articolo viene illustrato come creare funzioni di dominio personalizzate da utilizzare in modo analogo alle funzioni DFirst() e DLast(). Gli esempi di funzioni di dominio personalizzate DStart() e DEnd() riportati in questo articolo restituiscono il primo e l'ultimo record elencati in una query di ordinamento.

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presume che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle routine. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare routine, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze.

Informazioni

ATTENZIONE: la procedura riportata in questo esempio comporta la modifica del database di esempio Northwind.mdb. È consigliabile eseguire una copia di backup del file Northwind.mdb sulla quale eseguire la procedura.

Per creare e utilizzare funzioni di dominio personalizzate analoghe a DFirst() e Dlast(), attenersi alla seguente procedura:
  1. Aprire il database di esempio Northwind.mdb.
  2. Creare un nuovo modulo e immettere le seguenti due funzioni:
    '--------------------------------------
    ' Use DStart()instead of DFirst() to return
    ' the first sorted record in a domain.
    '--------------------------------------
    Function DStart(FieldName As String, DomainName As String, Optional _
      Criteria As Variant)
    
      Dim MyDB As DATABASE, MySet As Recordset
    
      ' Error out if there is no fieldname sent.
      If Len(FieldName) = 0 Then
         MsgBox "You Must Specify a Field name", , "DStart"
         Exit Function
      End If
    
      ' Error out if there is no domain sent.
      If Len(DomainName) = 0 Then
         MsgBox "You Must Specify a Domain name", , "DStart"
         Exit Function
      End If
    
      Set MyDB = CurrentDb()
      Set MySet = MyDB.OpenRecordset(DomainName, dbOpenDynaset)
    
      ' Apply a filter to the recordset if a criteria is sent.
      If Not IsMissing(Criteria) Then
         MySet.Filter = Criteria
         Set MySet = MySet.OpenRecordset()
      End If
    
      ' If there are no records, return the null, else return the value
      ' of the first record.
      If MySet.EOF Then
         DStart = Null
      Else
         MySet.MoveFirst
         DStart = MySet(FieldName)
      End If
    
      MySet.Close
      MyDB.Close
    End Function
    
    '-------------------------------------------
    'Use DEnd()instead of DLast() to return
    '  the last sorted record in a domain.
    '-------------------------------------------
    
    Function DEnd(FieldName As String, DomainName As String, Optional _
      Criteria As Variant)
    
      Dim MyDB As DATABASE, MySet As Recordset
    
      ' Error out if there is no fieldname sent.
      If Len(FieldName) = 0 Then
         MsgBox "You Must Specify a Field name", , "DEnd"
         Exit Function
      End If
    
      ' Error out if there is no domainname sent.
      If Len(DomainName) = 0 Then
         MsgBox "You Must Specify a Domain name", , "DEnd"
         Exit Function
      End If
    
      Set MyDB = CurrentDb()
      Set MySet = MyDB.OpenRecordset(DomainName, dbOpenDynaset)
    
      ' Apply a filter to the recordset if a criteria is sent.
      If Not IsMissing(Criteria) Then
         MySet.Filter = Criteria
         Set MySet = MySet.OpenRecordset()
      End If
    
      ' If there are no records, return the null, else return the value
      ' of the last record.
      If MySet.EOF Then
         DEnd = Null
      Else
         MySet.MoveLast
         DEnd = MySet(FieldName)
      End If
      MySet.Close
      MyDB.Close
    End Function
  3. Chiudere e salvare il nuovo modulo.
  4. Creare una nuova query basata sulla tabella Ordini come segue:
       Query: Ordini per data
       ------------------------
       Tipo: Query di selezione
    
       Campo: IDOrdine
       Tabella: Ordini
       Campo: DataOrdine
       Tabella: Ordini
       Ordinamento: Decrescente
  5. Chiudere e salvare la query come OrdiniRecenti.
  6. Nel riquadro della finestra Immediata digitare la seguente espressione e premere INVIO:
    ?DStart("OrderID","RecentOrders")
    Verrà restituito IDOrdine 11077 che corrisponde al primo IDOrdine della query.
  7. Nella finestra Immediata digitare la seguente espressione e premere INVIO:
    ?DFirst("OrderID","RecentOrders")
    Verrà restituito IDOrdine 10314 (o 10248 nella versione 7.0) che corrisponde al primo IDOrdine immesso nella tabella Ordini, non il primo IDOrdine della query denominata OrdiniRecenti.

Limitazioni generali alle funzioni di dominio personalizzate

Non è possibile utilizzare Forms!FormName!ControlName o Form.ID tra virgolette. Ad esempio, anziché
DStart("[ProductName]","Products","[ProductID]=Forms![Products]![ProductID]")

utilizzare:

DStart("[ProductName]","Products", BuildCriteria("[ProductID]",dblong,"=" & Forms![Products]![ProductID]))
BuildCriteria() è una funzione di Visual Basic che crea una stringa di criteri nel formato corretto. È possibile utilizzare BuildCriteria() ovunque vengano concatenate stringhe di criteri, ad esempio il metodo FindFirst, oppure quando si creano criteri SQL personalizzati.

Riferimenti

Per ulteriori informazioni sulla funzione BuildCriteria(), in Visual Basic Editor scegliere Guida in linea Microsoft Visual Basic dal menu ?, digitare "metodo BuildCriteria" nella casella dell'Assistente di Office o della Ricerca libera, quindi scegliere il pulsante Cerca per visualizzare l'argomento.

Le informazioni in questo articolo si applicano a
  • Microsoft Access 2000 Standard Edition
Chiavi: 
kbhowto kbprogramming KB210127
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
 

Traduzione articoli