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
potresti dover usare
e
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