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
caricamento da writer a base
-
- Messaggi: 29
- Iscritto il: domenica 15 dicembre 2013, 20:49
caricamento da writer a base
- Allegati
-
- esempiopgn.odt
- (9.75 KiB) Scaricato 123 volte
LibreOffice 5.2.2 su Windows 10
Re: caricamento da writer a base
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
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
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
-
- Messaggi: 29
- Iscritto il: domenica 15 dicembre 2013, 20:49
Re: caricamento da writer a base
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:
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
Ultima modifica di charlie il domenica 1 marzo 2015, 22:53, modificato 1 volta in totale.
Motivazione: Formattato codice
Motivazione: Formattato codice
LibreOffice 5.2.2 su Windows 10
Re: caricamento da writer a base
Ciao
La connessione al DB può essere fatta con questo codice:
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
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
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)
Codice: Seleziona tutto
oDBStat.execute(sSqlXc)
Codice: Seleziona tutto
oDBStat.executeUpdate(sSqlXc)
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
-
- Messaggi: 29
- Iscritto il: domenica 15 dicembre 2013, 20:49
Re: caricamento da writer a base
grazie, per ora
nel fine settimana faro' le prove
nel fine settimana faro' le prove
LibreOffice 5.2.2 su Windows 10