Newsgroup: it.comp.appl.access
Titolo: Casella di testo -> deve ottenere il valore da codice, tramite  Dlookup, oppure private function ma non v a

Ciao,
ho una maschera, con due caselle combinate in gerarchia, che mi
permettono di trovare la versione di listino selezionato.
La maschera è MSC_CSTFLY
Le due caselle combinate sono : cbocliente e cbodata.
Il campo dist_versionelistinoselezionato rappresenta la versione di
listino selezionata, e nella sua origine controllo il valore lo
assegno tramite verslistino()
Ma non va, perchè quando scelgo dalla seconda casella combinata la
data mi compare un messaggio di avviso:
Parametri insufficienti. Previsto 2.
La funzione è la seguente:
Private Function VersListino() As String
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT TBL_VSCSTMP.vscstmp_id FROM
TBL_VSCSTMP " & _
         "WHERE (((TBL_VSCSTMP.vscstmp_data)=[forms]![msc_cstfly]!
[cbodata]) AND " & _
         "((TBL_VSCSTMP.vscstmp_cliid)=[Forms]![msc_cstfly]!
[cbocliente]));", dbReadOnly)
If Not rs.BOF Then VersListino = 0: Exit Function
VersListino = rs!vscstmp_id
Debug.Print VersListino()
End Function
La tabella TBL_VSCSTMP contiene valori come questi
vscstmp_id -> campo contatore
vscstmp_data -> data
vscstmp_cliente -> chiave esterna rappres il cliente
1 19/11/07  14
2 19/11/07  15
3 19/11/07  16
4 19/11/07  18
Non capisco perchè non riesce a trovare la versione di listino e mi da
quell'errore...
Grazie,
Samantha
2

 Parametri insufficienti. Previsto 2.





Dovrebbe essere dovuto ad un errore nella sintassi con cui passi le due
date alla stringa SQL.
Leggi qua:
 
http://www.donkarl.com/it/FAQ/FAQ6VBA.htm#6.8
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

On 26 Nov, 16:57, 
marco.pizzamig...@gmail.com
 (Marco Pizzamiglio)
wrote:

Grazie Marco,
in effetti ho sbagliato la sintassi di grosso!!! l'ho risistemata mi
sembra, ma c'è ancora qualcosa che non va...
Private Function VersListino() As String
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT TBL_VSCSTMP.vscstmp_id FROM
TBL_VSCSTMP " & _
         "WHERE (((TBL_VSCSTMP.vscstmp_data)=" & [Forms]![msc_cstfly]!
[cbodata] & ") AND " & _
         "((TBL_VSCSTMP.vscstmp_cliid)=" & [Forms]![msc_cstfly]!
[cboCliente] & "));", dbReadOnly)
VersListino = rs!vscstmp_id
Debug.Print VersListino()
End Function
Quello che mi dice è
NESSUN RECORD CORRENTE!
Eppure io ho selezionato cliente e data, e la versione di listino deve
esistere x forza.
Questa è la routine in evento cbodata.dopoAggiornamento:
Private Sub CBODATA_AfterUpdate()
On Error GoTo Err_CBODATA_AfterUpdate
Forms![msc_cstfly].Corpo.Visible = False
Debug.Print VersListino()
Debug.Print Me!dist_versionelistinoSelezionato
Me!VLS = VersListino()
Exit_CBODATA_AfterUpdate:
    Exit Sub
Err_CBODATA_AfterUpdate:
    MsgBox Err.Description
   Resume Exit_CBODATA_AfterUpdate
End Sub

 End Sub
Non è a posto, usa la sintassi che trovi sul sito di Karl
  Format(TuoCampoData, "#yyyy-mm-dd#")
altrimenti ci sono problemi con le conversioni tra il formato italiano e
quello inglese, e un 04.07.2007 (4 luglio) può diventare per Jet
07.04.2007 (7 aprile).
Se ancora non va metti la stringa SQL in una variabile 
  SQL="SELECT ......."
blocchi il codice sulla riga subito dopo e nella finestra immediata vai a
verificare con un 'Print SQL' se la query è composta correttamente.
Dalla finestra immediata copi l'SQL e lo incolli nel generatore di query
(visualizzazione SQL) per verificare se è corretta e se restituisce record
o meno.
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 > questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnalagli
 abusi ad 
ab...@newsland.it

