Newsgroup: it.comp.appl.access
Titolo: Trasferire tabella via codice

Devo trasferire da una tabella alcuni campi per costruirmi un file di
puro testo (POSTEL.TXT) da inviare poi alle Poste Italiane per la
stampa di indirizzi secondo i formato che riporto sotto.
La stringa @A è un delimitatore che indica l'inizio e la fine di un
indirizzo completo. Ogni riga è una riga del file di testo, quindi
avrà il classico CR che manda a capo. Come ultima riga ci deve essere
la stringa @E seguita dal numero di record trasferiti:
@A (questo è il delimitatore di indirizzo completo)
TITOLO
COGNOME_NOME
ENTE
INDIRIZZO
CAP CITTA' PROVINCIA
@A (termina un indirizzo e inizia l'altro)
TITOLO
COGNOME_NOME
...
...
@A
...
...
@ENumero_record (questa deve essere l'ultima riga del file)
il tutto ordinato per CAP e, all'interno del CAP, per INDIRIZZO.
Il problema scritto "IN ITALIANO" sarebbe:
CODICE ON -------
Apri la tabella
ordinala per CAP e per CITTA e per INDIRIZZO
conta il numero di record
crea il file POSTEL.TXT dove devo mettere i dati
For K=1 to numero di record
scrivi "@A"
leggi il campo TITOLO del record K
scrivi TITOLO
leggi il campo COGNOME
scrivi COGNOME
leggi il campo ENTE
scrivi ENTE
leggi il campo INDIRIZZO
scrivi INDIRIZZO
leggi i campi CAP,CITTA', PROVONCIA
scrivi CAP & " " & CITTA' & " " PROVINCIA
next k
scrivi @Enumero_record (ultima riga del file)
CODICE OFF -------
La stessa cosa bisogna dirla in VBA
Adriano
e-mail galad***NOSPAM***@
alma.it

 La stessa cosa bisogna dirla in VBA
Ok, per prima cosa aggiungi ai riferimenti dell'applicazione
'Microsoft Scripting Runtime" poi usa questo codice per effettuare il
trasferimento:
Private Sub Button_Click()
Dim fsoOutput As FileSystemObject
Dim ts As TextStream
Dim rstSource As ADODB.Recordset
Dim intCounter As Integer
Set fsoOutput = CreateObject("Scripting.FileSystemObject")
Set ts = fsoOutput.OpenTextFile("C:\POSTEL.TXT", _
    ForWriting, True, TristateFalse)
Set rstSource = New ADODB.Recordset
rstSource.CursorLocation = adUseClient
rstSource.Open "POSTEL", CurrentProject.Connection, _
    adOpenDynamic, adLockOptimistic, adCmdTable
rstSource.Sort = "CAP, CITTA, INDIRIZZO"
intCounter = rstSource.RecordCount
Do Until rstSource.EOF
With rstSource.Fields
    ts.Write "@A" & vbNewLine
    ts.Write .Item("TITOLO").Value & vbNewLine
    ts.Write .Item("COGNOME_NOME").Value & vbNewLine
    ts.Write .Item("ENTE").Value & vbNewLine
    ts.Write .Item("INDIRIZZO").Value & vbNewLine
    ts.Write .Item("CAP").Value & " " & _
        .Item("CITTA").Value & " " & _
        .Item("PROVINCIA").Value & vbNewLine
End With
rstSource.MoveNext
Loop
ts.Write "@E" & intCounter
ts.Close
rstSource.Close
Set rstSource = Nothing
End Sub
Considerazioni:
- - POSTEL.TXT l'ho creato in C:\, puoi metterlo dove ti pare.
- - i nomi dei campi che ho utilizzato li puoi cambiare, se il tuo db č
progettato in maniera differente.
- - il nome della tabella dev'essere quello relativo al tuo db.
- - io ho associato il codice all'evento click di un bottone su una
maschera, ma puoi metterlo dove vuoi.
- - puoi arricchire mettendo una messagebox alla fine che ti avverte
della fine delle operazioni.
- --
Matteo Palmieri - Cybercreations
www.cybercreations.it
-----BEGIN PGP SIGNATURE-----
Version: 6.5.8ckt
Comment: Cybercreations
Comment: KeyID: 0xC83A8FFAC838BA1F
Comment: Fingerprint: 69F4 29D4 5913 B3B6 EDD2  B335 C83A 8FFA C838 BA1F
iQA/AwUBPVzZqcg6j/rIOLofEQL8+gCbB/hm47d7dhtNFzz7Y++LWvFRqXQAoOWL
0Cw6xO63h91JyJdIFWmNfLXy
=+ZyP
-----END PGP SIGNATURE-----

 .......
PERFETTO!!!!!!!!!!!
Sei stato solerte, essenziale ed efficace ... il tuo codice ha
funzionato alla perfezione al primo colpo.
Hai utilizzato  ADO ... con DAO sarebbe cambiato di molto il codice?
Il flusso è chiaro, anche se molte cose (le basi del tutto) mi
sfuggono. Ad esempio ho trovato sull'help il modoIO "forwriting" per
il metodo OpenAsTextStream, mentre per il metodo che hai usato tu
(OpenTextFile) i modi modoIO sono solo ForReading e ForAppending ...
sto facendo un po' di casino???
Mi sai dire dove trovare un po' di roba da studiare in rete (Non roba
difficilissima).
Ancora grazie
Adriano
e-mail galad***NOSPAM***@
alma.it

 il tutto ordinato per CAP e, all'interno del CAP, per INDIRIZZO.
[...]
    Un metodo potrebbe essere:
' ------------------------------------------------------------
  Option Compare Database: Option Explicit
' ------------------------------------------------------------
' ************************************************************
' QUERY: "qryIndirizzi - esportazione"
' ------------------------------------------------------------
' SELECT
'     "@A" & Chr$(13) & Chr$(10)
'   & [tabIndirizzi].[tTitolo] & Chr$(13) & Chr$(10)
'   & [tabIndirizzi].[tCognomeNome] & Chr$(13) & Chr$(10)
'   & [tabIndirizzi].[tEnte] & Chr$(13) & Chr$(10)
'   & [tabIndirizzi].[tIndirizzo] & Chr$(13) & Chr$(10)
'   & [tabIndirizzi].[tCAP] & " "
'   & [tabIndirizzi].[tCittà] & " "
'   & [tabIndirizzi].[tProvincia]
'   AS Espr1
' FROM
'     tabIndirizzi
' ORDER BY
'     [tabIndirizzi].[tCAP]
'   , [tabIndirizzi].[tIndirizzo]
' UNION ALL SELECT  TOP 1
'     "@A" & Chr$(13) & Chr$(10)
'   & "@E"
'   AS Espr1
' FROM
'   tabIndirizzi
' ;
' ************************************************************
'
' """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  Public Function EsportaIndirizzi( _
  ) As Boolean
