|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 352
|
[VB]Compattare un database da programma: si può?
Ciao ragazzi!
Volevo chiedere se è possibile utilizzare un controllo di VB per inserire nel proprio programma una funzione che compatti un database Access. Questa funzione dovrebbe servire a ripristinare un ordine sequenziale ai campi contatore, quando sono stati eliminati dei record con, appunto, dei campi contatore (scusate il gioco di parole). Mi sbaglio? Esiste un controllo del genere? Grazie 1000!
__________________
"L'uomo che ha Fede è fortunato. Chi non ha Fede è una persona cui manca qualcosa nel profondo della sua esistenza. La Fede è speranza. L'uomo che abbandona questa speranza non è un uomo, è un disperato" [A. Zichichi] |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Non serve un controllo.
Se usi la libreria DAO basta scrivere così: DAO.CompactDatabase(source, destination) ------ Se usi ADO, invece, devi caricare anche la libreria JRO (Microsoft Jet and Replicator object). Questo è un sample trovato su MSDN, che in più cripta il database: Function EncryptDb(strSourceDB As String, _ strDestDB As String) As String Dim jetEngine As JRO.JetEngine Dim strSourceConnect As String Dim strDestConnect As String ' Build connection strings for SourceConnection and ' DestConnection arguments. strSourceConnect = "Data Source=" & strSourceDB strDestConnect = "Data Source=" & strDestDB & ";" & _ "Jet OLEDB:Encrypt Database=True" Set jetEngine = New JRO.JetEngine ' Compact and encrypt the database specified by strSourceDB ' to the name and path specified by strDestDB. jetEngine.CompactDatabase strSourceConnect, strDestConnect Set jetEngine = Nothing End Function Per fare solo la compattazione, basta modificare opportunamente la stringa di connessione. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 352
|
Quote:
Ma perchè ci sono una stringa di partenza ed una di destinazione? Se ho un file chiamato "db.mdb" e voglio compattarlo, strSourceDB sarà il path del programma con il file del database e strDestDB cos'è?
__________________
"L'uomo che ha Fede è fortunato. Chi non ha Fede è una persona cui manca qualcosa nel profondo della sua esistenza. La Fede è speranza. L'uomo che abbandona questa speranza non è un uomo, è un disperato" [A. Zichichi] |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 352
|
Dimenticavo...
l'operazione di criptaggio (si chiama così?) in cosa consiste? Se cripto un database, poi per leggerlo è diverso dal normale?
__________________
"L'uomo che ha Fede è fortunato. Chi non ha Fede è una persona cui manca qualcosa nel profondo della sua esistenza. La Fede è speranza. L'uomo che abbandona questa speranza non è un uomo, è un disperato" [A. Zichichi] |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
L'operazione di compattazione non sovrascrive il database originale, ma lo copia in un nuovo file. Ecco perchè servono due stringhe!
L'operazione di crittografia impedisce la lettura dei dati da un editor di testo (come riporta la guida di Access), mentre risulta sempre leggibile da Access e ADO/DAO. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 352
|
Quote:
Si può eseguire la procedura, sovrascrivendo il vecchi file? 2)Con un editor di testo?? Che si può fare?
__________________
"L'uomo che ha Fede è fortunato. Chi non ha Fede è una persona cui manca qualcosa nel profondo della sua esistenza. La Fede è speranza. L'uomo che abbandona questa speranza non è un uomo, è un disperato" [A. Zichichi] |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Io di solito faccio così:
[list=1][*]eseguo la compattazione di ARCHIVIO.MDB sul file ARCHIVIO.TMP[*]se tutto è andato bene, rinomino ARCHIVIO.MDB in ARCHIVIO.001[*]rinomino ARCHIVIO.TMP in ARCHIVIO.MDB[/list=1] Riguardo al discorso dell'editor di testo... diciamo che è un discorso di sicurezza. Se imposti una password per accedere ad un archivio, per un utente sprovvisto di password sarà impossibile aprirlo con Access o con ADO/DAO. Se però uno tenta lo stesso di carpire le informazioni contenute nell'archivio, riuscirà a leggere i testi contenuti con un editor di testo o meglio con visualizzatore binario... a meno che l'archivio non sia stato criptato! |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 352
|
Quote:
...però, se non ci si aiuta tra di noi.. Mi piacerebbe capire il meccanismo di compattazione; mi puoi aiutare? (non è da molto che utilizzo VB)
__________________
"L'uomo che ha Fede è fortunato. Chi non ha Fede è una persona cui manca qualcosa nel profondo della sua esistenza. La Fede è speranza. L'uomo che abbandona questa speranza non è un uomo, è un disperato" [A. Zichichi] |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Quote:
La compattazione serve per recuperare lo spazio perso quando per esempio cancelli un record. Per motivi di performances, Jet non recupera quello spazio, in quanto tale operazione richiederebbe uno spostamento a volte ingente di dati. Sempre per motivi di performances, viene creato in coda ad ogni tabella uno spazio vuoto maggiore di quello necessario per inserire un record. Questo blocco di byte verrà via via riempito di record, poi quando questo sarà pieno verrà creato un nuovo blocco e via dicendo. Anche in questo caso, l'operazione di inserimento di un nuovo blocco comporta rallentamenti generali al database, ma tale operazione viene eseguita una volta "ogni tanto" e quindi generalmente l'archivio continua ad essere veloce. Compattando l'archivio (in realtà, con le ultime versioni del Jet, le operazioni CompactDatabase e RepairDatabase sono la stessa cosa) si va a recuperare tutto lo spazio inutile nelle varie tabelle. Naturalmente, appena si andrà ad aggiungere un nuovo record, Jet inserirà di nuovo un blocco in coda alla tabella, vanificando in parte la compattazione appena svolta. |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 352
|
Quote:
HMMMM! Mi potresti scrivere la sintassi completa di questi due comandi? (CompactDatabase e RepairDatabase) Quale dei due mi consigli di utilizzare? Che dici, mi conviene inserire nel mio programmino un pulsante che consenta di compattare il database? Ah, ritornando al discorso del "Criptaggio", come faccio a leggere i dati una volta criptato il database? La stringa di connessione cambia, vero?
__________________
"L'uomo che ha Fede è fortunato. Chi non ha Fede è una persona cui manca qualcosa nel profondo della sua esistenza. La Fede è speranza. L'uomo che abbandona questa speranza non è un uomo, è un disperato" [A. Zichichi] |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 352
|
per TAS
All'indirizzo seguente dell'MSDN ho trovato questo codice per riparare un database:
http://msdn.microsoft.com/library/de...rdatabasex.asp Codice:
Sub RepairDatabaseX()
Dim errLoop As Error
If MsgBox("Repair the Northwind database?", _
vbYesNo) = vbYes Then
On Error GoTo Err_Repair
DBEngine.RepairDatabase "Northwind.mdb"
On Error GoTo 0
MsgBox "End of repair procedure!"
End If
Exit Sub
Err_Repair:
For Each errLoop In DBEngine.Errors
MsgBox "Repair unsuccessful!" & vbCr & _
"Error number: " & errLoop.Number & _
vbCr & errLoop.Description
Next errLoop
End Sub
Basta modificare il nome del database?
__________________
"L'uomo che ha Fede è fortunato. Chi non ha Fede è una persona cui manca qualcosa nel profondo della sua esistenza. La Fede è speranza. L'uomo che abbandona questa speranza non è un uomo, è un disperato" [A. Zichichi] |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Re: per TAS
Quote:
Codice:
jetEngine.CompactDatabase strSourceConnect, strDestConnect ciao |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 352
|
Re: Re: per TAS
Quote:
Ma, scusame se te lo ripeto, come faccio a fare un backup del database e rinominare quello vecchio?
__________________
"L'uomo che ha Fede è fortunato. Chi non ha Fede è una persona cui manca qualcosa nel profondo della sua esistenza. La Fede è speranza. L'uomo che abbandona questa speranza non è un uomo, è un disperato" [A. Zichichi] |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Ecco i comandi dei quali hai bisogno:
Codice:
FileCopy source, destination Name oldpathname As newpathname Kill pathname
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 352
|
Quote:
Vediamo un pò: 1)"source" e "destination" sono percorsi (senza il nome del file) 2)"oldpathname" e "newpathname" sono percorsi (con il nome del file) 3)"pathname" percorso con nome del file Giusto?
__________________
"L'uomo che ha Fede è fortunato. Chi non ha Fede è una persona cui manca qualcosa nel profondo della sua esistenza. La Fede è speranza. L'uomo che abbandona questa speranza non è un uomo, è un disperato" [A. Zichichi] |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Mar 2001
Messaggi: 352
|
Grazie tas!
Quanta pazienza che hai.
__________________
"L'uomo che ha Fede è fortunato. Chi non ha Fede è una persona cui manca qualcosa nel profondo della sua esistenza. La Fede è speranza. L'uomo che abbandona questa speranza non è un uomo, è un disperato" [A. Zichichi] |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:13.



















