Pagina 1 di 1

caricamento da writer a base

Inviato: giovedì 19 febbraio 2015, 12:58
da maremmanogr
buongiorno,
vorrei trasferire i campi del file pgn (una partita di scacchi) in una tabella strutturata con i medesimi campi. E' possibile senza dover fare copia manuale di ognuno dei campi?
Mi spiego meglio: il nome del campo e' identico a quello subito dopo la parentesi quadra, ma nel campo deve andare solo il testo racchiuso tra gli apici.
avevo gia fatto qualcosa di simile con visualbasic e vorrei riportarlo anche in openoffice.
grazie per gli aiuti
maremmanogr

Re: caricamento da writer a base

Inviato: domenica 1 marzo 2015, 17:45
da Mizio1961
Ciao
Se lo hai già fatto in visual allora è possibile anche in OO ;-)
Per rendere tutto più semplice potrebbe essere il caso che inserisci lo sviluppo che hai fatto sull'altra piattaforma, soprattutto la banca dati che dovrebbe contenere i 'dati' ;-) Questa già in base però ehhh
Saluti By Mizio

Re: caricamento da writer a base

Inviato: domenica 1 marzo 2015, 20:13
da maremmanogr
grazie mizio per la "spinta" che mi dai. il mio problema sta nel modo di aprire il file odb ed entrare nella tabella gia' programmata in base
ecco il listato del mio vecchio prog:

Codice: Seleziona tutto

Dim ElencoFile() As String
Dim VarTemp As Variant
Dim myDB As Database
Dim Salvato As Boolean

Private Sub cmd1_Click()
    Inserisci
End Sub

