Newsgroup: it.comp.lang.visual-basic
Titolo: Applicazioni con .mdb Urgente!!!

Scusate se riscrivo il messaggio, non ho trovato risposte...
Ho veramente urgenza di capire come fare.
Potete aiutarmi?
Mi serve aiuto per risolvere un problema:
Sto imparando il VB5, costruendo un'applicazione gestionale , nella
fattispecie, gestione di magazzino per uso personale.
Utilizzo un database mdb, creato con Access97, modificato con il Data
Manager di VB5, e comunque salvato sempre nel progeto come database .mdb
Una volta effettuata la compilazione dell'applicazione, e quindi fatto il
setup con il setup wizard di VB5, vado all'installazione, e mi accorgo che
il database vero e proprio, quello che per me č (nomedatabase.mdb), non
compare piů, anche se l'applicazione correttamente funziona, i record
vengono salvati, aggiunti, cancellati, etc.
Si, ma che fine ha fatto il mio database?
Ovvero, nel caso che l'applicazione venga disinstallata, per qualsiasi
motivo, una volta zeppa di records, come faccio a salvare il solo database
pieno di dati, per poi eventualmente sostituirlo a quello vuoto di
installazione, per riavere l'applicazione nella nuova installazione, ma
ritrovare tutti i miei dati?
grazie
Fabio

 wrote in message 81c9tq$8l0$1...@nslave1.tin.it...


Non chiarissimo, comunque, tieni presente queste due cose, che magari
ti possono aiutare.
1) il set-up controlla che siano inclusi tutti i files inerenti il
progetto, non eventuali files esterni (tipo la dua sorgente di dati
Amdb) che devono essere esplicitamente aggiunti.
2) normalmente i setup (tutti) ti danno la facolta' di indicare DOVE
collocare i vari files.... prova a verificare dove effettivamente
viene collocato il tuo database.
Per darti indicazioni piu' precise, dovresti pero' anche farci sapere
se la stazione su cui testi il setup e' nuda (ovvero, senza vb o
similia dentro) oppure no.
Per quel che riguarda la disinstallazione.... beh, potresti magari
improvvisare una procedura di backup, che l'utente deve eseguire prima
della disinstallazione del pacchetto...
Ciao!
Luca Menegotto
PS... ma le copie non dovrebbero essere fatte sempre e comunque?


hai provato a fare avvio/trova -> nomedb.mdb ? cosi' scopri dov'e' finito.
ovviamente se il prg va da qualche parte il db e'.
ipotesi: non e' che tu smanettando col datamanager hai fissato il
datacontrol a una dir particolare (io li tengo tutti i \vbprog + varie
sottodir) e il setup te l'ha ricreata sul nuovo pc ? il prg, se non
modifichi il percorso nel codice, gira, se il percorso del datacontrol e'
coerente.
nel caso, nel prg metti
dim db
set db = app.path & "\nomedb.mdb"
dim rs
set rs=db.openrecordet...
set formX.datacontrol.recordset= rs
in genere e' molto meglio.
scusa se tiro un po' via ma sono di corsa.
hth pal


 wrote in message 81e7qh$m6m$1...@fe2.cs.interbusiness.it...


 wrote in message
383a7f4b...@news.nettuno.it...


 wrote in message 81c9tq$8l0$1...@nslave1.tin.it...


 Grazie davvero.
