Newsgroup: it.comp.lang.visual-basic
Titolo: [VB+SQLServer] esito positivo solo con debug

Ciao a Tutti!!!
Nella gestione dei libri a cui sto lavorando, ho la possibilità di
effettuare delle ricerche per titolo, autore ed editore. L'esito della
ricerca lo scrivo in una listview.
Il mio problema riguarda proprio l'esito, che è visibile solo se mando in
esecuzione il codice con il debug (passo passo con F8), se lo mando
normale, non mi restituisce nulla, pur inserendo gli stessi identici
parametri! 
Com'è possibile?
Vi posto il codice delle sub:
Sub EseguiRicerca()
    Dim MioFiltro As String, mioAutore As String, mioEditore As String
 
     mioAutore = Replace(dcAutore.Text, "'", "''")
     mioEditore = Replace(dcEditore.Text, "'", "''")
 
   ' ricerca per titolo
    If Not IsNull(Trim(txtTitolo)) And Trim(txtTitolo) <> "" Then
        MioFiltro = "Descrizione Like '%" & Trim(txtTitolo) & "%'"
    End If
 
   ' ricerca per autore
    If Not IsNull(dcAutore) And dcAutore <> "" Then
        If MioFiltro <> "" Then MioFiltro = MioFiltro & " AND "
'        MioFiltro = MioFiltro & "Dettaglio1 = """ & dcAutore & """"
         MioFiltro = MioFiltro & "Dettaglio1 = '" & mioAutore & "'"
    End If
   ' ricerca per casa editrice
    If Not IsNull(dcEditore) And dcEditore <> "" Then
        If MioFiltro <> "" Then MioFiltro = MioFiltro & " AND "
        MioFiltro = MioFiltro & "Dettaglio2 = '" & mioEditore & "'"
    End If
    Call MostraDettagli(1, MioFiltro)
