Newsgroup: it.comp.lang.visual-basic
Titolo: STOP

Ciao a tutti, ho un programma che deve gestire un database con moltissimi
record e quindi vorrei inserire in questo mio programma un CommandButtun per
stoppare quello che il mio programmo sta facendo.
ES:
il mio programma sta eseguendo un query su questo mio IMMENSO database, ma
mentre la sta eseguendo mi accorgo che non è la query che desidero e quindi
vorrei bloccarla senza dover aspettare che la query finisca il suo corso
(che potrebbe durare anche svariati secondi visto la dimensione del mio
database).
Grazie e ciao.

 ha scritto nel messaggio
news:95rpiq$f4c$1...@nread0.inwind.it...


 ha scritto


 ha scritto nel messaggio
news:95sa52$i9a9n$1...@ID-51318.news.dfncis.de...


 Vedi nella guida DoEvents
Forse non č cosě semplice, prova a cercare query asincrone sull'Help.
Ciao VB

 Mi sono spiegato, 'ragazzo' ex-clipperista? :-)
ora si', maestro :)
pero' diglielo che con le query sul suo IMMENSO db avra' vita complessa... e
che se il db e' davvero immenso e la query abbastanza laboriosa la misma
potra' durare svariati minuti _primi_, non _secondi_ -- mi auguro non di
piu' :)
win fornisce comunque un comodo pulsante stoppa-query-e-altro, solo che
l'hanno splittato in 3 e ci vogliono 2 mani o molta abilita' per usarlo...
ciao, a.

>l'hanno splittato in 3 e ci vogliono 2 mani o molta abilita' per usarlo...
Bisogna usare le query asincrone. Una volta lanciata il controllo torna al
programma che puo' controllare la fine della query oppure stopparla. Per
maggiori dettagli MSDN Library.
a n t o n i o
www.geminisoft.com

 ha scritto nel messaggio
news:95sjbr$ils3n$1...@ID-51318.news.dfncis.de...


 wrote in message
95rpiq$f4c$1...@nread0.inwind.it...


 ha scritto nel messaggio
news:95uaua$9c1$1...@nreadB.inwind.it...


 Ciao a tutti e grazie per vostri consigli.
ciao, a.

 tanto, nemmeno su un pc lento. pero' qualcosa piu' che 'secondi' si'...
No non me la sono presa affatto, ho voluto puntualizzare perchè ritenevo
che così facendo voi mi avreste aiutato meglio.
Non sono un tipo che se la prende facilmente, soprattutto via mail, visto
che
le mail possono essere fraintese facilmente e soprattutto perchè se scrivo
in un NG è perchè voglio essere aiutato e quindi sarebbe stupido arrabbiarsi
con chi sta cercando di aiutarti.
Comunque ritornando sul mio problema, avrei alcune cose da chiederti:
1.   Che intendi per query semplici?
2.   Mi sai dire come utilizzare gli indici?
3.   Con 4 milioni di righe quanto ti ci mette la tua query (sec, min, ...)?
4.   Se ho 100'000 record, quanto tempo ci vuole per una query?
5.   E se ne ho 1 milione?
6.   Il mio programma ci mette più tempo per visualizzare il database che
        per eseguire le query, è giusto così?
Sappi comunque che le query che faccio sono al massimo:
SELECT * FROM tabella WHERE campo1='blablabla' ORDER BY campo1
Ciao, grazie e scusate tutti se vi sono sembrato arrabbiato (... ritengo
che nella vita ci siano cose molto più utili di una incazzatura.)

 che nella vita ci siano cose molto piů utili di una incazzatura.)
praticamente tutte, direi :)
ciao, a.

 per visualizzare _come_ ?
semplicemente per inserire tutti i record di una tabella del database in una
Msflexgrid.
In conclusione, per ogni query mi conviene mettere gli indici sui principali
campi toccati dalla query?
ed inoltre:
Se io devo cercare in una tabella tutti quei record che hanno
[nome]='blablabla', allora se il campo [nome] è indicizzato, la mia query è
più veloce perchè cercare solo nei record in cui il campo comincia per "b"
(visto che sto cercando 'blablabla')?
Ciao e sempre più grazie.

 Ciao e sempre piů grazie.
ciao, a.

 sottinsieme del db.
