Newsgroup: it.comp.software.database
Titolo: Salvare file word su HDD da campi OLE di Access

Ciao a tutti, ho un problema. Ho un database Access con un bel pò di
Documenti word salvati in campi ole e un programma scritto in vba che
li gestisce direttamente da access. Ho la necessità di trasferire
questi documenti ad un database SQL Server perchè ci è stato richiesto
di migrare a .NET il software e a SQL Server il database e non si
vuole perdere nulla di quanto salvato in Access. Bè tutto bene per
quanto riguarda le altre tabelle, con un dts ho trasferito tutto, ma
quando ho trasferito i documenti e ho provato ad aprirli mi sono
accorto che Access gli aveva inserito degli headers proprietari che
non riesco a togliere.
Allora, ho  fatto un programma in vba che genera un recordset della
tabella con i file word, cicla sul recordset, il documento lo mette su
un controllo "Cornice Oggetto Associato", apre un nuovo documento
word, copia quello che trova nel controllo "Cornice Oggetto Associato"
sul nuovo documento word e salva il nuovo documento word su hard disk,
dandogli come nome un progressivo.
Tutto bene salva correttamente i file word che poi posso buttare nella
tabella di SQL Server. Tutto bene o quasi... se il documento è di una
pagina non dà nessun problema, se ha più di una pagina, salva solo la
prima perdendosi le altre.
 Vi posto il codice
  oConn.Open sConnSQL 'open the sql server db
  i = 0
  Set objWrkSpc = DBEngine(0)
  Set objDataBase = objWrkSpc.OpenDatabase(strDBase) 'open the access
db
  Set objRecSet = objDataBase.OpenRecordset("tblNote", dbOpenDynaset)
'open the access recordset
  strTemp = "C:\Data\" 'Where i will save the documents on the hard
drive
  With objRecSet
   Do Until objRecSet.EOF
      i = i + 1
      sSQL = "Update tblNote SET CD_Nota = " & i & " WHERE
C_Cliente_Access = " & .Fields("C_Cliente_Access").Value & _
             " AND Dt_Nota = #" & .Fields("Dt_Nota").Value & "#" & _
             " AND D_Nota = '" & Replace(.Fields("D_Nota").Value, "'",
"''") & "'"
      objDataBase.Execute sSQL 'I set a code for each record on the
access and then on the sql server table
      DataDoc = CDate(.Fields("Dt_Nota").Value)
      sSQL = "INSERT INTO tblNote
(CD_Nota,C_Cliente_Access,Dt_Nota,D_Nota) VALUES (" & i & "," &
.Fields("C_Cliente_Access").Value & _
             ",CONVERT(DATETIME, '" & Year(DataDoc) & "-" &
Month(DataDoc) & "-" & Day(DataDoc) & "',102),'" &
Replace(.Fields("D_Nota").Value, "'", "''") & "')"
      oConn.Execute sSQL
      Set OLE1 = CreateObject("Word.Application")
 
      OLE1.Visible = True 
      'Documento word è il controllo "Cornice Oggetto Associato"
      DocumentoWord = .Fields("DocumentoWord") 'my word doc on the
access db
      If Not IsNull(DocumentoWord.Value) Then
          OLE1.Documents.Add 'Create the new word doc
          DocumentoWord.Action = acOLECopy 'I copy the doc from the
access db
          OLE1.Selection.Paste 'then i paste it on the new doc
          OLE1.ActiveDocument.SaveAs FileName:="C:\Data\" & i &
".doc", _
        FileFormat:=20 'and I save it on the hard drive
      End If
      OLE1.Quit
      Set OLE1 = Nothing
 
      .MoveNext
    Loop
    .Close
  End With
  objRecSet.Close
  objDataBase.Close
  objWrkSpc.Close
oConn.Close
Qualche suggerimento?
Grazie a tutti e ciao
Roberto

 li gestisce direttamente da access.
Purtroppo non so aiutarti. Ma credo che la soluzione del controllo OLE
utilizzato con "incolla" o drag&drop sia abbastanza poco pratica.
Quando voglio salvare dei files in dei blob, personalmente, utilizzo le
stream di ADO, per leggere/scrivere da/a file a blob.
Ciao, Sandro.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/