End Sub
Sub MostraDettagli(Tipo As Integer, Optional MioFiltro As String)
Dim miaSQL As String, MioRS As ADODB.Recordset, mioIDRicerca As Long,
miaDescrizione As String
Dim  mioDettaglio1 As String, mioDettaglio2 As String, mioDettaglio3 As
String
Dim mioItem As ListItem, mioSubItem As ListSubItem, mioIDRicercaStr As
String
 
  Set MioRS = New ADODB.Recordset
 
   miaSQL = "SELECT * from #tbRicercaGlobale WHERE Tipo = " & Tipo
   If MioFiltro <> "" Then miaSQL = miaSQL & " AND " & MioFiltro
 
   miaSQL = miaSQL & " ORDER BY Descrizione"
  MioRS.Open miaSQL, miaConn, 1, 3
  If MioRS.EOF Then Exit Sub
 
  MioRS.MoveFirst
  DoEvents
  Do Until MioRS.EOF
  miaDescrizione = MioRS("Descrizione")
  mioIDRicerca = MioRS("IDRicerca")
  mioIDRicercaStr = Chr(Tipo + 65) & CStr(mioIDRicerca) & """"
  If Not IsNull(MioRS("Dettaglio1")) Then mioDettaglio1 =
MioRS("Dettaglio1") Else mioDettaglio1 = ""
  If Not IsNull(MioRS("Dettaglio2")) Then mioDettaglio2 =
MioRS("Dettaglio2") Else mioDettaglio2 = ""
  If Not IsNull(MioRS("Dettaglio3")) Then mioDettaglio3 =
MioRS("Dettaglio3") Else mioDettaglio3 = ""
 
  Set mioItem = lstDettagli.ListItems.Add(, mioIDRicercaStr,
miaDescrizione, "persona", "persona")
  Set mioSubItem = mioItem.ListSubItems.Add(, , mioDettaglio1)
  Set mioSubItem = mioItem.ListSubItems.Add(, , mioDettaglio2)
  Set mioSubItem = mioItem.ListSubItems.Add(, , mioDettaglio3)
  DoEvents
  MioRS.MoveNext
Loop
End Sub
Grazie Mille a Tutti!!!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

  MioRS.Open miaSQL, miaConn, 1, 3
Hai verificato cosa contiene miaSQL a runtime?
A proposito, eventuali errori come vengono gestiti?
-- 
ciao, hal

 A proposito, eventuali errori come vengono gestiti?
Ho verificato miaSQL ed è esatta, contiene la stringa con il filtro (se
c'è) che poi passo al recordset.
La tua seconda domanda non l'ho capita, scusa. Quali eventuali errori?


La tua seconda domanda non l'ho capita, scusa. Quali eventuali errori?
Mi riferisco alle gestione delle eccezioni, il famoso "On Error".
Quindi, nel tuo caso specifico: cadute di connessione, valori non
validi, ecc.
A occhio, se si verificasse un errore in quelle funzioni, il codice
uscirebbe senza eseguire le istruzioni che seguono. L'eccezione
verrebbe magari assorbita da un eventuale On Error Resume Next
dichiarato in una chiamata all' inizio dello stack e la listview
rimarrebbe vuota senza dare messaggi.
-- 
ciao, hal

 rimarrebbe vuota senza dare messaggi.
Ti ringrazio Hal, ho fatto come dici tu, ho appena inserito la gestione
degli errori, ma non da errori, non accade proprio nulla. :)
Io non capisco perchè con il debug, il programma funziona e senza no :((( 
sigh!!! 


 sigh!!!
Temo che Hal intendesse esattamente il contrario: supponeva che tu avessi già, da qualche
altra parte, a monte dello stack di chiamate necessarie per arrivare alla funzione
"MostraDettagli", un gestore degli errori (fatto maluccio) che ti "nascondesse" il
verificarsi di un errore.
Io provo a buttare un'altra idea... non è che da qualche parte, dopo aver messo tutti i
tuoi bravi elementi nella listview, procedi ad una loro cancellazione?
Prova a mettere un punto di interruzione appena prima della fine della "MostraDettagli" e
guarda cosa c'è nel LV in quel momento, se poi sparisce.....
Salutoni
Sergio

Ciao CSSoft!!!
Dunque nella Sub MostraDettagli non ho usato On Error Resume Next, ma un 
On Error GoTo Errore. 
Ora e anche prima che non avevo gestito gli errori, il programma non mi da
errori, funziona solo con il debug.
Una cosa a cui avevo pensato pure io che potesse non far funzionare il
tutto, come hai scritto tu, č la cancellazione degli elementi della
listview.
Nella procedura MostraDettagli prima di scrivere la miaSQL, richiamo una
procedura SvuotaDettagli, perchč una volta effettuata la ricerca, devo
andare a riempire la listview con i nuovi elementi e quindi cancellare i
vecchi.
Ho fatto una prova, togliendo la sub SvuotaDettagli, il programma genera
errore, dicendomi che la chiave non č univoca, il che č giusto perchč se
prima della ricerca per esempio ho un libro chiamato "I NUMERI" e faccio
una ricerca che nel titolo contenga la lettera i, lui trova quel libro e
li si ferma.
Sono testarda molto testarda, tra un pň inzierň a sbattere la testa contro
il muro, ma mi chiedo perchč con il debug funziona? questa cosa proprio
non mi va giů:(( GGGGGGGGGGGGGGGGGGRRRRRR!!!!!


 
Vai nelle opzioni di debug di VB e controlla che nella scheda Generale 
sia selezionato "Interrompi ad ogni errore"
Prova a rieseguire il tuo codice nell'IDE e vedi se si genera l'errore ...
ciao
     maxx
P.S. Questa risposta la mettero' al posto della firma ... ;-)
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 non mi va giů
ok, riprendiamo con ordine...
Hai detto di aver verificato che la stringa miaSql č corretta.
A parte il fatto che continui con il vecchio vizio di impostare i parametri di apertura
del recordset con i numeri invece delle costanti enumerative, quindi non si riesce a
capire che cavolo di recordset apri, prova a mettere un punto di interruzione sull'end sub
della sub MostraDettagli e guarda se in quel punto il lv č stato caricato.
Salutoni
Sergio

 della sub MostraDettagli e guarda se in quel punto il lv č stato caricato.
Anche a me non piace aprire il recordset scrivendo 1 e 3, ma non scelgo io
come aprire il recordset, io scrivo il codice in base alle "direttive":) 
cmq sarebbe mioRs.Open miaSQL,miaConn,adOpenKeyset,adLockOptimistic
Ho messo un punto di interruzione su end sub e lě la listview č stata
caricata.


 caricata.
Ok, a questo punto, visto che fino a qui č andato tutto bene, prova a vedere cosa succede
dopo...
Salutoni
Sergio

 dopo...
Continuando il debug mi visualizza l'esito esatto della ricerca, nella
listview, che ho effettuato in base ai parametri che ho scelto.
Senza debug non vedo nulla:(


[kleila] ha scritto:
(snip)
Ricominciamo da capo:
mettendo un punto di interruzione alla fine della funzione mostradettagli, e arrivando lì
premendo F5 sembra che tutto vada bene (almeno questo è quello che hai detto, o che io ho
capito). Il pezzetto di codice che tu hai postato si ferma esattamente qui: dopo essere
uscito dalla funzione EseguiRicerca, il tuo codice dove và?
Oppure: se il punto di interruzione di cui sopra, invece che sull'end sub di
mostradettagli lo metti sull'endsub di eseguiricerca, cambia qualcosa?
In alternativa: dove sei che veniamo tutti a trovarti (credo che faremmo prima, di questo
passo)
Salutoni
Sergio

 passo)
...mumble mumble....


 ...mumble mumble....
CSSoft quanto mi avevi detto di prenderne di Martini? Una o due casse ? io
so pronto ti aspetto sotto casa... !
^_-
--
Gigio.AutoInvite = True

 Gigio.AutoInvite = True
Martini? 
"Nessuna soluzione del problema?" No, party!" 
Sto esaurendo con questo programma:)))) eheheheheheh!!!


Sono giunte quasi le 18, ma prima di andare volevo ringraziarvi degli
aiuti che mi avete dato e della pazienza che avete avuto, tornerň ad
affrontare il problema martedě, colgo cosě l'occasione per augurarvi Buona
Epifania!!!
Ciao...Ciao!!!


 Sono giunte quasi le 18, ma prima di andare volevo ringraziarvi ....
Azz , io stacco alle 19 , almeno aspetta un po , stai qui , senno' non so
cosa fare , vediamo un po :
- Dormire = C'e' il bos in giro
- Mangiare = frigo vuoto
- caffe' = limite raggiunto
- lavorare = Manco per sogno ...
- leggere il NG = ..mumble... ok va be' !

Ciao a Tutti!!!
[cut]
Ciao!
Dunque... magari dico una paperata... 
ma tempo fa anche io avevo dei problemi con una maschera che non mi si
riempiva in maniera normale, ma solo col debug... 
poi ho avuto la balzana idea di rallentare un po` la chiamata della
costruzione della maschera, inserendo un ciclo for-next... 
tipo 
for i = 1 to 1000: next i... 
bhe...
a me ha funzionato... 
magari non e` il caso tuo... 
ma tentar non cuoce... :-)
-- 
Abulion Yorgen, Maestro Jedi
(A Proposito della dea Bastet)
"Davvero er tanto "venerata" in egitto?"
"No. Le facevano sacrifici umani ma era solo per prenderla per i fondelli."
Aut. Lady of The Rings

 for i = 1 to 1000: next i... 
Buongiorno a Tutti!!!!
Rieccomi qua:)
Ho provato il tuo suggerimento, ma il programma continua a funzionare 
solo con il debug!
Grazie lo stesso!


 nella procedura MostraDettagli.
e dagli.... Dal codice che hai postato la situazione sembra essere questa:
viene chiamata la funzione "EseguiRicerca".
questa funzione, a sua volta, chiama "MostraDettagli".
Una volta terminata "mostraDettagli" il programma ritorna ovviamente all'interno della
funzione "EseguiRicerca", ed incontra subito un end sub; qui finisce il codice che ci hai
inviato. Mettendo un punto di interruzione su questa riga tutto appare corretto (a quanto
dici). Dato per scontato che il comportamento del programma deve essere lo stesso in
funzionamento passo passo piuttosto che "continuo", sospetto che il problema sia nella
parte di codice che viene eseguita dopo la funzione "MostraDettagli".
Salutoni
Sergio

Ciao CSSoft!!!
Stamane ho fatto vedere il codice al mio capo e alla fine ho capito dove era
l'errore!
Le due procedure appartengono a 2 form diversi;
uno dove effettuo la ricerca e l'altro che contiene la listview in cui
visualizzo i risultati della ricerca.
In quest'ultimo form nell'evento activate, c'era (ora l'ho spostata nel
load) una procedura che mi cancellava in pratica i risultati.
Mi sento idiota perchè ho perso 3 giorni e non ho considerato proprio
l'activate:((( Mi spiace!
Ringrazio cmq te e tutti gli altri che mi avete pazientemente aiutato!!!
Kleila
--------------------------------
Inviato via 
http://usenet.libero.it

 tuoi bravi elementi nella listview, procedi ad una loro cancellazione?
Non male come sfera di cristallo eh?
Salutoni
Sergio

 Non male come sfera di cristallo eh?
Sei un mago!!! :)
Hai ragione lo so, me l'avevi anche suggerito, ma io mi ero fissata sulla
procedura che caricava la listview, come già ho scritto alla possibilità che
dall'activate scaturisca la cancellazione del mio bel lavoretto non ci ho
proprio pensato!!!
che dire? sigh:((((((((((((((((((((((((


l'activate:((( Mi spiace!
Sai come avresti potuto risparmiare tempo?
Dal menu View / Watch window imposti un valore che vuoi controllare,
per esempio il numero di items ed imposti il break quando e' vero che
diventano zero.
-- 
ciao, hal
sara' per la prossima volta ;-)

 diventano zero.
Ciao Hal!
Ti ringrazio per il tuo suggerimento, ma sinceramente non ho capito cosa
dovrei fare!:)
Mi potresti spiegare meglio per favore?
Grazie!!!


Mi potresti spiegare meglio per favore?
Monitoring Data with Watch Expressions
http://msdn.microsoft.com/library/en-us/vbcon98/html/vbconmonitoringdatawithwatchexpressions.asp
-- 
hth, hal