Newsgroup: it.comp.appl.access
Titolo: esportare un record

Ho la necessita' di esportare in un file di testo i dati di un record
selezionato tramite un filtro.
Ho provato con trasferisci testo... esporta delimitato ma mi trasferisce
tutti i record del database e non solo quello estratto dal filtro.
Qualcuno sa' come fare?
Grazie in anticipo a chi rispondera'

 ha scritto nel messaggio
news:vd%yb.37442$AX1.1...@news1.tin.it...

Una query di selezione filtrata ed esporti quella...
Ciao.
--
Sergio MAZZA

Massimo ha scritto:

Se è una cosa da fare una-tantum basta anche un copia-incolla, ti esporta 
il/i record selezionato/i, delimitati da tabulazioni.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

> Una query di selezione filtrata ed esporti quella...
Devo poter scegliere un record del database e inviarlo come file di testo
nella directory del programma di controllo di una stampante, quindi devo
poter prima filtrare i dati secondo alcuni campi e poi inviare il risultato
come .txt.
Chiedevo se e' possibile utilizzare qualche comando che alla pressione di un
bottone in una tabella mi invii il file.
Ciao Massimo


purtroppo non e' una tantum e quindi niiente copia e incolla, e cmq i dati
mi servono separati da punto e virgola.
Ciao Massimo


La scelta da cosa scaturisce? Se ci spieghi quali sono i criteri si fa in 4
e 4 = 8 (spero)...
Ciao.
--
Sergio MAZZA

Devo poter scegliere almeno su due campi per poter avere l'univocita' del
record perche', solo con una scelta, potrei avere dei record simili e invece
devo poter estrarre un solo record da inviare alla stampante.
In poche parole, il database contiene 11 campi: cliente, tipo, codice,
lotto, tensione, frequenza, data (che deve essere aggiornato alla data del
giorno) e altri.
La scelta avviene sui campi cliente, tensione e magari anche frequenza da
qui estratto il record che mi interessa devo, con una macro o altro,
estrarlo e inviarlo in formato txt nella directory della stampante come:
"cliente"; "tipo"; "tensione"; "frequenza";..... etc.
Non riesco a trovare un comando che mi faccia il trasferimento solo del
record selezionato ma, fino ad ora, riesco a trasferire tutti i record del
db.
grazie per l'interessamento e ciao, Massimo

 ha scritto nel messaggio
news:rSfzb.41568$AX1.1...@news1.tin.it...

Massimo, lascia tutto o parte del messaggio al quale rispondi, altrimenti
non si capisce nulla.
Non trovi il comando perché non esiste "un comando" ma esistono delle
istruzioni che combinate insieme ti formano una procedura.
Innanzitutto non dai certezza sul numero dei campi da utilizzare per
selezionare il record, quindi devi per forza costruirti una stringa SQL
(vedi help 'SQL') dinamica; ergo scordati le macro.
Avrai sicuramente creato una form/maschera dove hai posizionato le caselle
di testo da utilizzare per filtrare il record ed esportarlo.
Quindi nell'evento "su clic" di un bottone (chiamato) [FiltraEdEsporta]
scrivi:
Dim strSQL as string
strSQL = ""
If not isnull(me!cliente) then
    strSQL = "[Cliente] = " & chr(34) & me!cliente & chr(34)
end if
if not isnull(me!tipo) then
    if strSQL = "" then
        strSQL = "[tipo]=" & me!tipo
    elseif strSQL <> "" then
        strSQL = strSQL & " And [tipo]=" & me!tipo
    end if
end if
if not isnull(me!tensione) then
    if strSQL = "" then
        strSQL = "[tensione]=" & me!tensione
    elseif strSQL <> "" then
        strSQL = strSQL & " And [tensione]=" & me!tipo
    enf if
end if
'... e così via per altri campi che vuoi utilizzare da filtro
if strSQL <> "" then
    DoCmd.RunSQL "SELECT nomeTabella.* INTO exportTXT FROM nometabella WHERE
" & strSQL & ";"
    Docmd.tranfertext acExportDelim, ,"exportTXT", "fileExportTXT"