se funziona, di niente, ma se hai molti frm con molti campi collegati dovrai
sudare un po' temo.
1. lascia tutti gli oggetti collegati ai campi con la loro bella connessione
al datacontrol.
2. quando carichi il frm, crea una var db e una rs per ogni dc che devi
usare in contemporanea (la db magari mettila pubblica in un bas e chiudila
solo all'uscita, cosi' poi non la devi dichiarare per ogni rs), e collega il
dc a quelle: i controlli collegati _dovrebbero_ seguire il dc. qui ti do' un
esempio in dao 3.51 con mdb indicizzato -- se usi sql devi guardare la guida
e magari chiedere intanto una prima dritta veloce a qualcuno piu' esperto di
me, tipo antonio, fabio e gli altri. ma il concetto e' molto simile.
3. sul mio sito free c'e' un db molto grezzo ma su cui ragionare, con
sorgenti, pctrix. e' pesino ma magari tiralo giu'. almeno il codice
(vb5sp3), meglio tutto (fra l'altro ci sono anche un sacco di msg utili su
vb, access97). _dovrebbe_ girare dovunque lo metti, salvo crolli da codice
del picchio. guarda le proprieta' del (dei? boh!) datacontrol, fregatene di
messaggiacci vari, dai sempre annulla. guarda aperture e chiusure di db/rs
vari. e prima di maledirmi tieni presente che e' cod vecchiotto.
4. per essere sicuro di non usare piu' il db originale (fattene cmq una
copia, prima...), se lo hai p.e. in \mdb, mentre provi ribattezza il perc
\_mdb (se lo hai in \documenti, che e' meglio non rinominare, mettilo in
\trans o da qualche altra parte) --> dao non lo trova piu' ---> eventuali
casini saltano fuori prima. campi che non si riempiono, text che tornandoci
restano bianchi pur avendoli appena compilati, check che non vanno ecc. --
controlla il comportamento di tutti i campi dell'archivio, se ne dimentica
_sempre_ qno. e poi lo si scopre dall'utente, dove magari non c'e' --
nonche' vb -- nemmeno access...
5. qui c'e' una prima sub su cui ragionare, in attesa dei 4 mb...
hth, in bocca al lupo, pal
--
andrea palazzi
pal at cedoc dot mo dot it [attach here]
xday at libero dot it [no attach]
http://members.xoom.it/xday/_html/
free sw - 
http://www.comune.modena.it/cittadini/apal/html/
p.f. nei messaggi usare solo testo normale, non html !
please use just plain text, not html, in your msgs !
=======
io per una persona non molto esperta ho fatto:
un frm principale, non mdi (troppo complesso per l'utente, e poi ho una sola
tabella), ma non importa, collegato a un dcontrol, ma nascosto, con cmd miei
anziche' le frecce --> gestione errori. doppia conferma per delete, _tutti_
i txt --> locked=true. no primkey, indice univ sul contatore (numpc).
inser/modif un cmd --> apre un altro frm, modale, che gestisco solo via
codice. eventuali annulla non fanno alcun casino, e se l'ut. da' ok, ne
risponde. se ha fatto casini di entry, basta annullare. (in realta' non
annulla mai, tanto c'e' chi corregge...).
qui non ci sono i rientri regolari, ma tu usa pure il tab. io li uso
_sempre_
Private Sub cmdOK_Click()
On Error GoTo errman
Dim OldNdx
OldNdx = frmBibliog.cboIndice
MyBK = frmBibliog.dbBibliog.Recordset.Bookmark
Dim db As Database, rs As Recordset
Set db = OpenDatabase(MainPath & "bibliog.mdb") ' guarda le opzioni in
opendb..
Set rs = db.OpenRecordset("bibliog") ' default = tabella indicizzata
rs.Index = "numpc"
With rs
If Caption = "NUOVA SCHEDA" Then
.AddNew
ElseIf Caption = "MODIFICA" Then
.Seek "=", frmBibliog.lblNumPC
.Edit
End If
!autcognome = txtAutCognome
!AutNome = txtAutNome
!titolo = txtTitolo
.Update
End With
rs.Close '<--- solo x' non mi servono piu' qui. devi valutare tu caso per
caso.
db.Close '<--- "
set rs=nothing '<--- "
set db=nothing '<--- "
frmBibliog.dbBibliog.Refresh
frmBibliog.dbBibliog.Recordset.Index = OldNdx
frmBibliog.dbBibliog.Recordset.Bookmark = MyBK
'Unload Me
Me.Hide
Exit Sub
errman:
MsgBox Err & " - " & Error
End Sub
cioe', quando uno da' ok:
-- se sta modificando, cerca la scheda attraverso l'indice numpc (che e' un
contatore quindi assolutamente univoco), quindi mette nel rs i dati dei
textboxes.
-- se sta inserendo, aggiunge una scheda e procede come sopra. modif/inser
li gestisco caricando lo stesso form ma dandogli una caption diversa a
seconda del pulsante con cui e' stato chiamato. cosi' evito di doverlo
duplicare (anche se a volte puo' essere necessario).
potresti anche fare p.e. qc tipo:
in un bas --> public sAutore as string
nel txt_change del 2. form --> sAutore = txtAutore
nell'unload del 2. form --> form1.txtautore = sAutore
==> quando muovi il datacontrol di form1 o con un refresh forzato dovrebbe
aggiornarsi. pero' in linea di massima meno ricorri al datacontrol meglio
e'. io come vedi uso un mix di controlli e codice, forse l'ideale sarebbe
tutto codice. cosi' e' abbastanza pratico.

 wrote in message 5Td%3.6054$ge.5...@typhoon.libero.it...


ciao, se posso esserti utile mi fa piacere, ma non essendo io un pro non
mandarmi niente, ci capirei zero e in piu' a fine anno ssono davvero sotto
pressione.
dunque, il tuo lavoro mi sembra abbqstanza tipico come rdbms --
i dc sono comodi per testare velocemente, ma poi o ricrei le identiche
dir -- cosa che il setup wizard si guarda bene dal fare -- o la si prende
sugli incisivi in modo tysoniano...
purtroppo se non l'hai mai fatto ci dovrai sudare un po'... io pero' ci sono
saltato fuori a ragionamenti e tentativi ( come spero tutti salvo s.s.
Einstein e mr V. Basix :) .. quindi ci si riesce, coraggio.. cerco solo di
alleviarti la sofferenza, ma la testa tua sara' diversa quindi _devi_
scoprire il tuo "accesso ai dati" personale... il che poi porta al fatto che
e' qsi impossibile usare il codice degli altri.
premessa obblig.: io uso mdb in locale, indicizzati, e dao. il sistema l'ho
testato anche su una lan nt e va, ma non me ne fragava niente degli accessi
contemporanei, che essendo alla ms ogni tanto davvero idioti stanno
risolvendo come si deve solo adesso, mentre in clipper era tranquillo gia'
10 anni fa...
se stai in lan prob ti conviene scordarti gli indici e forzarti a sql (con
l'aiuto di altri, io sono al pallottoliere li'), ma il ragionamento di
astrazione dai controlli fisici e' molto simile.
cmq:
1. in casi del genere io dichiaro una var pubblica in un bas, che la vedano
tutti i frm:
dim maindb as database
-- la carico al load dell mdi o del main:
set maindb= opendatabase("ciccio.mdb") <-- per default e' dove sta l'exe
-- purtroppo _devi_ perdere un po' di tempo almeno a capire la sintassi
opzioni ecc. -- vb5 almeno aveva manuali cartacei che facilitavano un po' le
cose, ma le stesse stanno nella guida inlinea.
-- qta var db la chiudo e annullo solo all'uscita finale o per robe tipo
compact, che vogliono il db chiuso. nel caso, dopo o esco o riapro il db.
2. nei vari frm dichiaro una var rs per ogni tabella che devo usare
dim rs1 as recordset, rs2 as recordset...
-- e le setto al frm_load
set rs1=maindb.openrecordset("fornitori") <-- maindb e' quella pubblica, cui
mi riferisco sempre, cosi' non devo stargliela a menare tutte le volte. e
per default openrecordset apre in modo tabella, direi, non dynaset o
snapshot, che pure possono servire parecchio.
-- collego l'indice che mi serve, gia' pronto nell'mdb:
rs1.index="codfor" -- o "forname"...
-- collego il dc alla var
set [frmForn.]dbForn.recordset=rs1
-- a qto punto hai ( o dovresti avere :) una discreta sintonia fra il dc e
il db nella dir dell'exe..., qualunque essa sia.
-- faccio tutte le mie cosine, poi quando scarico il frm chiudo e azzero la
var rs:
rs1.close
set rs1=nothing
simile in chiusura con il maindb.
per procedure tipo leggi l'input --> cerca nell'altra tabella --> trova -->
carica l'output, uso delle var rs locali dich nella singola sub che chiudo
uscendo dalla sub. seno' le risorse ciao, mi sa.
e' un sistema molto sporco, che mischia oggetti e codice in modo spurio, ma
per quanto ho potuto capire e' abbastanza connaturato a vb. e va. e ci vuole
poco. esattamente i presupposti di vb, per il 90% dei db al mondo. il tutto
lo puoi fare anche senza mettere un dc che uno, e, volendo, facendo a meno
anche di access. anche in clipper creavo i dbf, se gia' non c'erano. ma se
posso evitare...
scaricati pctrix dal mio sito free. i sorgenti sono brutti ma ci sono,
ragionaci sopra. scordati che alle 20 di stasera il tutto gira. ma se ti
intanto ti concentri su _un solo_ frm tipo fornitori e sul main, gli altri
poi sono quasi solo copy+paste... dopo che hai messo a fuoco le linee
generali, qdo hai un problema preciso, risolvi qlo. ma prima devi
delineartelo. usa la guida, c'e' praticamente tutto, anche se in un
linguaggio che alarico sembrava guinizelli al confronto... quindi anche piu'
complicato... inutilmente... ma tant'e'.
se hai altri dubbi magari scrivimi, non vorrei ap_pal_lare gli altri. pf non
mandarmi codice, davvero non ho tempo.
ciao, pal