Private Sub Form_Load()
    Dim A, B, C, N As Integer
    Dim dat, D, E As Integer
    Dim S, X, Y As String
    Dim Percorso As String
    
    Salvato = False
       With CDialog
        .CancelError = False
        .Flags = cdlOFNHideReadOnly
        .Filter = "All Files (*.*)|*.*|PGN Files (*.pgn)|*.pgn"
        .FilterIndex = 2
        .ShowOpen
    End With
    Me.Show
    Open CDialog.FileName For Input As #1 'App.Path & ("/iecc.pgn")
    S = Input$(LOF(1), #1)
    Close #1
    Do
        A = InStr(1, S, "Event" & Chr$(32) & Chr$(34))
        dat = InStr(1, S, "Date" & Chr$(32) & Chr$(34))
        N = N + 1
        If A = 0 Then Exit Do
        C = A + 7
        E = dat + 6
        B = InStr(C, S, Chr$(34) & Chr$(93))
        D = InStr(E, S, Chr$(34) & Chr$(93))
        X = Mid(S, C, B - C)
        Y = Mid(S, E, D - E)
        List1.AddItem CStr(X) & "  " & CStr(Y)
        'If N = 1 Then
        '    Text1.Text = X
        'Else
        '    Text1.Text = Text1.Text & Chr$(13) & Chr$(10) & X
        'End If
        S = Right(S, Len(S) - A)
    Loop
    Text1.Text = N - 1 & " partite trovate"
    
    
    
End Sub
 Sub Inserisci()
 Dim cont As Integer
Dim IndEl As Integer
Dim K As Integer
Dim elenco As Integer
Dim i As Integer
Dim rsFile As Recordset
Dim l_sSQL      As String

    cont = -1
    For IndEl = 0 To List1.ListCount - 1
        If List1.Selected(IndEl) = True Then
            cont = cont + 1
                If cont = 0 Then
                    ReDim ElencoFile(0)
                Else
                    ReDim Preserve ElencoFile(cont)
                End If
            ElencoFile(cont) = List1.List(IndEl)
        End If
    Next IndEl
    If cont = -1 Then Exit Sub
Text1.Text = Text1.Text & Chr$(13) & Chr$(10) & cont + 1 & " partite selezionate"

For K = 0 To UBound(ElencoFile)
    sqlFile = "select * from tornei"
    Set myDB = OpenDatabase(App.Path & "\iecc2.mdb")
    Set rsFile = myDB.OpenRecordset(sqlFile)
        With rsFile
            UpdateArc
            .AddNew
            !ID = VarTemp
            !torneo = ElencoFile(K) 'l_sFileName(i)
            .Update
        End With
    If i = -1 Then Exit Sub
    Next K
    Salvato = True
    cmd1.Enabled = False
myDB.Close
 Exit Sub
NotInserted:
    MsgBox "Error" & Str$(Err.Number) & _
        " inserting record." & vbCrLf & _
        Err.Description

 End Sub
Sub UpdateArc()

'---aggiorna il numero di archivio

sSqlCod = "SELECT max(ID) from tornei"
Set myDB = Workspaces(0).OpenDatabase(App.Path & "\iecc2.mdb")
Set rsCod = myDB.OpenRecordset(sSqlCod)
If rsCod.RecordCount Then
    VarTemp = rsCod.Fields(0)
    If IsNull(VarTemp) Then
        VarTemp = 1
    Else
        
        VarTemp = (rsCod.Fields(0) + 1)
    End If
End If
End Sub

Re: caricamento da writer a base

Inviato: lunedì 2 marzo 2015, 12:52
da Mizio1961
Ciao
La connessione al DB può essere fatta con questo codice:

Codice: Seleziona tutto

Public Sub Fn_OpeDB()                            ' APERTURA DATABASE
   dim oDBIHnd, oDBStat, oDBRSet as object
   dim sDBName, sSqlXc as string
   '---------------------------------------------'
   sDBName = "iecc2.odb"                         ' NOME DB REGISTRATO IN OO
   oDBBase = createUnoService("com.sun.star.sdb.DatabaseContext").getByName(sDBName)	
   If Not oDBBase.IsPasswordRequired Then        ' IF    NO RICHIESTA PWD ACCESSO
      oDBConn = oDBBase.GetConnection("","")     ' ACCEDO SENZA PasSWORD
   Else                                          ' ELSE  PWD RICHIESTA
      oDBIHnd = createUnoService("com.sun.star.sdb.InteractionHandler")
      oDBConn = oDBBase.ConnectWithCompletion(oDBIHnd)
   End If                                        ' ENDIF ACCESSO CON PWD
   '---------------------------------------------'
   if not isNull(oDBConn) then
      oDBStat = oDBConn.createStatement()        ' CREAZIONE STATEMENT
      oDBStat.setPropertyValue("ResultSetType", 1004)
      sSqlXc = "SELECT * FROM TORNEI"            ' SINTASSI SQL
      oDBRSet = oDBStat.executeQuery(sSqlXc)     ' ACQUISISCO SET DATI DA DB
      While oDBRSet.Next                         ' CICLO DI LETTURA DATI DA RESULTSET
         '---------------------------------------' AGGIUNGERE TUO PROGRAMMA
         ' msgbox solo dimostrativi              '
         '---------------------------------------'
         msgbox oDBRSet.getstring(1)             ' ACQUISISCE VALORE 1° COLONNA TABELLA
         msgbox oDBRSet.getstring(2)             ' ACQUISISCE VALORE 2° COLONNA TABELLA
         I = I + 1                               ' INCREMENTA CONTA RECORD (SE SERVE)
      Wend                                       ' WEND  CHIUSURA  
   endif
End Sub                                          ' FINE

Per usarlo devi aver registrato in OO la tua banca dati che può essere sia fatta ExNovo in Base che collegata da quella in Access via ODBC
Il tuo codice andrà messo all'interno del ciclo While.
Per le operazioni di insert o di update SQL al posto di

Codice: Seleziona tutto

oDBStat.executeQuery(sSqlXc)
potresti dover usare

Codice: Seleziona tutto

oDBStat.execute(sSqlXc)
e

Codice: Seleziona tutto

oDBStat.executeUpdate(sSqlXc)
Saluti by Mizio... per ora ;-)

Re: caricamento da writer a base

Inviato: giovedì 5 marzo 2015, 18:48
da maremmanogr
grazie, per ora :)
nel fine settimana faro' le prove