end if
Praticamente, ogni if controlla se le caselle di testo sono piene, se sì,
viene controllato se la stringa strSQL (che conterrà l'istruzione SQL Where
(vedi help)) è piena quindi viene costruito il filtro.
L'ultimo if ri-verifica se strSQL è piena (quindi non hai premuto
accidentalmente il bottone), esegue (metodo RunSQL (vedi help)) una query di
creazione tabella (vedi help) con la condizione Where costruita da te,
generando la tabella 'exportTXT'. Questa tabella viene esportata con il
metodo 'tranfertext' (vedi help) nel file 'fileExportTXT' in formato
delimitato (acExportDelim).
Ciao.
--
Sergio MAZZA

con la condizione Where costruita da te,
quale condizione Were?
Perche' durante l'esecuzione della routine mi chiede di inserire dati anche
se la tabella ha tutti i campi pieni?
Perche' alla fine della routine mi dice: "impossibile aggiornare. Database o
oggetto di sola lettura" ?
ciao e scusa se continuo a rompere ma access proprio non lo conosco....
Massimo

 Massimo
Ciao.
--
Sergio MAZZA

 tue esigenze? Sěě? E lo puoi re-inviare che magari gli si da un'occhiata?
non e' un'errore e' proprio una richiesta di immisione parametri.
Ci ho messo piu' di mezz'ora a capire che nel tuo esempio c'era un a capo
che non ci voleva e 10 min buoni per capire che DoCmd.TransferText aveva una
"esse" in meno.......  per adattare tutto alle mie esigenze mi ci vuole un
pochetto....  :-)))
ciao e ancora grazie della pazienza dimostrata.
Massimo

 ciao e ancora grazie della pazienza dimostrata.
Scusa tu per la "s" di meno...


 E' un casino con gli a capo nei messaggi.
Pero' e' propio cosi che uno si deve impegnare a capire il codice....  :-))
Oggi, altri lavori permettendo, mi rimetto a rileggere e a ristudiare il
tutto poi ti faccio sapere.
Ciao e buona giornata.
Massimo

 Ciao e buona giornata.
Anche a te.


Buongiorno.
Sono sempre incasinato con l'esportazione.
la riga di codice
DoCmd.RunSQL "SELECT tabella1.* INTO exportTXT FROM tabella1 WHERE" & strSQL
& ";"
continua a generare un ......... errore di sintassi (operatore mancante)
nell'espressione della query '[cliente]= nomecliente"[tipo]=
tipo"[tensione]= tens'
che cavolo posso fare?
Premettendo che se levo dalla riga... WHERE " & strSQL & ";" .....funziona
ma mi esporta ancora tutta la tabella qual'e' l'esatta sintassi del comando
where?
Ciao Massimo


Se č cosě come l'hai scritta manca l'And a separare le due condizioni e lo
spazio dopo la parola WHERE.
"...FROM tabella1 WHERE " & strSQL non "..FROM tabella1 WHERE" & strSQL
e nel blocco if controlla se hai scritto bene la riga:
       strSQL = strSQL & " And [tipo]=" & me!tipo
la sintassi di where? Select nomeCampo From nomeTabella WHERE nomeCampo =
valore [and nomeCampo = valore]
E' moooolto semplificata e maggiori dettagli li trovi in un buon manuale
SQL; anche su internet ne trovi a bizzeffe, se non riesci con l'help in
linea...
Ciao.
--
Sergio MAZZA

ok la routine l'ho scritta nel modo seguente:
Dim strSQL As String
strSQL = ""
If Not IsNull(Me!Cliente) Then
    strSQL = "[Cliente]=" & Me!Cliente & Chr34
    End If
If Not IsNull(Me!Tipo) Then
    If strSQL = "" Then
        strSQL = Me!Tipo
    ElseIf strSQL <> "" Then
        strSQL = strSQL & " And [Tipo]=" & Me!Tipo
    End If
End If
If Not IsNull(Me!Tensione) Then
    If strSQL = "" Then
        strSQL = Me!Tensione
    ElseIf strSQL <> "" Then
        strSQL = strSQL & " And [Tensione]=" & Me!Tensione
    End If
