Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Stato Elaborazione
giovedì 08 agosto 2013 - 09.30
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gsistemi
Profilo
| Junior Member
100
messaggi | Data Invio:
gio 8 ago 2013 - 09:30
Salve a tutti,
non riesco a fare una cosa che apparentemente mi sembrava semplicissima!
Vorrei visualizzare in una textbox il valore di un campo sql man mano che scorro i record. Ecco il codice di esempio:
Using myconn = New SqlConnection(strconn)
myconn.Open()
strsql = "select tabella.campo from tabella"
Using mycmd = New SqlCommand(strsql, myconn)
Using myreader = mycmd.ExecuteReader()
While (myreader.Read())
TextBox1.Text = myreader.Item("campo")
End While
End Using
End Using
End Using
Eseguendo questo codice visualizzo solo il valore dell'ultimo record
Grazie!
Dev01
Profilo
| Newbie
30
messaggi | Data Invio:
mer 21 ago 2013 - 23:34
Il caricamento dei record è un'operazione relativamente troppo veloce.
Non ha senso né utilità visualizzarli nel modo che proponi.
Inoltre, inserendone la lettura in un ciclo di while, è ovvio che tu riesca a percepire/visualizzare solo il valore che, fra operazioni che sia considerate atomicamente o anche, nel loro complesso, per ogni record, possono tranquillamente ed inopinabilmente considerarsi rapidissime (leggi: lettura, allocazione/rappresentazione in memoria e aggiornamento dell'applicazione (assegnazione della variabile/GUI)) resta visibile per più tempo (anche perché consente l'aggiornamento del controllo coinvolto)... e cioè, molto banalmente, l'ultimo!
Prova a rappresentare i valori aggiungendoli all'interno di un controllo di tipo listbox.
01000100 01100101 01110110 00101101 00110000 00110001
gsistemi
Profilo
| Junior Member
100
messaggi | Data Invio:
gio 22 ago 2013 - 12:08
ovviamente il mio è un esempio per semplificare, nella soluzione reale faccio 100.000 operazioni all'interno del ciclo while leggendo moltissimi record. eppure dopo un lungo periodo di pausa visualizzo solo l'ultimo record.
Dev01
Profilo
| Newbie
30
messaggi | Data Invio:
sab 24 ago 2013 - 12:49
Se il caricamento avviene nel thread principale dell'applicazione allora è, probabilmente, l'interfaccia che si freeza e si libera per l'aggiornamento del controllo solo dopo il termine del caricamento.
Adesso io non comprendo l'utilità anche perché pur visualizzando i record in fase di caricamento in real-time non è detto che si riuscirebbe a leggerli, né ad identificare quello di interesse anche perché la visualizzazione potrebbe essere saltata...
ma posso consigliarti, se lo accetti, di tentare di popolare, tramite l'utilizzo della stessa procedura, una listbox al fine di verificare se effettivamente, data la quantità di record da te proposti, tu riesca a visualizzare l'effettivo aggiornamento del controllo durante la lettura.
Se noti differenze sbaglio io oppure la creazione dinamica delle linee consente di visualizzare le modifiche al controllo, altrimenti è probabile che si tratti di un mio limite nel comprendere la tua richiesta: in tal caso ti chiedo di essere più chiaro ed esplicito possibile relativamente il codice utilizzato (quello vero) e al risultato che desideri ottenere da quel codice .
01000100 01100101 01110110 00101101 00110000 00110001
gsistemi
Profilo
| Junior Member
100
messaggi | Data Invio:
sab 24 ago 2013 - 13:26
il codice da postare è infinito... quello che fa il programma è questo:
legge da un database una serie di link di pagine internet (principale)
per ogni pagina cerca tutti i link presenti (secondario)
per ogni link trovato cerca tutte le immagini
scarica le immagini e se soddisfano certi criteri vengono salvate
vorrei vedere che link (principale e secondario) sta analizzando, quale immagine sta scaricando ed eventualmente visualizzare l'immagine valida.
Ho utilizzato un thread in background ma non mi fa accedere ai vari controlli (textbox e image) per scriverci le informazioni
Dev01
Profilo
| Newbie
30
messaggi | Data Invio:
lun 26 ago 2013 - 17:15
Ok... ho capito.
A mio avviso si tratta dell'utilizzo intensivo del thread principale che in qualche modo non aggiorna l'interfaccia.
Di rapida soluzione e senza scrivere tanto codice mi viene in mente il metodo utilizzato nei setup di installazione (quello collegato al comando "Mostra di più/Mostra di meno") che ti consente di visualizzare lo stato di avanzamento dell'installazione mostrandoti l'ultimo stadio raggiunto e le relative informazioni.
"Sto scansionando l'url: "
"Alla pagina: "
"E scaricherò le seguenti foto: " (segue lista)
Alla prossima pagina dopo il download refreshi tranne che per la prima riga.
Al prossimo sito refreshi tutto.
Questo, ovviamente, se come idea può esserti di aiuto e sempre che tu non sia vincolato in qualche modo all'utilizzo della textbox.
In secondo luogo per curiosità personale posso chiederti che necessità hai di scaricare le foto che non corrispondono al criterio?
Vengono selezionate manualmente o da programma?
Qualora tu non riesca a trovare una soluzione e volessi condividere il modulo (che non ho il tempo di riscrivere daccapo) per farmi effettuare delle prove fino ad eventuale soluzione resto a tua disposizione.
01000100 01100101 01110110 00101101 00110000 00110001
Feroxis
Profilo
| Junior Member
80
messaggi | Data Invio:
mer 18 set 2013 - 22:04
Puoi fare solo una lettura veloce dopo aver preso i dati per rendere tutto più semplice, ma scorrerebbero talmente veloce che non avrebbe senso:
myconn as new slqconnection(sqlstring)
mycomm as new sqlcommand("",myconn)
myadp as new sqldatadapter
myset as new dataset
function(byval tbname as string)as boolean
mycomm.commandtext = "SELECT * FROM " & tbname
try
myconn.open
myadp.fill(myset,tbname)
catch ex as exception
myconn.close
mycomm.parameters.clear
return false
end try
myconn.close
mycomm.parameters.clear
for i =0 to myset.tables(0).rows.count -1
textbox1.text = myset.table(0).rows(i).item(0).tostring
next
return true
end function
quel ciclo può essere sostituito con un timer per rallentare il processo e dare la possibilità di leggere qualcosa impostandolo a 500 Interval e identificare un parametro per sbloccare un ciclo do until fino a che il parametro non cambia ad ogni esecuzione del timer specialmente per il fatto che il timer esegue l'operazine al termine del conteggio.
esempio
ecc ecc ecc
mycomm.parameters.clear
(In dichirazione pubblica public mystring as string e public passaggiocompletato as boolean = false)
for i = 0 to myset.tables(0).rows.count -1
mystring = myset.tables(0).rows(i).item(0).tostring
timer1.interval = 500
timer1.start
do until passaggiocompletato = true
dim val as integer = 1
val = 1
loop
timer1.stop
passaggiocompletato = false
next
sub timer1_interval(ecc ecc)
textbox1.text = mystring
passaggiocompletato = true
end sub
magari non ho capito cosa vuoi dire e/o sono fuori dal mondo.
gsistemi
Profilo
| Junior Member
100
messaggi | Data Invio:
mer 18 set 2013 - 22:12
E' quello che ho provato a fare io ma vedo solo l'ultimo e non i record che scorrono!
Ho risolto in qualche modo ma è allucinante!
Feroxis
Profilo
| Junior Member
80
messaggi | Data Invio:
mer 18 set 2013 - 22:37
Idea n°2
qui ottendo i record in un dataset
public val as integer (numero di record dntro il dataset)
public intnumber as integer = 0
timer1.interval = 500
Sub Timer1_tick(ecc)
if intnumber = val then
timer1.stop
end if
textbox1.text = myset.tables(0).rows.(intnumber).item(0).tostring
intnumber += 1
end sub
intnumber = 0
Se stai facendo questo con i siti web, una specie di motore di ricerca e usi Spider con Grab url non riesci perchè oltre i 600 link blocca gli altri processi, e bisogna mettere un timer di almeno 20 secondi tra uno spider e l'altro.
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !