Newsgroup: it.comp.lang.visual-basic
Titolo: Alcune domande sui DB (Lunghino e Importante)

Ciao a tutti Ragazzi.
Volevo chiedere due cose:
1) Se realizzo un applicativo (gestionale) in VB, e uso un DB Access 2000,
posso usarlo sia con DAO che con ADO, vero? Ma l'utente che lo userà,
supponendo che
non abbia Access 2000 installato, incontrerà problemi? O devo per forza
usare il '97?
2) Nel mio programma, utilizzo i seguenti "componenti":
    -) VB 6 (ovvio! ;))
    -) DB access 97
    -) Controllo Apex TrueDBGrid
    -) DAO
Ho una griglia TrueGrid, associata a un DataControl. Quando eseguo un doppio
click
su una riga, mi si apre una maschera di modifica per il record selezionato
(si parla
di articoli di un magazzino). Modifico i miei valori, e salvo il tutto.
Quando chiudo questa finestra
(aperta con .show vbmodal), la riga di codice immediatamente seguente
riesegue un refresh
del controllo Data, reimpostandogli anche la sua proprietà recordsource:
Data1.RecordSource = strMiaQuery
Data1.Refresh.
Il problema è che la griglia non si aggiorna con i nuovi valori. Stesso
discorso per
l'inseriemento di un nuovo elemento, cosa che avviene con la medesima
maschera, aperta allo
stesso modo.
Nel DB i valori vengono inseriti. E' solo una questione di tempo, come se il
DB non venisse
aggiornato immediatamente. Se infatti aspetto 5 secondi (con un timer o la
funzione sleep),
e poi eseguo il refresh, allora è tutto OK. Eppure non ci sono molti campi
(sono 12), e me lo fa
anche se il DB è vergine, cioè con 0 record.
Non so che fare... è troppo lento e poco immediato dover aspettare. Inoltre
dalla mia maschera
posso inserire un articolo, salvarlo, ed inserirne un altro, senza doverla
chiudere. E mi piacerebbe
che la griglia che sta in un secondo piano, intanto si aggiornasse.
Altrimenti vedrei le modifiche solo
dopo aver chiuso la maschera, e dopo aver mostrato un msg del tip "Updating
db... please wait...";
e devo dire che non è il massimo.
Non so che fare. Ho provato molte cose. Il bello è che in un'altra sezione
del programma, inserisco
dei dati in una tabella (10 campi)... uso un dtata controllo associato ad
una griglia...e ad ogni inserimento,
la griglia si aggiorna...boh... non so che fare! :) E devo usare per forza
il controllo TrueGrid.
Inoltre non so chi in questo NG, credo pal, disse che usava tranquillamente
un DB access con milioni di
record ed era abbastanza veloce... a me invece, con appena 5000 record, è di
una lentezza esasperante.
Sapreste darmi qualche consiglio per ottimizzare un db? Stile indicizzazione
dei campi, chiavi primarie, che tipo
di dato usare (Valuta, testo, interi, data; qual è il più adatto insomma...)
oppure un articolo che potrei leggere
per chiarirmi le idee.
Ah... per ultimo... volevo chiedere scusa al realizzatore dell'OCX
Nmkit4ocx... sono
il ragazzo che ti aveva chiesto delucidazioni via mail. E anche nel NG. So
che sei impeganto, e ti cheido scusa
per la mia insistenza. Rinnovo inoltre i miei complimenti per il controllo.
Ciao a tutti e grazie.

 una lentezza esasperante.