End If
If strSQL <> "" Then
    DoCmd.RunSQL "SELECT tabella1.* INTO exportTXT FROM tabella1 WHERE " &
strSQL
    DoCmd.TransferText acExportDelim, , "exportTXT", "c:\fileExport.TXT"
End If
E l'errore continua a ripresentarsi..... sempre il solito..... orca l'oca mi
sa' che ormai ci riprovo martedi, a meno che non mi venga qualche
folgorazione prima delle 17.00
Ciao Massimo

 ha scritto nel messaggio
news:bQ%zb.52196$AX1.2...@news1.tin.it...

Ma scusa, qui manca il confronto tra il campo di tabella e il valore:
strSQL = Me!Tipo
dovrebbe essere
strSQL = "[tipo]=" & Me!Tipo
idem per gli altri...
Come ti avevo scritto io:
       strSQL = "[tipo]=" & me!tipo
Ciao e ricontrolla i miei messaggi... Sennò altro che folgorazione!
--
Sergio MAZZA

 Ciao e ricontrolla i miei messaggi... Sennò altro che folgorazione!
Non funziona neanche cosi', a parte che la prima riga di if la salta sempre
perche' il valore non e' nullo e va solo su elseif dove era specificato
strSQL = "[tipo]=" & me!tipo
Continua a darmi l'errore di sintassi.
ciao Massimo

 ciao Massimo
Scusa ma [tipo] e [tensione] sono numerici o alfanumerici (testo)?
Se numerici e condizioni dovrebbero essere:
'-----------
if not isnull(me!tipo) then
    if strSQL = "" then
        strSQL = "[tipo]=" & me!tipo
    elseif strSQL <> "" then
        strSQL = strSQL & " And [tipo]=" & me!tipo
    end if
end if
if not isnull(me!tensione) then
    if strSQL = "" then
        strSQL = "[tensione]=" & me!tensione
    elseif strSQL <> "" then
        strSQL = strSQL & " And [tensione]=" & me!tipo
    enf if
end if
'--------------
se alfanumerici:
'--------------
if not isnull(me!tipo) then
    if strSQL = "" then
        strSQL = "[tipo]=" & chr(34) & me!tipo & chr(34)
    elseif strSQL <> "" then
        strSQL = strSQL & " And [tipo]=" & chr(34) & me!tipo & chr(34)
    end if
end if
if not isnull(me!tensione) then
    if strSQL = "" then
        strSQL = "[tensione]=" & chr(34) & me!tensione & chr(34)
    elseif strSQL <> "" then
        strSQL = strSQL & " And [tensione]=" & chr(34) & me!tensione &
chr(34)
    enf if
end if
'---------------
cioč con l'aggiunta delle doppie virgolette (codice ascii chr(34)).
Se non va anche questo, prova a cambiare nome alla casella di testo "tipo";
forse access lo scambia per la traduzione dell'istruzione type.
Ciao.
--
Sergio MAZZA

 se alfanumerici:
E VAIIII!!!!! azzarola era solo questione di virgolette.....
Ora esporta tutto e "quasi" bene, dico quasi perche' il campo data me lo
esporta anche con l'ora, cioe' il formato non e' solo GG/MM/AAAA  ma e
GG/MM/AAAA H.MM.SS.
Qualche dritta per eliminare H.MM.SS ?
Cmq un mega rigraziamento a te e alla tua pazienza.... ciao Massimo

 Qualche dritta per eliminare H.MM.SS ?
Cambia il tipo di formato del campo, magari in "data in cifre", e se hai
impostato come valore di default l'utilizzo della funzione Now() cambiala
con la Date()...
Ciao.
--
Sergio MAZZA


 con la Date()...
il formato che ho utilizzato, copiato chissa' dove,  nel campo "valore
predefinito" della tabella e':
=Format(Date();"Data in cifre")
ma cosi' mi inserisce la data di creazione del record e non me lo aggiorna
alla data del clock del PC tutte le volte che richiamo il record.
c'e' un sistema per aggiornare la data in un campo alla data odierna tutte
le volte che si filtra il campo?
ciao Massimo

 ciao Massimo
