Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    76

    Compatta e ripristina db Access con Asp

    Ciao amici,

    secondo voi è possibile eseguire attraverso Asp un "Compatta e ripristina db" su un database Access? E se si mi date una dritta su come eseguire questo comando?

    Mi spiego meglio: apro il mio bravo db con Access, poi scelgo Strumenti -> Utilità database -> Compatta e ripristina database...

    Mi servirebbe di eseguire questo comando non utilizzando Access ma Asp.

    Grazie in anticipo a tutti e buon lavoro.
    .,.-*'``'* Andrus *'``'*-.,.

  2. #2
    Modificati un po' questo

    codice:
    <%
    response.buffer=true
    oggi = replace(trim(cstr(date)), "/", "-")
    ora = replace(trim(cstr(time)), ".", "-")
    If request.cookies("MFMComputerPoint_accesso")("valido") <> "ok" then
    	'l'utente non è amministratore
    	response.redirect "Esito.asp?Operazione=Login&Pagina=Index&Esito=Fallita"
    end if
    %>
    
    <% 
    response.flush
    KKPercorso = "/mdb-database/"
    KKMotore = "DAO.DBEngine.36"
    KKArrayDB = array("1126060819801971")%>
    <h2 class="MyTitle">Compressione Database</h2>
    <font class="medio">
    Questa funzione permette di compattare i database dell'applicazione direttamente online senza compromettere le funzionalià del sito
    
    Contemporaneamente CREA UNA COPIA DI BACKUP del database stesso!
    
    </font>
    <font class="medio">
    A seguito dell'eliminazione di dati o di oggetti da un database di Access oppure di oggetti da un progetto di Access, è possibile che il file si frammenti utilizzando lo spazio su disco in modo inefficiente. Eseguendo la compattazione di un file di Access si crea una copia del file e si riorganizza lo spazio di memorizzazione sul disco.
    
    La compattazione comporta un miglioramento delle prestazioni, e non influenza in alcun modo il processo di numerazione automatica, tuttavia, se sono stati eliminati dei record dalla parte finale di una tabella di un database di Access contenente un campo Contatore, compattando il database si reimposta il valore Contatore e il valore Contatore del record successivo sarà maggiore di uno rispetto al valore Contatore dell'ultimo record non eliminato della tabella.
    
    
    
    </font>
    <%for i = lbound(KKArrayDB) to ubound(KKArrayDB)
    	'comprimo il database 
    	response.write "<hr><p class='small'>Compressione Database "& KKArrayDB(i) &".mdb in corso..."
    	Set miodb = CreateObject(KKMotore) 
    	miodb.CompactDatabase server.MapPath(KKPercorso & KKArrayDB(i) &".mdb"), server.MapPath(KKPercorso & KKArrayDB(i) & "_new.mdb") 
    	response.write "<p class='small'>Database "& KKArrayDB(i) &".mdb compresso con successo</p>"
    	Set miodb=Nothing 
    	' backuppo il db
    	Dim obJfso, objFile
    	response.write "<p class='small'>Creo copia di backup ( "& KKArrayDB(i) &"_BK_" & oggi & "_" & ora &".mdb ) in corso..."
    	Set objFso=Server.CreateObject("scripting.filesystemobject")
    	Set objFile=objFso.GetFile(server.MapPath(KKPercorso & KKArrayDB(i) &".mdb"))
    	objFSO.MoveFile server.MapPath(KKPercorso & KKArrayDB(i) &".mdb"), server.MapPath(KKPercorso & KKArrayDB(i) &"_BK_" & oggi & "_" & ora & ".mdb") 
    	response.write "<p class='small'>Copia di backup creata!</p>"
    	Set objFSO = Nothing
    	Set objFile = Nothing
    	' rinomino il database 
    	response.write "<p class='small'>Ridenominazione del database " & KKArrayDB(i) &".mdb in corso...."
    	Dim myobjFSO 
    	Set myobjFSO = CreateObject("Scripting.FileSystemObject") 
    	myobjFSO.MoveFile server.MapPath(KKPercorso & KKArrayDB(i) &"_new.mdb"), server.MapPath(KKPercorso & KKArrayDB(i) &".mdb") 
    	response.write "<p class='small'>Database "& KKArrayDB(i) &".mdb rinominato con succcesso
    
    "
    	Set myobjFSO = Nothing
    next%>
    <table width="100%" border="0" cellspacing="1" cellpadding="1" align="center">
    <tr> 
    <td width="100%" height="18" class="cell">Tutti i database sono stati compressi correttamente!</td>
    </td>
    </tr>
    </table>

  3. #3
    Utente di HTML.it L'avatar di Luis33
    Registrato dal
    May 2003
    Messaggi
    975
    questa è una utility già pronta da usare...

    http://www.italiaweb.org/contaclik/count.asp?id=11

    compatta e ripristina il dbase direttamente sul server...
    ... Sono graditi codes, esempi pratici, suggerimenti, consigli e critiche...
    "Ai posteri l'ardua sentenza..."
    Tante grazie
    Saluti
    Luis 33

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    76
    Grazie mille per l'aiuto, prezioso come sempre. Alla prossima.
    .,.-*'``'* Andrus *'``'*-.,.

  5. #5
    Scusate se uppo questa discussione.

    Volevo solo chiedere se è possibile evitare la race condition del codice di Corinna. Tale codice fa:

    1-Crea una copia compattata "B" del database "A"
    2-Rinomina "A" in "A-Data-Ora"
    3-Rinomina "B" in "A"

    Il fatto è che se un utente si collega tra la fase 2 e la fase 3 il sito andrà probabilmente in errore perché non trova "A".
    Quello che in sostanza mi chiedo: è un errore possibile? Se si', come evitarlo? E se la richiesta di accesso avviene durante la fase 1 (che è abbastanza lunga)?

    thk.

  6. #6
    Utente bannato
    Registrato dal
    Nov 2004
    Messaggi
    241
    Interessante!
    pensavo si potesse fare solo con mysql

  7. #7
    Originariamente inviato da Ohmnibus
    Scusate se uppo questa discussione.

    Volevo solo chiedere se è possibile evitare la race condition del codice di Corinna. Tale codice fa:

    1-Crea una copia compattata "B" del database "A"
    2-Rinomina "A" in "A-Data-Ora"
    3-Rinomina "B" in "A"

    Il fatto è che se un utente si collega tra la fase 2 e la fase 3 il sito andrà probabilmente in errore perché non trova "A".
    Quello che in sostanza mi chiedo: è un errore possibile? Se si', come evitarlo? E se la richiesta di accesso avviene durante la fase 1 (che è abbastanza lunga)?

    thk.
    NO, non si può.
    Se noti anche Access quando compatta compatta il database A con B e poi sostituisce B ad A poichè di fatto la compattazione è una riscrittura del database per la rimozione dello spazio in eccesso.

  8. #8
    Ho provato questo link ma non esiste?

    http://www.italiaweb.org/contaclik/count.asp?id=11

    Mi date una dritta dove trovare uno script per compattare DB Access da remoto?

    Grazie

  9. #9

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    3

    Ecco il codice funzionante

    Copiare tutto in una pagina ASP vuota, e nominare il file con compatta.asp oppure dare un'altro nome ma modificare la pagina per il post nella proprietà del form. E' tutto, inoltre, è dinamico, cioé potete digitare direttamente il percorso relativo del Db nella textbox prima di avviare la compattazione (e ripristino), e c'è anche il controllo se si tratta di Access 97 o 2000. Che volete di più?
    Mi spiace che il reply non sia stato immediato, ma se a qualcun altro dovesse servire.. a me fa piacere quando le storie hanno un lieto fine, così realizziamo un archivio utilizzabile da tutti (giusto?).
    <%
    'option explicit
    Const JET_3X = 4

    Function CompactDB(dbPath, boolIs97)
    Dim fso, Engine, strDBPath
    strDBPath = left(dbPath,instrrev(DBPath,"\"))
    Set fso = CreateObject("Scripting.FileSystemObject")

    If fso.FileExists(dbPath) Then
    Set Engine = CreateObject("JRO.JetEngine")

    If boolIs97 = "True" Then
    Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath, _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb;" _
    & "Jet OLEDB:Engine Type=" & JET_3X
    Else
    Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath, _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb"
    End If
    fso.CopyFile strDBPath & "temp.mdb",dbpath
    fso.DeleteFile(strDBPath & "temp.mdb")
    Set fso = nothing
    Set Engine = nothing
    CompactDB = "Your database, " & dbpath & ", has been Compacted" & vbCrLf
    Else
    CompactDB = "The database name or path has not been found. Try Again" & vbCrLf
    End If

    End Function
    %>
    <html><head><title>Compact Database</title></head><body>

    <h2 align="center"> Compatta e ripristia il Database</h2>
    <p align="center">
    <form action=compatta.asp>
    Enter relative path to the database, including database name.


    <input type="text" name="dbpath">


    <input type="checkbox" name="boolIs97" value="True"> Check if Access 97 database

    (default is Access 2000)


    <input type="submit">
    <form>



    <%
    Dim dbpath,boolIs97
    dbpath = request("dbpath")
    boolIs97 = request("boolIs97")

    If dbpath <> "" Then
    dbpath = server.mappath(dbpath)
    response.write(CompactDB(dbpath,boolIs97))
    End If
    %>
    </p></body></html>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.