Per quanto riguarda la velocità di visualizzazione di una tabella, è meglio
flexgrid o dbgrid?
ed inoltre:
Sempre per quanto riguarda la velocità di visualizzazione della tabella, è
meglio utilizzare un dataControl oppure un ciclo do...loop (oppure qualche
altro ciclo che mi consigli)? E nel caso in cui sia più veloce un ciclo è
più veloce DAO o ADO (o che cos'altro)?
Grazie ancora.

 Grazie ancora.
il datacontrol e' la piu' lenta, specie se aggiorni la visualizzazione. in
un ciclo vedrai scorrere la dbgrid riga per riga. se sono molte righe e' una
martirio.
fra dao e ado, con access mi sembra di capire sia piu' svelto dao. ma ha
meno futuro. (forse. sembra. si sussurra. dicono). se stai imparando forse
ti conviene concentrarti su ado.
fra do while / loop e una query secca, dipende da caso a caso. fai qualche
prova. in ogni caso, se usi dao, fai esperimenti con una tabella pienotta di
prova:
'con d.c., gia' settato come dbname, source ecc.
    dim time1 : time 1 = timer
    with data1.recordset
        .movefirst
        do while not .eof
            !nome = lcase(nome)
            .movenext
            doevents 'prova con e senza
        loop
    end with
    Format(Timer - time1, "###,##0.##")
'senza
    dim db as database, rs as recordset
    dim time1 : time 1 = timer
    set db = opendatabase("pippo") 'mdb nella stessa dir dell'exe
    set rs= db.openrecordset("tabella")
    with rs
        do while not .eof
            !nome = lcase(nome)
            .movenext
            doevents 'prova con e senza
        loop
    end with
    msgbox Format(Timer - time1, "###,##0.##")
'sql
    dim db as database, s as string
    set db = opendatabase("pippo")
    s = "update tabella set tabella.nome = lcase(tabella.nome)"
    dim time1 : time 1 = timer
    db.execute s
    Format(Timer - time1, "###,##0.##")
e prova un po' i tempi.
controlla la sintassi in ogni caso, ho improvvisato qui per qui :)
ciao, a.

passare a SQL Server se il suo DB e' proprio IMMENSO.
Che cattivi che siete >:)
Saluti.
-- 
      Gianni "bugbarbeq" Rondinini, 25, RA, 242, 152
  VBR - Vero Birro Romagnolo®, diffidate dalle imitazioni!
 Opel/ECC Calibrezio EVO-IV --- Kawasaki "Gas Gas" ZZ-R 1100
 ICQ# 36893168 - IRCNet: bugbarbeq, @ on #linux-it & #NetBSD

 Ciao a tutti e grazie per vostri consigli.
<CUT>
Tia allego una serie di suggerimenti per migliorare le prestazioni di un
database (Risposta riciclata da un mio Post del 24 gennaio ore 0.00
<Inizio ricicliaggio>
Alcune soluzioni indicate per Jet 3 ma penso valide anche per le versioni
successive:
Salvare le query nel Database
Evitare l'uso di espressioni tipo IIF nella SELECT
Evitare i GROUP BY su molte colonne
Cercare di indicizzare tuti i campi utilizzati nelle Join (Questo può
diventare un problema in fase di inserimento dati, in quanto + indici ci
sono + è lento l'inserimento)
Utilizzare Count(*) anziché Count(NomeCampo)
Compattare ogni tanto il DB
Usare indici numerici
Inibire i valori NULL nei campi che fanno parte di Join
Evitare di ordinare troppi campi o campi non ottimizzati
Utilizzare chiavi crescenti non decrescenti
Evitare operatori Like *pip* se puoi usare Like pip*
Seleziona solo i campi che ti servono (Evita SELECT * , selezionando, magari
10 campi, se puoi usare SELECT Campo,)
Se devi solo spazzolare il recordset dal primo all'ultimo record utilizza
recordset forward only
Apri i recordset in modalità Read only
Queste sono solo alcuni consigli per quanto riguarda le query, se me ne
vengono in mente altre o le trovo da qualche parte le aggiungo.
Inoltre bisognerebbe vedere come visualizzi i dati , quali controlli usi, se
bound o unbound etc.,
<Fine riciclaggio>
Ciao VB

 ti conviene concentrarti su ado.
Forse, sembra, si sussurra e dicono (documentazione M$ :P) che a partire da
MDAC 2.6 DAO sia defunto.
Ciaotutti,
alessandro

 MDAC 2.6 DAO sia defunto.
non c'e' problema. scarico tutto quello che trovo in giro e lo metto su un
ftp. magari quello di moreno, cosi' si potra' scegliere fra ms-ado vs ms-dao
:)

 Apri i recordset in modalità Read only
Salvare una query significa che ogni query che faccio deve essere
memorizzata in un'altra tabella del mio database in modo che poi posso
lavorare solo sui campi e sui record di questa nuova tabella?
Che cosa significa "compattare un DB"?
Se ho indicizzato il 'campo1', ma adesso mi serve di indicizzare il
'campo2', devo prima levare l'indice dal 'campo1'?
"recordset forward only" serve per aprire un database in sola lettura?

 "recordset forward only" serve per aprire un database in sola lettura?
No serve per aprire un recordset (non database) 'a scorrimento solo in in
avanti', cioè in questo tipo di recordset puoi scorrere i record solo da
primo verso l'ultimo e non viceversa, questo velocizza le operazioni in
quando JET deve fare molti meno controlli.
Ciao VB
Glossario:
JET: modulo di gestione del database (L'origine del nome non è sicura)
DAO:classi per accedere a JET
Database: insieme di tabelle e query correlate (In Access corrisponde al
file), in altri database, è composto da singoli file in una singola
directory
Recordset: Elenco di record ottenuti come risultato da una query, o
dall'apertura diretta di una tabella
Bibliografia:
Jet Database Engine Guida del programmatore. MicrosoftPress Mondadori
Informatica
Newsgroup
Prove e esperimenti
Gli ultimi due non li trovi in libreria 8-))