Newsgroup: it.comp.appl.access
Titolo: Casella combinata che non funziona

Ho un db che accedere a tabelle sql tramite ODBC. Per visualizzare un
record su una maschera utilizzo una casella combinata che dovrebbe
visualizzare il record corrispondente.
Il problema è che per alcuni numeri non funziona correttamente.  La
tabella ha 51000 record e se cerco il record che ha NDG 53420 mi fà
vedere il 13341. Se testo il campo NDG mi dice 53420 così come per la
casella combinata ma il record che mi fà vedere è il 13341.
La routine che utilizzo è
Sub CasellaCombinata12_AfterUpdate()
    ' Trova il record corrispondente al controllo
    Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[NDG] = " & Nz(Me![CasellaCombinata12])
    'Str(Nz(Me![CasellaCombinata12]))
    If rs.NoMatch Then
        MsgBox "Record non trovato", vbInformation
    Else
        Me.Bookmark = rs.Bookmark
    End If
End Sub
Non capisco perchè fà così...
Lo stesso DB e maschera che accede alla stessa tabella in Access
funziona..


forse il problema è nel recordset che non viene dichiarato di un
qualche tipo ma come oggetto in maniera generica, il tuo codice
ricalca quello dell'help di access solo che rs viene lì dichiarato
come dao.recordset
In alternativa potresti impostare la proprietà filter della maschera
(sempreché tu non abbia necessità di scorrere tutti i record)
me.filter = "NDG = " & me.casellaconbinata12
me.filteron = true
Ciao
AleC

Grazie ma non posso utilizzare il filtro perchè nella stessa maschera
ho sia la castella combinata per il codice che per un altro campo
Alfabetico.
Però, visto che ho sempre utilizzato le funzioni standard di Access
utilizzando le tabelle di Access, adesso che uso le tabelle di SQL
Server non sono esperto di recordset.... come posso dichiarare le cose
in maniera che funzioni?
Grazie


puoi sempre combinare i criteri di selezione delle due caselle
combinate
me.filter = "Campo1 = " & me.casellacombinata1 & " and " & "Campo2 = "
& me.casellacombinata2
altrimenti prova a dichiarare la variabile oggetto rs come
dao.recordset anziché object, esattamente come indicato nell'help di
access
che ti incollo qui
Private Sub cmdFindContactName_Click()
    Dim rst As DAO.Recordset
    Dim strCriteria As String
    strCriteria = "[ContactName] Like '*" & InputBox("Enter the " _
        & "first few letters of the name to find") & "*'"
    Set rst = Me.RecordsetClone
    rst.FindFirst strCriteria
    If rst.NoMatch Then
        MsgBox "No entry found.", vbInformation
    Else
        Me.Bookmark = rst.Bookmark
    End If
    Set rst = Nothing
End Sub

Ho variato la query e inserito la funzione come ti evidenzio sotto.
Ho notato che se apro la maschera e digito il record con NDG =1 poi
tento il 53420 si ferma al 13340 se invece apro 35200 poi 53420 lo
apre regorarmente.  Sembra quasi che con abbia un intervallo
prefissato oltre il quale non riesce direttamente ad aprire i
record...
In pratica, dopo diverse prove, ho visto che se passo da 1 a 41600
(che è il record 25601 della tabella) funziona, Oltre si incasina e mi
apre record strani (41161 apre il record 257)
Non riesco proprio a capire cosa stia succedendo... Ripeto che con le
tabelle Access il problema non esisteva...
Grazie per l'attenzione..
Dim rst As DAO.Recordset
    Dim strCriteria As String
    strCriteria = "[NDG] = " & Nz(Me![CasellaCombinata12])



Ho provato con Sql Server, mi funziona. Non so cosa dirti. Ma non sono
espertissimo di MsSql.
Ciao
AleC

Grazie comunque..
Il problema infatti è Access perchè si comporta in modo differente a
seconda che la tabella sia Access (ok) o SQL (Ko)
Un amico "esperto" mi ha detto che potrebbe essere un problema di
Buffer.. ma qui muoio...