Esportare memo in xml

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Esportare memo in xml

    Dove devo inserire le stringhe che mi hai scritto?
  • Re: Esportare memo in xml

    Segreto Auto ha scritto:


    Dove devo inserire le stringhe che mi hai scritto?
    Nella query Annunci X Sito, se è una query, altrimenti creane una ad hoc, che prende tutti i campi della tabella Annunci X Sito, facendo la modifica che ti ho detto nella query appena creata, dopo nell'OpenRecordset ovviamente ti riferirai alla nuova query, non più ad Annunci X Sito.
  • Re: Esportare memo in xml

    Nella query ho fatto la modifica ma comunque nel vba mi da lo stesso errore
  • Re: Esportare memo in xml

    Invece di appoggiarsi a FSO (File System Object) per la scrittura del file XML impiega direttamente gli statement disponibili in Access per la scrittura di un File di Testo (open # ... print # ... close #) ed il campo memo non verrà troncato.
    https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/printstatement
  • Re: Esportare memo in xml

    willy55 ha scritto:


    ...impiega direttamente gli statement disponibili in Access per la scrittura di un File di Testo (open # ... print # ... close #) ed il campo memo non verrà troncato.
    Che dire... se non: "funziona!".
    (18 messaggi che rendono il thread un mattone quasi illegibile quando bastava 1 risposta, questa. Ora so anche questa)
  • Re: Esportare memo in xml

    Grazie ancora dell’aiuto,

    Riusciresti a dirmi come devo inserirli perché in quel caso non saprei proprio da dove partire
  • Re: Esportare memo in xml

    Segreto Auto ha scritto:


    ...Riusciresti a dirmi come devo inserirli perché in quel caso non saprei proprio da dove partire
    Guarda nel link indicato da willy55, c'è un esempio di come si usa. E' ovvio che il codice va rivisto anche nella parte in cui usi CreateObject("scripting.filesystemobject")
    Come sei arrivato ad usare quello, con ricerche varie "in autonomia", non avrai (grossi) problemi a cambiare il codice per adattarlo al nuovo sistema.
  • Re: Esportare memo in xml

    Ciao Phil

    Philcattivocarattere ha scritto:


    Che dire... se non: "funziona!".
    uomo di poca fede ... funziona ... (la funzione).
    Basta che provi questa funzione che ho riesumato (adattandola al caso):
    
    Option Compare Database
    Option Explicit
    
    ' ------------------------------------------------------------------------------
    ' Funzione che scrive un file sequenziale (ciclando un recordset con DAO)
    ' in modo da porvi due campi (ID e Note ove quest'ultimo è un campo memo)
    ' In tal modo si supera il limite dei 255 caratteri di lunghezza di una stringa
    ' quali quelli che possono essere presenti in un campo memo
    ' Uso:
    ' If DAOLoopingWritingMemo("C:\MyFile.XML", "Anagrafica", "ID", "Note") = True Then
    '     MsgBox ("Il file è stato scritto")
    ' Else
    '     MsgBox ("Il file NON è stato scritto")
    ' End If
    
    ' ------------------------------------------------------------------------------
    Public Function DAOLoopingWritingMemo(strNameFile As String, _
                                          strSQL As String, _
                                          strFieldName1 As String, _
                                          strFieldName2 As String) _
                                                         As Boolean
                                          
    ' Dim strNomeFile   As String is the Name of File (with path) to write
    ' Dim strSQL        As String is the table or query
    ' Dim strFieldName1 As String is the name of field key (example "ID")
    ' Dim strFieldName2 As String is the name of memo field (example "Note")
    ' Return Boolean True if writing OK, else False
    
    On Error GoTo ErrorHandler
    
    Dim rs As DAO.Recordset
    
    Open strNameFile For Output As #1
    ' As:
    ' Open "C:\Prova.txt" For Output As #1
    
    ' As:
    ' strSQL = "Anagrafica"
    ' For the purposes of this post, we are simply going to make
    ' strSQL equal to Anagrafica.
    ' You could use a full SELECT statement such as:
    ' SELECT * FROM Anagrafica (this would produce the same result in fact).
    ' You could also add a Where clause to filter which records are returned:
    ' SELECT * FROM Anagrafica Where CAP = '00100'
    ' (this would return n records)
    
    Set rs = CurrentDb.OpenRecordset(strSQL)
    ' This line of code instantiates the recordset object!!!
    ' In English, this means that we have opened up a recordset
    ' and can access its values using the rs variable.
    
    With rs
        
        If Not rs.BOF And Not rs.EOF Then
        ' We don’t know if the recordset has any records,
        ' so we use this line of code to check. If there are no records
        ' we won’t execute any code in the if..end if statement.
            
            rs.MoveLast
            rs.MoveFirst
            ' It is not necessary to move to the last record and then back
            ' to the first one but it is good practice to do so.
            
            ' example heading
            Print #1, "<?xml version=""1.0"" encoding=""utf-8""?>"
            Print #1, "<cars>"
            
            While (Not rs.EOF)
            ' With this code, we are using a while loop to loop
            ' through the records. If we reach the end of the recordset, .EOF
            ' will return true and we will exit the while loop.
                
                ' Debug.Print rs.Fields("ID") & " " & rs.Fields("Note")
                ' prints info from fields to the immediate window
                ' Write #1, rs.Fields("ID") & Chr(124) & rs.Fields("Note") )
                ' With Write there are double quote at start and end of the string
                ' (Con Write la stringa scritta viene racchiusa da doppi apici, con Print no)
                ' Print #1, rs.Fields("ID") & Chr(124) & rs.Fields("Note")
                Print #1, "<element>"
                ' Print #1, "<external_id>" & rs.Fields("ID") & "</external_id>"
                Print #1, "<external_id>" & rs.Fields(strFieldName1) & "</external_id>"
                ' Print #1, "<description><![CDATA[" & rs.Fields("Note") & "]]></description>"
                Print #1, "<description><![CDATA[" & rs.Fields(strFieldName2) & "]]></description>"
                Print #1, "</element>"
                rs.MoveNext
                ' We need to ensure that we use .MoveNext,
                ' otherwise we will be stuck in a loop forever…
                ' (or at least until you press CTRL+Break)
            Wend
            Print #1, "</cars>"
        End If
        
        rs.Close
        ' Make sure you close the recordset...
        Close #1 ' Close sequential file (Chiusura File)
        DAOLoopingWritingMemo = True    ' Exit function with True (OK on file writing)
    End With
    
    ExitSub:
        Set rs = Nothing
        ' ..and set it to nothing
        Exit Function
    ErrorHandler:
        Resume ExitSub
    End Function
    
    PS Si vede che non hai vissuto l'inizio dei primi software per i pc (degli anni '80 ma del secolo scorso) dove, magari, avevi a disposizione esclusivamente il Basic e potevi impiegare solo file sequenziali sui dispositivi.
  • Re: Esportare memo in xml

    willy55 ha scritto:


    Ciao Phil
    uomo di poca fede ... funziona ... (la funzione).
    Mi sono stupito (con la T) del fatto che una cosa che non funzionava usando il più recente filesystemobject andasse tranquillamente con il più datato print.
    E per la cronaca ho passato ore ed ore a cercare informazioni sulle differenze delle due tecniche usare, sul web e scartabellando gli appunti che avevo accumulato nel corso del tempo in attesa di affrontare seriamente la scrittura su file, dalla A alla Z, per capire quando usare una e quando l'altra. Ad esempio mi sono trovato nella necessità di usare filesystemobject per leggere un file che non riuscivo a leggere con le funzioni proprie di vba (presenza di caratteri strani) arrivando quindi ad una conclusione priva di fondamento tecnico che filesystemobject fosse "meglio" di quanto già nativamente disponibile in vba.
    La logica che invece credo di adottare d'ora in avanti è: lavoro in VBA, quindi uso quello che è disponibile in VBA nativamente. Se non riesco a farlo cerco altre strade, che poi era l'idea che avevo prima di aver incontrato quel problema in lettura di un file che aveva caratteri strani.

    willy55 ha scritto:


    Basta che provi questa funzione che ho riesumato (adattandola al caso):
    che metto al sicuro tra i famosi appunti di cui parlavo (e spezzoni di codice)

    willy55 ha scritto:


    PS Si vede che non hai vissuto l'inizio dei primi software per i pc (degli anni '80 ma del secolo scorso) dove, magari, avevi a disposizione esclusivamente il Basic e potevi impiegare solo file sequenziali sui dispositivi.
    Smascherato, ormai.
    Il mio primo computer è stato un "home computer", che leggeva i giochini dalle cassette magnetiche che si compravano in edicola, per i quali si segnavano i giri del lettore di cassette per ricordare dove iniziava il caricamento di ogni gioco e... i tempi erano eterni. L'unico programma che ho fatto (non da solo) con quel gioiello, che ancora conservo nel suo imballaggio originale di polistirolo, è stato il calcolo dell'ipotenusa indicando la lunghezza dei due cateti di un triangolo rettangolo.
Devi accedere o registrarti per scrivere nel forum
23 risposte