sono arrivato a 4.5 mln, per l'esattezza. il db, su pc, e' un access97. per
sicurezza volevo star largo con alcuni campi, quindi con long al posto di
integer ecc. -> ris. 606 mb per 507 cd. adesso ho riprovato cambiando
lievemente la struttura, e mettendo degli int e byte dove possibile: 97
cd -> 82 mb.
per il resto, chiariamo. il db e' pesantemente indicizzato (cfr tabelle
principali qui sotto), il che spiega la stazza,
usando dao e seek con gli indici, ci sono appena lievi impuntamenti (su un
portatile con disco lento) a passare dalla scheda 1 all'ultima, o alla
successiva (nell'indice).
con sql il discorso cambia abbastanza. mi semba di ricordare che una query
tipo
    select * where filname like "win*"
andasse sul minuto e mezzo, prob sfruttando (se non sbaglio, la c.d.
tecnologia rushmore) gli indici.
con
    select * where filname like "*win*"
i minuti salgono, non poco.
il tutto e' senz'altro ottimizzabile, a me serviva essenzialmente, oltre che
per ritrovare velocemente file in circa 600 cd, a vedere quanto reggeva
access.
a questo punto direi che il limite principale sia quello delle dimensioni
complessive, che in access97  e credo 2000 e' di 1 gb. una cosa seria
passerebbe a sql e/o sql server, ma questo e' poco piu' di un gioco.
ciao, a.
===========================
TABLE: dir
------FLD: DiskNum
------FLD: DirNum
------FLD: DirName
------FLD: DirUni
------FLD: DirExt
------FLD: DirDate
------FLD: DirAttr
------FLD: DirChek
------IDX: DirName
---------DirName
---------DiskNum
------IDX: DirNum
---------DirNum
---------DiskNum
------IDX: DirUni
---------DirUni
---------DiskNum
---------DirNum
------IDX: DiskNum
---------DiskNum
---------DirNum
------IDX: DKnumDRname
---------DiskNum
---------DirName
===========================
TABLE: disk
------FLD: DiskNum
------FLD: DiskName
------FLD: MagNum
------FLD: DiskType
------FLD: Wk
------FLD: Hm
------FLD: Ord1
------FLD: Ord2
------FLD: DiskYear
------FLD: DiskMonth
------FLD: DiskDay
------FLD: DiskCat
------FLD: DiskNote
------FLD: CatTime
------FLD: VolName
------FLD: nDirs
------FLD: nFiles
------FLD: nBytes
------FLD: chek
------IDX: CatTime
---------CatTime
------IDX: DateName
---------DiskYear
---------DiskMonth
---------DiskDay
---------DiskName
------IDX: DiskName
---------DiskName
---------DiskYear
---------DiskMonth
---------DiskDay
---------MagNum
------IDX: DiskNum
---------DiskNum
------IDX: nBytes
---------nBytes
------IDX: nDirs
---------nDirs
------IDX: nFiles
---------nFiles
------IDX: Ord1
---------Ord1
------IDX: Ord2
---------Ord2
------IDX: TypeName
---------DiskType
---------DiskName
===========================
TABLE: file
------FLD: DiskNum
------FLD: DirNum
------FLD: FilNum
------FLD: ZipNum
------FLD: FilName
------FLD: FilExt
------FLD: FilDate
------FLD: FilYear
------FLD: FilMonth
------FLD: FilDay
------FLD: FilSize
------FLD: FilAttr
------FLD: FilZip
------IDX: DirNum
---------DirNum
---------DiskNum
---------FilNum
------IDX: DiskNum
---------DiskNum
---------DirNum
---------FilNum
------IDX: FilExt
---------FilExt
---------FilName
---------FilYear
---------FilMonth
---------FilDay
------IDX: FilName
---------FilName
---------FilYear
---------FilMonth
---------FilDay
---------DiskNum
===========================

"...(se non sbaglio, la c.d. tecnologia rushmore) ...."
AhUHauHauH! Non ho capito una fava! Ammetto la mia ignoranza spaventosa.
Mi sa che devo imparare come indicizzare i campi, e soprattutto con che
criterio.
Anzi... credo che devo imparare un sacco di cose ancora, non solo quello!!!
Se non mi sbaglio quando dici:
TABLE: dir
------FLD: DiskNum
------FLD: DirName
------IDX: DirName
---------DirName
---------DiskNum
FLD significa campo, e IDX che lo indicizzi, vero?
Ma i due "sottocampi":
---------DirName
---------DiskNum
che significano???
In che modo devo interpretare il tuo mettre su due "livelli"?
------IDX: DirName
---------DirName
---------DiskNum
Ah... domandina per tutti. Uso DAO 3.60.
Riesco ad aprire un DB Access 2000... invece con il controllo Data (non
ADO),
impostando il DatabaseName, al momento del Refresh mi dà errore.
Forse non posso + usarli con Access 2000?
Mi sto orientando verso ADO, solo che in una parte della mia applicazione,
necessito del
vecchio controllo Data per inserire immagini nel DB (associano un controllo
picture al datacontrol);
cosa che con ADO non mi riesce.
Grazie a tutti e ciao.

 Forse non posso + usarli con Access 2000?
non ti so rispondere, ma ci sono stati molti post su vb e access2000, prova
a cercare un po' negli arretrati.
ciao, a.
--
andrea....@tin.it
http://members.xoom.it/xday
free/vb sw -- 
http://www.comune.modena.it/cittadini/apal
--
p.f. usate solo testo, non html, nei vostri messaggi !
please use plain text, not html, in your messages !

 a cercare un po' negli arretrati.
Ho letto a riguardo che è un bug di VB6, cioè con access 2000, i data
control non funziano.
Ho letto il readme.htm del servicePakc4, in cui dicono che il problema è
risolto.
Ed invece, nada. non funzia. Il datacontrol non va bene con access 2000. :)
Ho installato
il SP4 zenza motivo! :)
E vabbè... finchè non risolvono (sul sito MS dicono che è in cantiere una
SP5! :)),
rimando con access 97.
Ciao e grazie ancora

 rimando con access 97.
lieto di esserti stato utile. appena ho la dedicata ti mando il paccone ado.
per access97, mi sa che fai bene. non ho ancora guardato a2000, non so se ci
sono cose sostanzialmente diverse. per come si usa un db di solito da vb, ne
dubito. mi sembra in compenso che qno parlasse dell'uso di unicode, per cui,
se non ci stava attenti, un db con un po' di addnew invece di incrementarsi,
poniamo, di 100k, cresceva di 10m... salvo tornare a 100k dopo il pack. il
mio db di prova avrebbe fatto scoppiare l'hd...
magari sono legg. metr., ma ogni tanto mi frulla che un bel
    ms sp1
non sarebbe male.
ciao, a.