Newsgroup: it.comp.appl.access
Titolo: Errore Run-time 13.. dov'è l'errore?

Ciao a tutti
in una maschera con 9 controlli immagine ed altrattanti testo, avente come origine la tabella articoli ho inserito nell'evento su corrente il seguente codice:
 
 Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset("select * from articoli WHERE (((articoli.categoria) Like nz([Forms]![Campionario]![cercacategoria]," * ")) AND ((articoli.sottocategoria) Like nz([Forms]![Campionario]![cercasottocategoria]," * ")))")
    While (Me.id <> Rst!id)
        Rst.MoveNext
    Wend
    Rst.MoveNext
    Dim i As Integer
    For i = 1 To 9
            Me.Controls("Testo" & i).Value = Rst!Articolo
        Me.Controls("ean" & i).Value = Rst!Codart
        Me.Controls("Immagine" & i).Picture = Rst!percorso
        Rst.MoveNext
        If Rst.EOF Then
            Exit For
        End If
    Next
    Rst.Close
 
Si tratta di un semplice browser immagini che attraverso 2 combobox viene filtrato in base a categoria e sottocategoria, i valori selezionati in queste vengono riportati nei campi cercacategoria e cercasottocategoria.
 
Se ometto nel recordset tutta la parte delle condizioni funziona bene, inserendo la parte dal WHERE in poi, all'avvio mi viene restituito il fatidico errore run-time '13'tipo non corrispondente.
 
cosa c'è di sbagliato?
 
grazie 1000 a chi mi aiuterà!
 
Nicola


azz 1/2 giornata senza risposta.
Sono le virgolette. Raddoppia quelle interne (o sostituiscile con apice)
i.e. "" * "" o ' * '
non ti dico di sostituirle con chr perche' sarebbe ancora piu' complicato.
Se hai tempo puoi spiegarmi il contesto? In forma semplice perche' sono 
abbastanza /tardo/
Trovo questa routine "strana".
-- 
 
ac (x=y-1) e non uso il KillFile.
La violenza e' l'ultimo rifugio degli incapaci (Salvor Hardin)

Il giorno sabato 5 aprile 2014 21:32:49 UTC+2, Alessandro Cara ha scritto:

Ciao Alessandro 
grazie per il suggerimento anche se correggendolo come da te indicato ora mi restituisce un nuovo errore:
 
errore run-time 3061
Parametri insufficienti. previsto 2
 
si tratta di un semplice browser 3x3 di immagini/dettagli articoli che dovrei filtrare per categoria/sottocategoria ed in seguito quando funzionerà anche per altri parametri...
ci ho ricominciato a lavorarci su dopo essermi arreso qualche anno fa nel costruire il browser e dopo qualche suggerimento qui nel ng sono riuscito a mettere in piedi una bozza...
 
perchè vedi strana la routine?
sapresti suggerirmi metodi eventualmente più efficaci?? :-D
 
Nicola


Ho fatto un errore nel suggerimento che ti ho dato.
la select prova a impostarla cosi':
da
"select * from articoli WHERE (((articoli.categoria) Like 
nz([Forms]![Campionario]![cercacategoria]," * ")) AND 
((articoli.sottocategoria) Like 
nz([Forms]![Campionario]![cercasottocategoria]," * ")))"
 
 
a
 
"select * from articoli WHERE (((articoli.categoria) Like '" &
nz([Forms]![Campionario]![cercacategoria]," * ") & "') And
((articoli.sottocategoria) Like '" &
nz([Forms]![Campionario]![cercasottocategoria]," * ") & "')"
 
 
Ho scritto senza test/verifica quindi non e' detto che non possano 
esserci errori di sintassi  ;-)
 
Sei proprio certo di quel " * "?
Se trova il controllo nullo: sostituisce like ' * '
se non lo trova nullo ottieni like 'x'
(dove x e' un valore qualsiasi)
 
Normalmente la like ha questa espressione : like 'x*'
 
 
La routine la trovo strana perche' questa parte
 >>>       While (Me.id <> Rst!id)
 >>
 >>>           Rst.MoveNext
 >>
 >>>       Wend
ho l'impressione che possa essere eliminata filtrando correttamente la 
query


Il giorno giovedì 10 aprile 2014 19:27:57 UTC+2, Alessandro Cara ha scritto:

Grazie, 
ora sembra funzionare correttamente, anche eliminando il ciclo while/wend come mi hai suggerito, ora però non mi funzionano più i tasti AVANTI e INDIETRO che mi permettevano di avanzare sulle 9 foto successive o precedenti tramite il codice
 
If Me.CurrentRecord > 9 Then
DoCmd.GoToRecord , , acGoTo, Me.CurrentRecord - 9
Else
DoCmd.GoToRecord , , acLast
End If
 
e
 
If Me.RecordsetClone.RecordCount - Me.CurrentRecord > 9 Then
DoCmd.GoToRecord , , acGoTo, Me.CurrentRecord + 9
Else
DoCmd.GoToRecord , , acFirst
End If
 
 
Ora, essendo che è la prima volta che utilizzo i recordset e vorrei capirne bene il funzionamento, ti chiedo un suggerimento su come sostituire le due funzioni sopra descritte, dopodichè dovrei essere in grado di procedere con le mie gambe...
 
grazie ancora dei tuoi preziosi suggerimenti
 
Nicola


 
 
E per questo che avevo chiesto qual'era il contesto.
Se non ti funzionano piu' i tasti prova a reinserire la routine con la 
while e vedi cosa succede.
Se il problema rimane allora si dovra' entrare piu' in dettaglio.


 La violenza e' l'ultimo rifugio degli incapaci (Salvor Hardin)
 
Ci avevo già provato a rimetterlo ma:
 
aprendo la maschera ed avanzando avanti/indietro tutto funziona regolarmente, selezionando categoria e/o sottocategoria mi dà
 
errore run-time 3021
Nessun record corrente
 
avevo dato per scontato (tra me e me) che ogni categoria/sottocategoria può avere più o meno di 9 articoli e che quindi ci debba essere la necessità di scorrerli...
 
vorrei soprattutto capire/vedere quando entrerà a regime come si comporterà quando a video ci saranno meno di 9 articoli se dovrò gestire i controlli che saranno vuoti o lo farà il recordset in automatico... 


Il recordset in automatico non fa nulla.
Ti segnala solo se sta a EOF o a BOF.
Se fai un qualsiasi scorrimento avanti (su EOF) o indietro (su BOF) 
pigli nessun record corrente.