Io devo trovare la versione di listino, per calcolare i prezzi con la
versione di listino selezionata.
X calcolare i prezzi, ho delle query di creazione tabella. Le tabelle
create sono all'origine della maschera MSC_CSTFLY.
Prima, quando non creavo le tabelle ma le tabelle erano statiche, la
versione di listino veniva individuata nella query che è origini di
MSC_CSTFLY, la query q_msc_cstfly.
Ora però, dovendo associare in modo dinamico le tabelle dei costi, e
quindi ricreando le tabelle, mi compare un errore che mi dice, che la
tabella da dove pesco i prezzi, è bloccata da un altro utente. Essendo
bloccata da un altro utente, non posso eliminarla e ricrearla.
Per questo motivo, ho tolto dall'origine maschera la query
Q_MSC_CSTFLY, e l'origine maschera viene assegnata tramite VBA.
Da qui, la necessità di scovare tramite VBA la versione di listino
selezionata...uff

 questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnala
 gli abusi ad 
ab...@newsland.it
;) Ciao Marco
ho fatto come hai detto:
Private Function VersListino() As String
Dim strdate As String
strdate = Format(cbodata, "\#yyyy\-mm\-dd\#")
Dim stringaSQL As String
stringaSQL = "SELECT TBL_VSCSTMP.vscstmp_id FROM TBL_VSCSTMP " & _
         "WHERE (((TBL_VSCSTMP.vscstmp_data)=" & strdate & ") AND " &
_
         "((TBL_VSCSTMP.vscstmp_cliid)=" & [Forms]![msc_cstfly]!
[cboCliente] & "));"
Debug.Print stringaSQL
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT TBL_VSCSTMP.vscstmp_id FROM
TBL_VSCSTMP " & _
         "WHERE (((TBL_VSCSTMP.vscstmp_data)=" & strdate & ") AND " &
_
         "((TBL_VSCSTMP.vscstmp_cliid)=" & [Forms]![msc_cstfly]!
[cboCliente] & "));", dbReadOnly)
VersListino = rs!vscstmp_id
Debug.Print VersListino()
End Function
E il risultato è:
SELECT TBL_VSCSTMP.vscstmp_id FROM TBL_VSCSTMP WHERE
(((TBL_VSCSTMP.vscstmp_data)=#1900-02-22#) AND
((TBL_VSCSTMP.vscstmp_cliid)=19));
Perchè prende il 22 febbraio 1900 ?

 > questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnalagli
 abusi ad 
ab...@newsland.it

Ho verificato allora con 2 codici:
Dim strdate As String
strdate = Format(cbodata, "\#yyyy\-mm\-dd\#")
Dim stringaSQL As String
stringaSQL = "SELECT TBL_VSCSTMP.vscstmp_id FROM TBL_VSCSTMP " & _
         "WHERE (((TBL_VSCSTMP.vscstmp_data)=" & strdate & ") AND " &
_
         "((TBL_VSCSTMP.vscstmp_cliid)=" & [Forms]![msc_cstfly]!
[cboCliente] & "));"
Dim stringa2 As String
stringa2 = "SELECT TBL_VSCSTMP.vscstmp_id FROM TBL_VSCSTMP " & _
         "WHERE (((TBL_VSCSTMP.vscstmp_data)=" & Forms!msc_cstfly!
cbodata & ") AND " & _
         "((TBL_VSCSTMP.vscstmp_cliid)=" & [Forms]![msc_cstfly]!
[cboCliente] & "));"
Debug.Print stringaSQL
Debug.Print stringa2
SELECT TBL_VSCSTMP.vscstmp_id FROM TBL_VSCSTMP WHERE
(((TBL_VSCSTMP.vscstmp_data)=#1900-02-22#) AND
((TBL_VSCSTMP.vscstmp_cliid)=19));
SELECT TBL_VSCSTMP.vscstmp_id FROM TBL_VSCSTMP WHERE
(((TBL_VSCSTMP.vscstmp_data)=54) AND
((TBL_VSCSTMP.vscstmp_cliid)=19));
Insomma, dove io gli dico seleziona la data, lui mi dice che è la
54 ...
cavolo...
la casella combinata, mostra le date, ma memorizza la versione di
listino...

 > > questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnalagliabusi
 ad 
ab...@newsland.it

Quest'oggi proprio pensavo di avere trovato la soluzione, e
m'impantano sulle cose + semplici. Ho risolto,  è proprio cbodata a
rappresentare la versione di listino che mi serve!!!!!
... :D Grazie Marco
Samantha