Suivant le lien ci joint:https://forum.openoffice.org/fr/forum/v ... +import%2A, j' ai modifié la macro afin de l' adapter à mon besoin. J' ai du commettre une erreur quelque part car je me retrouve avec l' erreur suivante;
La requête ne peut pas être executée. Elle ne contient pas de table valide
Macro modifiée;
Code : Tout sélectionner
Dim maConnexion as Object, oConnexion as Object, oForm As Object
Sub AjoutDonnees
Dim DrvMan As Object, maRequete as Object
Dim cheminCSV As String, URLbdcsv As String, instrSQL as String
Dim Infos(3) As New com.sun.star.beans.PropertyValue
ThisDatabaseDocument.CurrentController.connect("","")
maConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
DrvMan = CreateUnoService("com.sun.star.sdbc.DriverManager")
cheminCSV = "/home/elfouste/Documents/Python/Svg_Csv/DnExif.csv"
URLbdcsv = "sdbc:flat:" & cheminCSV
Infos(0).Name = "HeaderLine"
Infos(0).Value = True
Infos(1).Name = "FieldDelimiter"
Infos(1).Value = chr(44)
Infos(2).Name = "StringDelimiter"
Infos(2).Value = ","
Infos(3).Name = "Extension"
Infos(3).Value = "csv"
oConnexion = DrvMan.getConnectionWithInfo(URLbdcsv, Infos())
instrSQL = "DELETE FROM ""Tp_Pht"""
maRequete = maConnexion.createStatement()
maRequete.executeUpdate(instrSQL)
oForm = thisComponent
GererBarresOutils("f_mise_a_jour")
CopierDonnees
End Sub
'========================================================================================================
Sub CopierDonnees
On Error GoTo CopierDonnees_Err
Dim unRowSet as Object, maRequete as Object, resuQuery as Object, maRequete2 as object, Resultat as Object
Dim Fenetre as Object, FenetreForm as Object, avance as Object
Dim instrSQL as String, instrSQL2 as String, i as Integer, dteNaiss as Date, Compte as Integer, x as Integer
Fenetre = ThisDatabaseDocument.CurrentController.Frame.ContainerWindow
FenetreForm = oForm.currentcontroller.Frame.ContainerWindow
Fenetre.Enable = False
FenetreForm.Enable = False
avance = oForm.CurrentController.StatusIndicator
unRowSet = createUnoService("com.sun.star.sdb.RowSet")
instrSQL = "SELECT * FROM ""Tp_Pht"" ORDER BY ""Cf_Pht"""
instrSQL2 = "SELECT COUNT(*) as ""nb"" FROM ""Tp_Pht"""
maRequete = oConnexion.createStatement()
maRequete2 = oConnexion.createStatement()
Resultat = maRequete2.executeQuery(instrSQL2)
Resultat.Next
With unRowSet
.ActiveConnection = maConnexion
.CommandType = com.sun.star.sdb.CommandType.TABLE
.Command = "Tp_Pht"
.Execute
x = 1
avance.start("Veuillez patienter ...", Compte)
Do While resuQuery.Next
.moveToInsertRow
For i = 1 to 10
Select Case .Columns.getByIndex(i -1).TypeName
Case "INTEGER"
.Columns.getByIndex(i -1).updateInt(resuQuery.getInt(i))
' Case "VARCHAR"
' .Columns.getByIndex(i -1).updateString(resuQuery.getString(i))
' Case "NUMERIC"
' .Columns.getByIndex(i -1).updateInt(resuQuery.getInt(i))
End Select
If i = 1 Then
.insertRow
Else
.UpdateRow
End If
Next i
avance.Value = x
avance.Text = "Ligne " & x & " recopiée"
x = x + 1
Loop
avance.Text = "Terminé " & Compte & " lignes recopiées"
End With
oConnexion.Dispose
unRowSet.Dispose
Wait 800
avance.End
FenetreForm.Enable = True
Fenetre.Enable = True
'ThisDatabaseDocument.FormDocuments.getByName("f_mise_a_jour").Close
CopierDonnees_Exit:
On Error GoTo 0
Exit Sub
CopierDonnees_Err:
MsgBox(Error, 16)
FenetreForm.Enable = True
Fenetre.Enable = True
oConnexion.Dispose
unRowSet.Dispose
Resume CopierDonnees_Exit
End Sub
Code : Tout sélectionner
Resultat = maRequete2.executeQuery(instrSQL2)
1; Cf_Pht Integer et clé primaire
2; ChmPht Texte varchar
3: NmPht Texte varchar
Et pour finir, le fichier.csv;
Code : Tout sélectionner
['Cf_Pht', 'ChmPht', 'NmPht', 'XtnPht']
[1, '/elfouste/El_Casot/Yvon/Phototeque1/A_Trier/Noel', 'DSCF0068']
Cordialement