Newsgroup: it.comp.appl.access
Titolo: Scusate se rompo! - messaggio lungo ma - per favore- leggetelo

Si scusate se rompo, ma questo NG mi sembra sempre più la migliore scuola da
frequentare e con i consigli preziosi sin qui fornitimi ho sicuramente
cominciato a stupire i colleghi di ufficio con "effetti speciali".
Adesso però vorrei fare il "salto nel vuoto" ma non vorrei farmi male. Ergo
urge il prezioso aiuto dell'NG.
Il mio problema è questo:
Con cadenza mensile mi viene rimesso un archivio sotto forma di file di
testo. Questo archivio deve essere importasto in una tabella di access che
va preventivamente svuotata. Dopo l'importazione vanno eseguiti alcuni
aggiornamenti; quindi devono essere create due nuove tabelle con dati
rivenienti dalla prima - queste due tabelle devono anche essere esportate in
un dbase esterno. Quindi devono essere eliminati dalla prima tabella (quella
ottenuta dall'importazione del file di testo) alcuni record secondo un certo
criterio.
Fino a questo punto ho operato in questo modo:
1) con una query di eliminazione provvedo a svuotare la tabella inziale (che
si chiama backup1)della quale, in tal modo conservo la struttura.
Ho creato una maschera menù dove un controllo - su click - fa eseguire la
query di eliminazione di cui sopra.
2) quanto all'importazione dl file txt questa avviene mediante una macro,
attivata da altro controllo nella maschera menu', che esegue la funzione
transfertext.
3) per l'aggiornamento della tabella backup1 ci sono 4 query di
aggiornamento che vengono attivate in sequenza da altra macro associata a
controllo sulla maschera menù
4)due query di creazione tabella (attivate dal solito controllo della
amschera menù) provvedono a creare le tabelle tab1 e tab2
5) una query di eliminazione consente di eliminare i record secondo la
condizione prescelta dalla tabella backup1.
Tale realizzazione - che già rappresenta la scoperta della luna nell'ambito
del mio ufficio - non mi soddisfa più. In particolare:
1a) vorrei che lo svuotamento della tabella backup1 (necessario
preliminarmente all'importazione del fil txt) avvenisse da codice: ma da
dove si comincia? ho pensato di creare in un modulo una routine public sub
cancellax() il cui codice potrebbe essere:
public sub cancellax()
dim archivio as database
dim cancella as querydef        (cancella è la query di eliminazione che ho
creato)
e poi..............
Una volta realizzato questo modulo (che potrei salvare come "cancella") un
controllo nella maschera menu' dovrebbe attivarlo. Come? indicando su
lick  - evento - Call cancella    ?
2a) per l'importazione del file di testo la routine evento da assegnare su
click al controllo nella maschera menù è
docmd.transfertext acimportfixed, "posizioni", "backup1", "k:\file.txt"
è sufficiente?
Faccio presente che si tratta di importare circa 300.000 record e che il
file txt ha una dimensione di ca 39Mb. Attualmente con la mia macro, impiego
circa 3/5 min. per l'importazione. Con il codice andrei a risparmiare tempo?
3a) per l'aggiornamento della tabella backup1 le quattro query di
aggiornamento al momento configurate impiegano circa 1 ora (se tutto va
bene) per completare la loro esecuzione. In realtà queste query non fanno
altro che aggiornare alcuni campi della tabella backup valorizzandoli con
valori desunti dalla stessa tabella (tipo importo/1000). Questo nonostante
si tratti, dunque, di operazioni elementari ed il dbase sia stato
preventivamente indicizzato.
La realizzazione di un eventuale codice renderebbe più veloce il
procedimento?
Posto che nella tabella ci sia un campo importo ed un altro campo importo2
allo stato la query aggiorna importo2 a importo/1000.
4a) le query di creazione tabelle tab1 e tab2 allo stato mi rendono
necessario ogni mese intervenire sulla struttura della query per modificare
il nome delle tabelle da creare (che ogni mese va modificato in
mesecorrenteanno). E' possibile imporre ad access di chiedere con un input
box quale deve essere il nome da assegnare alla tabella che sta per creare,
evitandomi così di dovere tutte le volte intervenire sulla struttura della
tabella?
5a) come si fa ad impostare da codice l'esportazione delle tabelle tab 1 e
tab 2 così create in un altro dbase?
6a) per finire come si imposta il codice per l'eliminazione di alcuni record
dalla tabella backup1 che rispondano a certi criteri?
Per concludere preciso che uso access 97 su win95.
Chiedo scusa se sono stato prolisso e ringrazio anticipatamente tutti coloro
che potranno aiutarmi.
In particolare, mi piacerebbe anche conoscere, se possibile, da dove
apprendere come formalizzare un modulo, nel senso di dichiarazioni di
variabili ecc. Se ci sono link ad articoli che possono essere consultati in
rete per comprendere meglio da dove partire per cominciare a programmare
sotto access mi piacerebbe conoscerli.
Ancora grazie.
Antonio.

Ciao Antonio,
scusami ma posso rispondere per adesso solo alla prima domanda dato che sono
in ultra ritardo ad un appuntamento.
Ti invio una funzione che da circa tre anni utilizzo per cancellare i record
di una tabella, dato che ancora noto in Access97 (col quale lavoro) un
fastidiosissimo inconveniente relativo all'"insensibilità" verso la set
warnings.
La funzione è veloce e semplice; deve essere una function perché, se guardi
l'help, vedrai che dagli eventi si possono evocare soltanto function. Nella
scheda, sull'evento on clic, scriverai quindi:
=ZapTabella("NomeDellaTabellaDaResettare")
Se vuoi far precedere il reset da un messaggio di avvertimento, dovrai
leggermente modificare la function.
Function ZapTabella(NomeTabella as variant ) As Integer
    On Error Resume Next
    Dim dbc As Database
    Dim dsTabella As Recordset
    Set dbc = CurrentDb()
    Set dsTabella = dbc.OpenRecordset(NomeTabella)
    Do Until dsTabella.EOF
        dsTabella.Delete
        dsTabella.MoveNext
    Loop
    dsTabella.Close
    Set dbc = Nothing
    On Error GoTo 0
    ZapTabella = True
End Function
Spero di esserti stato di aiuto.
Ciao e buon lavoro
Antonio Misericordia
P.S.: Ho usato il prefisso Zap perché sono un nostalgico del Clipper...
-- 
Posted from 
smtp2.libero.it
 [193.70.192.52] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 sotto access mi piacerebbe conoscerli.
HELP ON LINE (F1)
E tanto tempo da perdere leggendo l'help, gli esempi e facendo prove!!!
antonio