Newsgroup: it.comp.lang.visual-basic
Titolo: OpenRecordset

Ciao a tutti,
	Programmo da poco con VB5.0 SP3 ed ho qualche problema con il metodo
OpenRecordset. 
	Nella mia applicazione cerco di aprire un DB ed  eseguire una query SQL
per poi stamparne il risultato. Al momento di eseguire la OpenRecordset,
VB si blocca con il seguente msg: "Run time error 3061. Parametri
insufficienti. Previsto 1."
	Il codice eseguito e' il seguente:
Private Sub cmdStampa_Click()
    Dim dbTrasporti As Database
    Dim rstBolleDaStampare As Recordset
    Dim strQuery As String
...
Set dbTrasporti = OpenDatabase("nomeDB.mdb")
strQuery = "SELECT NumSped,Totale " + _
           "FROM Bolle " + _
           "WHERE " + mskedFromDate + " >= Data " + _
           "AND " + mskedToDate + " <= Data " + _
           "ORDER BY NumSped"
Set rstBolleDaStampare = dbTrasporti.OpenRecordset(strQuery,
dbOpenDynaset, dbReadOnly)
...
End Sub    
	Ho controllato piu' volte i manuali, ma non riesco a capire dove stia
sbagliando. Credo che tutto sia dovuto solo ad un problema di sintassi e
quindi alla mia inesperienza, ma cio' che mi sembra strano e' che questo
codice e' stato praticamente copiato dal manuale... Mi aspettavo che
funzionasse !!
Grazie a tutti,
Roberto.
PS: Per favore, poiche' ho qualche problema a raggiungere questo ng
(riesco a scrivere, ma non a leggere), inviate le risposte anche via
email.
______________________________________________________________
Roberto Boldori                    
rbol...@mclink.it
 
roberto...@iname.com
   " L'uomo attraversa il presente con gli occhi bendati. 
     Puo' al massimo immaginare e tentare di indovinare cio' 
     che sta vivendo. Solo piu' tardi gli viene tolto il 
     fazzoletto dagli occhi e lui, gettato uno sguardo al 
     passato, si accorge di che cosa ha realmente vissuto e 
     ne capice il senso. "
                                       M.Kundera
______________________________________________________________

Controlla i nomi dei campi della SELECT.
Il fatto che si aspetta un parametro, significa che uno dei campi nella
Query e' stato scritto male e non vi e' la corrispondenza che uno nella
tabella Bolle. A questo punto viene interpretato da Jet come un parametro,
del quale, pero', tu non hai fornito il valore.
NumSped,Totale
 Data
 Data
 NumSped

End Sub
credo manchino gli apici prima e dopo i campi data ovvero:
           "WHERE '" + mskedFromDate + "' >= Data " + _
           "AND '" + mskedToDate + "' <= Data " + _
ciao, aldo severini.

Mi sono e mi imbatto spesso in errori del genere. In questo caso vado nella
finestra "Immediata" e scrivo "? " e subito dopo il punto interrogativo ci
incolla la stringa dell'SQL (dalle prime virgolette comprese fino alla
fine). Premendo invio scopro come è fatto il mio SQL. Poi Vado in access e
mi creo una query scritta con quello stesso SQL. Se c'è un errore Access se
ne accorge e ti dice dov'è.
Quindi puoi fare tutte le correzioni che ritieni opportune... tieni anche in
considerazione che le stringhe (e non so se pure le date) vanno precedute e
seguite da singoli apici.
--
Ciao, Matteo
e-mail: 
rma...@geocities.com
home-page: 
http://rossini.home.ml.org
 (2 chat e qualche poesia)

Ciao Roberto
Se Data è una variabile il codice è errato e il codice corretto è il
seguente:
strQuery = "SELECT NumSped,Totale " + _
           "FROM Bolle " + _
           "WHERE #" + mskedFromDate + "# >= #" + Data + "# "  + _
           "AND #" + mskedToDate + "# <= #" + Data + "# " + _
           "ORDER BY NumSped"
Comunque per scrivere una data c'è sempre bisogno del carattere pound
(#)
Ciao da Alessandro



Ciao a tutti,
	Dopo aver esaminato le vostre risposte sono riuscito a fare funzionare
la OpenRecordset e la query corretta e' la seguente:
strQuery = "SELECT NumSped, Varie3  " + _
           "FROM Bolle " + _
           "WHERE Data BETWEEN DateValue('" + mskedFromDate + "')" + _
                       "AND DateValue('" + mskedToDate + "')" + _
           "ORDER BY NumSped"
oppure si puo' usare:
strQuery = "SELECT NumSped, Varie3  " + _
           "FROM Bolle " + _
           "WHERE Data >= DateValue('" + mskedFromDate + "')" + _
                       "AND Data <= DateValue('" + mskedToDate + "')" +
_
           "ORDER BY NumSped"
	Nella versione originale c'erano diversi errori:
1. l'attributo Totale non esiste ed al suo posto ho messo Varie3 (il
motivo e' contorto, ma vi assicuro che e' giusto cosi');
2. l'operatore BETWEEN non e' fondamentale mentre e' indispensabile la
funzione DateValue(...) perche' Jet accetta solo date in formato
americano e la mia applicazione usa quelle in formato italiano;
3. avevo invertito l'ordine degli operatori ">=" e "<=".
	Grazie a tutti quelli che hanno risposto in maniera chiara e
tempestiva. Spero di poter ricambiare in futuro.
Ciao,
Roberto.








