PRB: Errore 3001 confronto campi come criteri per il filtro Recordset

Traduzione articoli Traduzione articoli
Identificativo articolo: 216873 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sintomi

Confronto tra due campi nella stringa di criteri di proprietÓ ADO Filter (ad esempio: la stringa di criteri Ŕ costituita da clausole nel formato: "NomeCampo Operatore FieldName") genera l'errore seguente:
Errore di runtime '3001':
L'applicazione utilizza argomenti di tipo errato, rientra nell'intervallo accettabile o che sono in conflitto con un altro.

Cause

Questa funzionalitÓ non pu˛ essere effettuata con le versioni correnti di ADO. La sintassi di criteri di proprietÓ ADO Filter Ŕ definita come segue:
"NomeCampo operatore 'Literal_Value'"
Il tipo di dati 'Literal_Value' pu˛ essere data, numero o stringa. Non Ŕ possibile utilizzare l'espressione precedente per confrontare due campi. Il tentativo di eseguire questa operazione genera l'errore 3001.

Risoluzione

Una soluzione consiste nel diverse espressioni unite da operatori booleani come criterio di filtro. ╚ possibile utilizzare solo se il i valori dei campi confrontati sono noti per lo sviluppatore. In questo modo lo sviluppatore pu˛ avviarsi con una formula per la stringa di criteri che soddisfi i risultati necessari. Ad esempio:
rs.Filter = "Field1 Operator1 'Value1' AND Field2 Operator2 'Value2'"
				

Se lo sviluppatore non conosce i valori per Field1 e Field2, lo sviluppatore deve utilizzare una routine di filtro personalizzata (all'interno dell'applicazione del client) o una stored procedure (sul lato server) per eseguire la funzionalitÓ in modo dinamico. ╚ possibile utilizzare istruzioni di flusso di controllo all'interno di routine di filtro personalizzata (o la stored procedure) per eseguire i confronti campo necessari e generare i risultati previsti.

In questo articolo viene fornita una dimostrazione per ad una routine nella sezione "Informazioni" di questo articolo.

Avviso: La soluzione, descritta nella sezione ulteriori informazioni, Ŕ fornite solo a scopo di illustrazione, senza alcuna garanzia espressa o implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilitÓ e/o idoneitÓ per uno scopo specifico.

Status

Microsoft ha confermato che questo problema riguarda i prodotti Microsoft elencati all'inizio di questo articolo.

Informazioni

La Guida in linea di ADO sono stati i seguenti per espressione dei criteri del filtro metodo--in note:

La stringa di criteri Ŕ costituita da clausole nel formato NomeCampo - Operatore - valore (ad esempio, "LastName = 'Smith'"). ╚ possibile creare clausole composte concatenando clausole singole con AND (ad esempio, "LastName = 'Smith' AND FirstName = 'John'") o OR (ad esempio, "LastName = 'Smith' OR LastName = 'Jones'").

Le linee guida riportate di seguito inoltre specificato per il valore di criteri:

Valore Ŕ il valore con cui si confronteranno i valori dei campi (ad esempio 'Smith', # 8/24/95 #, 12.345 o $ 50.00). Utilizzare virgolette le stringhe e caratteri cancelletto (#) con le date. Per i numeri, Ŕ possibile utilizzare punti decimali, segni di dollaro e notazione scientifica. Se operatore Ŕ LIKE, per valore Ŕ possibile utilizzare caratteri jolly. Solo l'asterisco (*) e firmare di percentuale (%) sono consentiti caratteri jolly e deve essere l'ultimo carattere della stringa. Valore non pu˛ essere null.
Procedura per riprodurre il problema
===========================

  1. Avviare un nuovo progetto di Microsoft Visual Basic. In base all'impostazione predefinita, viene creato il progetto Form1.
  2. Consente di impostare un riferimento alla libreria Microsoft ActiveX Data Objects 2.x a un progetto.
  3. Inserire un pulsante di comando nel modulo. Per impostazione predefinita viene creato Command1.
  4. Consente di inserire il codice seguente sezione della dichiarazione generale di Form1:
   Option Explicit
   Dim cn As New ADODB.Connection
   Dim rs As New ADODB.Recordset

   Private Sub Command1_Click()
       cn.Open "provider=SQLOLEDB;Data Source=<your data source>;User ID=<uid>;" _ 
    "password=;Initial Catalog=pubs;"
       On Error Resume Next
       cn.Execute "drop table tblFilterTest"
       On Error GoTo errh
       ' Create the test table
       cn.Execute "create table tblFilterTest(ID int primary key, Field1  
    varchar(20), Field2 varchar(20))"
       ' Open ADO recordset
       rs.Open "select * from tblFilterTest", cn, adOpenKeyset, 
    adLockOptimistic
       ' Add first record
       rs.AddNew
       rs("ID") = 1
       rs("Field1") = "A"
       rs("Field2") = "B"
       rs.Update
       rs.Requery
   
       ' Add 2nd record
       rs.AddNew
       rs("ID") = 2
       rs("Field1") = "D"
       rs("Field2") = "C"
       rs.Update
       rs.Requery
    
       ' Print original recordset
       Debug.Print "Original Recordset:"
       Debug.Print "====================="

       While Not rs.EOF
            Debug.Print rs("Field1") & vbTab & rs("Field2") 
             rs.MoveNext
       Wend

       rs.MoveFirst

       ' You get error 3001 on the following line
       rs.Filter = " Field1 > Field2 "

       ' To demonstrate the workaround, comment the preceding line and
       ' uncomment the following line:

       ' Call Filter
       Exit Sub

   errh:
       Debug.Print "Error Number:", Err.Number
       Debug.Print "Error Source:", Err.Source
       Debug.Print "Error Description:", Err.Description
   End Sub

   Private Sub Filter()
       Debug.Print "Filtered Recordset: "
       Debug.Print "====================="
    
       While Not rs.EOF
         If rs("Field1") > rs("Field2") Then
             Debug.Print rs("Field1") & vbTab & rs("Field2") 
         End If
         rs.MoveNext
       Wend
   End Sub
				
Premere F5 per eseguire il progetto e l'errore 3001 si verifica.

Riferimenti

Per ulteriori informazioni, consultare la Guida in linea di ADO.
Per ulteriori informazioni, vedere il seguente articolo della Microsoft Knowledge Base riportato di seguito:
195222PRB: ADO Find criteri supporta un solo metodo

ProprietÓ

Identificativo articolo: 216873 - Ultima modifica: venerdý 24 agosto 2001 - Revisione: 1.0
Le informazioni in questo articolo si applicano a:
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.01
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
Chiavi:á
kbmt kbcode kbdatabase kbfix kbprb KB216873 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 216873
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.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com