2013-01-02 23 views
5

Sto cercando di interrogare un database MySQL con il codice qui sotto:set di righe non supporta lo scorrimento all'indietro

'declare the variables 
Dim Connection 
Dim Recordset 
Dim SQL 

'declare the SQL statement that will query the database 
SQL = "SELECT * FROM CUSIP" 

'create an instance of the ADO connection and recordset objects 
Set Connection = CreateObject("ADODB.Connection") 
Set Recordset = CreateObject("ADODB.Recordset") 

'open the connection to the database 
Connection.Open "DSN=CCS_DSN;UID=root;PWD=password;Database=CCS" 

Recordset.CursorType=adOpenDynamic 

'Open the recordset object executing the SQL statement and return records 

Recordset.Open SQL,Connection 
Recordset.MoveFirst 

If Recordset.Find ("CUSIP_NAME='somevalue'") Then 
    MsgBox "Found" 
Else 
    MsgBox "Not Found" 
End If 


'close the connection and recordset objects to free up resources 
Recordset.Close 
Set Recordset=nothing 
Connection.Close 
Set Connection=nothing 

Ogni volta che eseguo quanto sopra si ottiene un errore 'set di righe non supporta lo scorrimento all'indietro', qualche suggerimento?

+0

secondo http://msdn.microsoft.com/en-us/library/ee275542%28v=bts.10%29.aspx non si utilizza .Find correttamente. –

risposta

6

adOpenDynamic non è dichiarata nel VBScript e quindi uguale Empty, che viene convertito in 0 quando si assegna la proprietà CursorType.
0 è adOpenForwardOnly e l'inoltro non supporta solo lo spostamento all'indietro, un'abilità richiesta dal metodo Find.

È necessario sostituire adOpenDynamic con il suo valore letterale:

Recordset.CursorType = 2 'adOpenDynamic 

Per evitare questa classe di errori del tutto, posizionare Option Explicit come prima linea del vostro script.

+0

Questo ha fatto il trucco! Grazie !! sapresti perché 'recordset.recordcount' restituisce -1 quando ci sono 5 righe nel database e il tipo di cursortype è cambiato in dinamico? –

+0

@TelsonAlva Perché è [documentato] (http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms676701 (v = vs.85) .aspx) per fare ciò: 'Il tipo di cursore di l'oggetto Recordset influisce sulla determinazione del numero di record. La proprietà RecordCount restituirà -1 per un cursore forward-only; il conteggio effettivo per un cursore statico o keyset; e o -1 o il conteggio effettivo per un cursore dinamico, a seconda della sorgente dati. – GSerg

+0

Oh, ho capito ora! Quindi ho bisogno di cambiare il tipo di cursore in statico per ottenere il conteggio. Altrimenti poiché è dinamico, ci sono possibilità che la registrazione cambi in modo dinamico. Grazie ! –

0

Ciò è dovuto al fatto che il set di righe non consente le mosse all'indietro; come suggerisce il messaggio di errore. Il tuo codice non li sta usando; così si dovrebbe sostituire la linea di

Recordset.CursorType = adOpenDynamic con Recordset.CursorType = adOpenForwardOnly (o il valore equivalente 0)

Meglio lasciare la linea del tutto; il valore predefinito è il cursore in avanti.

+0

Hai ottenuto il contrario. Il metodo 'Trova' vuole la capacità di andare indietro. – GSerg