Dai Massimo, spiega meglio che vuoi fare altrimenti ci passiamo il natale...
Ciao.
--
Sergio MAZZA

 Dai Massimo, spiega meglio che vuoi fare altrimenti ci passiamo il
natale...
be' con queste discussioni, visto che la cosa mi interessa, io tirerei anche
fino a Pasqua

 fino a Pasqua
Gasp!
Ciao.
--
Sergio MAZZA

 Gasp!
Tranquillo non ti tengo occupato fino a Pasqua... :-))))
ciao Massimo

 ciao Massimo
Ripeto; spiega passo per passo cosa devi fare utilizzando nomi delle tabelle
e campi, indicando anche cosa dovrebbe scatenare l'eventuale aggiornamento
del/dei campo/i...
Ciao.
--
Sergio MAZZA


Buon Lunedi......
cerchero' di spiegarmi... mi serve che la data del campo "data" sia sempre
aggiornata alla data del giorno, in pratica, non e' importante se avvenga
all'apertura del db o al momento dell'applicazione del filtro di selezione,
il campo data mi deve riportare sempre la data aggiornata.
Con la funzione date() nel campo data della maschera mi visualizza la data
aggiornata ma al momento dell'esportazione, che mi esporta i dati della
tabella1 nella exportTXT la data rimane quella della creazione del campo.
come fare per aggiornare non solo le date della maschera ma anche quelle
della tabella?
ciao Massimo


Ohooooo! Adesso (spero) ho capito. Vuoi che i dati esportati riportino la
data del giorno di esportazione.
Allora creati una query di creazione tabella, questa query dovrà contenere
un campo calcolato[dataEsportazione] con impostata la funzione Date.
es.
SELECT tabellaConRecordDaEsportarte.*, Date() AS dataEsportazione INTO
recordEsportati
FROM tabellaConRecordDaEsportarte;
poi con un bottone utilizzi il Metodo TransferText esporti la tabella
creata...
Ciao.
--
Sergio MAZZA

 creata...
Ma non esiste un istruzione che permetta di inserire in un campo un valore?
esempio:
IF (miatabella, nomecampo) <> "data odierna" THEN (miatabella, nomecampo) =
"data odierna"
in pratica si puo' inserire in una routine il nome di un determinato campo?
se si come?
Ciao Massimo

 Ciao Massimo
Se devi aggiornare un valore di un campo di tabella (sulle maschere ci sono
controlli) devi per forza utilizzare il linguaggio SQL o utilizzare i
recordset; ma la sostanza del discorso non cambia: non esiste una
istruzione, come la intendi tu, che aggiorna il valore di un campo di una
tabella.
Ma è solo questo il problema? Puoi costruirtela tu con poche righe di VBA:
Es.
Sub AggiornaCampo(nmCampo as string, nmTabella as string, nuovoValore as
Variant)
if nmCampo <> "" and nmtabella <> "" then
    DoCmd.RunSQL "UPDATE " & nmtabella & " SET " & nmCampo " = " &
nuovoValore &";"
End if
End Sub
Quindi il tuo test sarà:
If CDate(DLookup("nomeCampo","nomeTabella")) <> Date() Then
    AggiornaCampo nomeCampo, nomeTabella, Date()
End If
E' solo un esempio di quello che puoi fare; chiaramente l'esempio è da
provare e perfezionare ma ti fa capire come ottenere dei risultati.
Ciao.
--
Sergio MAZZA

 provare e perfezionare ma ti fa capire come ottenere dei risultati.
Ok diciamo che il piu' e' fatto, mi chiede quello che deve chiedere e mi
esporta quello che voglio, restano due cose:
1- Come evitare che access continui a chiedere la conferma della
sostituzione della tabella vecchia e dell'inserimento di nuove righe?
2- Come esportare la data nel formato GG/MM/AAAA e non GG/MM/AAAA hh.mm.ss ?
la funzione date() mi esporta nel txt  il formato con anche l'ora che a me'
non serve
ciao Massimo

 ciao Massimo
Ciao.
--
Sergio MAZZA

 nuovoCampoData: Format(campoData; "dd/mm/yyyy")