' ------------------------------------------------------------
  On Error GoTo erh
' ------------------------------------------------------------
  Dim sSpecificationName  As String
  Dim sTableName          As String
  Dim sFileName           As String
  Dim bHasFieldNames      As Boolean
' ------------------------------------------------------------
  sSpecificationName = "INDIRIZZI - specifica di esportazione"
  sTableName = "qryIndirizzi - esportazione"
  sFileName = "C:\TEMP\INDIRIZZI.TXT"
  bHasFieldNames = False
  DoCmd.TransferText _
      acExportDelim _
    , sSpecificationName _
    , sTableName _
    , sFileName _
    , bHasFieldNames
  EsportaIndirizzi = True
ext:
  Exit Function
erh:
  EsportaIndirizzi = False
  Resume ext
  End Function
' """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 roba difficilissima).
Boh, no. Ho diversi libri qui, ma in rete non conosco nulla. Le
uniche cose buone che ho trovato in rete sono le Reference, che delle
volte sono fatte meglio dell'help.
- --
Matteo Palmieri - Cybercreations
www.cybercreations.it
-----BEGIN PGP SIGNATURE-----
Version: 6.5.8ckt
Comment: Cybercreations
Comment: KeyID: 0xC83A8FFAC838BA1F
Comment: Fingerprint: 69F4 29D4 5913 B3B6 EDD2  B335 C83A 8FFA C838 BA1F
iQA/AwUBPV3gkcg6j/rIOLofEQL8/wCfabpsmaifXOIR6YfKg6HAgBSXMMAAn3Ul
akPjHgl2JmMVALQkTsYLvvEL
=c64M
-----END PGP SIGNATURE-----

 '   AS Espr1
[...]
    Scusate.


> "Maurizio Borrelli" [...]:
    Non me ne va bene una col copia/incolla, questa mattina! Riscrivo e
scusate nuovamente:
' ************************************************************
' QUERY: "tabIndirizzi - esportazione"
' ------------------------------------------------------------
' SELECT
'     "@A" & Chr$(13) & Chr$(10)
'   & [tabIndirizzi].[tTitolo] & Chr$(13) & Chr$(10)
'   & [tabIndirizzi].[tCognomeNome] & Chr$(13) & Chr$(10)
'   & [tabIndirizzi].[tEnte] & Chr$(13) & Chr$(10)
'   & [tabIndirizzi].[tIndirizzo] & Chr$(13) & Chr$(10)
'   & [tabIndirizzi].[tCAP] & " "
'   & [tabIndirizzi].[tCittà] & " "
'   & [tabIndirizzi].[tProvincia]
'   AS Espr1
' FROM
'     tabIndirizzi
' ORDER BY
'     [tabIndirizzi].[tCAP]
'   , [tabIndirizzi].[tIndirizzo]
' UNION ALL SELECT  TOP 1
'     "@A" & Chr$(13) & Chr$(10)
'   & "@E" _
'   & (SELECT
'        Count(tabIndirizzi.ID)
'        AS ConteggioDiID
'      FROM tabIndirizzi)
'   AS Espr1
' FROM
'   tabIndirizzi
' ;
' ************************************************************
--


.... ....
Sei uno stakanovista del codice!!!!!!!!
La prima soluzione mi piace di più (a parte che già la uso perchè
funziona alla perfezione), ma proverò anche la seconda, perchè la
costruzione della SELECT è interessante (anche se un po' complessa).
Grazie ancora ... penso che mi rifarò vivo presto.
Ciao
Adriano
e-mail galad***NOSPAM***@
alma.it

 La prima soluzione mi piace di più
    Anche a me, ovviamente. Volevo solo far notare come puo' ottenere un
risultato decente "tutto Access" anche chi eventualmente fosse in
difficolta' con VBA.
