Newsgroup: it.comp.appl.access
Titolo: Problema con TransferText

Ciao a tutti,
Il problema che ho è il seguente:
Devo importare in automatico varii file di testo mensilmente che prima
devono venire opportunamente "ripuliti" da dati quali intestazioni, totali
etc.
Successivamente importo il tutto con TransferText con relative specifiche di
importazione.
Tutto funziona bene fino a quando altri non mettono mano al db e talvota
importano il file di testo senza ripulirlo prima, con la conseguenza di
crearmi tabelle di errore inutili.
I dati ovviamente faccio in modo che non vengano salvati se tutti i record
non sono a posto ma non sono riuscito in alcun modo ad evitare o a fare in
modo che si cancellino IN AUTOMATICO le tabelle errore di importazione
create da access.
Non potendo evitare che altri mettano le mani sul db come posso fare per
risolvere il problema?
Grazie a tutti
--------------------------------
Inviato via 
http://usenet.libero.it

 ha scritto nel messaggio
news:217Z133Z225Z206Y...@usenet.libero.it...

Una strada:
una query del genere evidenzia il nome di tutte le tabelle che iniziano per
"ERRO":
SELECT MSysObjects.Type, MSysObjects.Name
FROM MSysObjects
WHERE (((MSysObjects.Type)=1) AND ((MSysObjects.Name) Like "Erro*"));
Il risultato può essere facilmente valutato e se è presente il nome di una
tabella tipo "Errori di Incollamento" o "Errori di Importazione",
si potrà utilizzare questo nome per cancellare la tabella.
MSysObjects è una tabella nascosta e di sistema che può essere visulizzata
dal menù strumenti, opzioni, visualizzazione.
Non è necessario visualizzarla, la query funziona lo stesso.
L'unica accortezza è quella di essere sicuro che nessuna tabella che dovrai
usare abbia l'inizio del nome in "Erro".
Un esempio di codice per eliminare una tabella è:
DoCmd.SetWarnings False
DoCmd.DeleteObject acTable, "TuaTabella"
DoCmd.SetWarnings True
Ciao, Carlo

e dunque corretta funzionando comunque ?


 Purtroppo non riesco a far funzionare la query proposta per recuperare il
nome della tabella di errore via codice vb. Qualcuno sa piegarmi come fare
io ho provato nel modo seguente senza risultati, mi da errore manca oggetto.
MioErrore = "SELECT MSysObjects.Name, MSysObjects.Type" & _
    "FROM MSysObjects" & _
    "WHERE" & (((MSysObjects.Name) Like "*_Error*") And ((MSysObjects.Type) =
1))
Aiuto non riesco a venirne fuori.
Grazie


 ha scritto nel messaggio
news:217Z133Z225Z160Y...@usenet.libero.it...

A parte che il segno di underscore (_) è inutile.
Puoi evitare di usare il codice. O meglio crea la query e salvala poi
richiami questa da codice.
Più semplice e veloce.
Per esempio se la quesry salvata che ha l'istruzione sql sopra detta, si
chiama SQTabelleErrori, da codice:
Dim RCS As recordset
Set RCS = Currentdb.OpenRecordset("SQTabelleErrori")
Non ti pare?
Ciao, Carlo

Il 02 Giu 2003, 12:33, "Carlo Costarella"

Si sono convinto che sia meglio come dici tu ma anche così non vuole
funzionarmi.
Mi da Errore di run-time '13' Tipo non corrispondente.
Su un pulsante avvio il codice:
Su click
Dim RCS As recordset
Set RCS = Currentdb.OpenRecordset("qryErrore")
nome campo di testo = RCS 'Per scrivere il nome della tabella su di un campo
nella maschera ma non mi apre neanche la query come dall'errore sopra
indicato.
Aiuto!!! Non riesco a venirne a capo.
Grazie
Ciao, Andrea



Una domanda: se apri la query salvata (non da codice) vedi qualcosa?
Ti ricordo che il criterio 1 che usi nella query, alla colonna Type, è un
numerico. Va scritto 1 e non "1".
Hai provato a visualizzare la query senza alcun criterio?
Aggiungi un criterio alla volta, comincia con l'1, e poi aggiungi il secondo
criterio, magari senza il like: "*Erro*".
Non usare l'underscore (_).
Se ancora non funziona...faccelo sapere.
Ciao, Carlo

 ha scritto:

La query avviata da sola funziona benissimo, restituendomi il nome della
tabella di errore.
Il problema è che non riesco proprio a caricare questo dato ovunque sia
possibile ( una casella di testo) per poi poterlo eliminare.
Grazie ancora



Non hai bisogno di mettere il nome della tabelle in una casella di testo.
Per esempio: dlookup("Name","qryErrore")
restituisce il nome della prima tabella (se ve ne sono) della query.
Ma a te non serve.
Se ho ben capito ti serve eliminare questa o queste tabelle restituite dalla
query.
Giusto? Giusto...
Ti basta creare una funzione o meglio una Sub pubblica in un modulo
pubblico:
Public Sub EliminaTblErrori()
Dim RCS As Recordset, i As Byte
Set RCS = CurrentDb.OpenRecordset("qryErrore")
RCS.MoveLast
RCS.MoveFirst
If Nz(RCS.RecordCount, 0) = 0 Then
MsgBox "Nessuna Tabella da eliminare"
Exit Sub
End If
For i = 1 To RCS.RecordCount
DoCmd.SetWarnings False
DoCmd.DeleteObject acTable, RCS![tbl]
DoCmd.SetWarnings True
RCS.MoveNext
Next i
RCS.Close
Set RCS = Nothing
End Sub
Ora puoi richiamare la Sub da qualsiasi maschera o pulsante cosě:
EliminaTblErrori()
Le tabelle da eliminare devono essere chiuse.
Ti assicuro che funziona. Un'ultima domanda. Che versione di Access usi? Se
usi la 2000 o superiori ti ricordo di mettere il riferimento a DAO e, se non
ti serve, togliere il riferimento ad ADO.
Ciao, Carlo

Il 03 Giu 2003, 08:40, "Carlo Costarella"

Mille grazie Funziona perfettamente.
Comunque utilizzo Access 2000.
Ciao e grazie ancora, Andrea