Nel pannello di controllo e' 18/12/2003, nella tabella di esportazione e'
18/12/2003 mentre nel file di testo esportato con DoCmd.TransferText mi
riporta 18/12/2003 0.00.00
Ciao Massimo

 Ciao Massimo
Ho bisogno di rifare il punto della situazione; ora che fai? Esporti una
query o una tabella? Se esporti una query invia il codice sql, se tabella
prova ad impostare il formato del campo data...
Ciao.
--
Sergio MAZZA

 Ho bisogno di rifare il punto della situazione; ora che fai?
Schemino sintetico
1 - Tabella1 dati
2 - Tramite maschera filtro i dati della tabella 1 con il filtro nella barra
di access
3 - Esporto i dati filtrati in una tabella2 (perche' mi serve un solo
record) tramite routine
4 - Esporto la tabella2 come file di testo tramite routine
Sia nella tabella1 che nella tabella2 il campo data e' in formato data e a
schermo mi appare la data 18/12/2003 quando esporto il record  in file la
data viene esportata come 18/12/2003 0.00.00
Sempre grazie e ciao Massimo


Ok; l'unica che mi viene in mente (e che ho provato) è quella di trasformare
il campo data in tabella2 come testo.
I dati in tabella2 li inserisci con una query di accodamento? Non con una
query di creazione tabella, altrimenti siamo di nuovo daccapo.
Ciao.
--
Sergio MAZZA

 query di creazione tabella, altrimenti siamo di nuovo daccapo.
io uso questa routine che d'altronde hai scritto tu... :-)))
    DoCmd.RunSQL "SELECT tabella1.* INTO exportTXT FROM tabella1 WHERE " &
strSQL
    DoCmd.RunSQL "UPDATE exportTXT SET data = Date(), commessa = lotto,
qtatarghette = quante, qtascatola= quantitaxscatola"
    DoCmd.TransferText acExportDelim, , "exportTXT", "c:\fileExport.TXT"
e' di accodamento o di creazione?
ciao Massimo

 ciao Massimo
Dopo che hai creato la tabella exportTXT, rimuovi la riga che la ricrea
(DoCmd.RunSQL "SELECT tabella1.* INTO exportTXT...) e imposta il campo
(cambiagli nome) data di exportTXT a testo.
Ora le istruzioni diventano:
DoCmd.Setwarnings False
'--> svuoto la tabella exportTXT
DoCmd.RunSQL "Delete * From exportTXT;"
'--> riempio la tabella
DoCmd.RunSQL "INSERT INTO exportTXT SELECT tabella1.* FROM tabella1 WHERE "
& strSQL
'--> aggiorno il campo dataExport (formato testo)
DoCmd.RunSQL "UPDATE exportTXT SET dataExport = Date(), commessa = lotto,
qtatarghette = quante, qtascatola= quantitaxscatola"
DoCmd.Setwarnings True
'--> esporto i dati
DoCmd.TransferText acExportDelim, , "exportTXT", "c:\fileExport.TXT"
ho cambiato il nome del campo data in exportTXT, l'ho chiamato dataExport...
Ciao.
--
Sergio MAZZA

Evvvvvaiiiiii..... ora funziona tutto e alla perfezione.
Ancora un stramegaultraiperingraziamento a Sergio e alla sua pazienza e un
augurio di un Sereno Natale e un fantasmagorico 2004 a tutti.
Ciao Massimo

 Ciao Massimo
Ciao.
--
Sergio MAZZA


Sotto tutta questa aplomb inglese, mi sa che è rimasto contento..
MAssimiliano

 MAssimiliano
Dici? Si nota molto eh? ...Ma so' ragazzi dai, so' giovinotti...
Ciao.
--
Sergio MAZZA

Denghiu' per il "giovinotto"...
Cmq era dai tempi del basic e dello spetctrum 48k che non mi attizzavo
cosi... :-))))))
ciao Massimo

 ha scritto nel messaggio
news:OtAEb.13472$wM.9...@news1.tin.it...

Giovinotto mio che triste la tua vita...
;-P
MAssimiliano