[Résolu][Base] Importation csv

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu][Base] Importation csv

Messagepar Eric_03 » 05 Mars 2018 10:10


La modération a écrit:Pour la bonne tenue de ce forum, veillez à respecter la syntaxe des balises (première lettre en majuscule puis le reste en minuscules, le tout entre crochets). [Base] et non [base]

Bonjour,

j'ai récupéré le fichier "Europa.odb" sur https://forum.openoffice.org/fr/forum/viewtopic.php?p=277809 mais j'ai quelques problèmes pour l'adapter à mes besoins.

J'ai modifié la table en remplaçant les champs.

La clé primaire concerne le champ demande.

Je suppose à la lecture du message d'erreur que j'ai un problème avec le champ "Dossier" et "Demande" mais je n'arrive pas à le résoudre

Pouvez vous SVP m'aider dans la résolution de ce problème

Merci
Eric
Pièces jointes
Base csv.7z
(22.69 Kio) Téléchargé 14 fois
message erreur.jpg
Dernière édition par Eric_03 le 05 Mars 2018 15:14, édité 2 fois.
LibreOffice Version: 5.2.7.2
OS Debian 9
Eric_03
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 31 Déc 2017 19:01

Re: [Base] Importation csv

Messagepar micmac » 05 Mars 2018 10:24

Bonjour et bienvenue,
votre signature a écrit:LibreOffice Version: 5.2.7.2
OS Debian 9

Votre signature indique une version de LibreOffice qui n'est plus maintenue.
Est-ce une une erreur, un oubli, un choix, une obligation ?
Dans ce dernier cas, mentionnez-le dans votre signature par "Obligation de version".

Il est fortement recommandé d'être à jour de la dernière version stable 5.4.5 : Soyez à jour de la dernière version

Accès direct à votre signature pour la corriger.

Cordialement.
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 4817
Inscrit le : 28 Août 2010 09:45

Re: [Base] Importation csv

Messagepar Eric_03 » 05 Mars 2018 10:29

Bonjour,

je vérifie ce midi et modifie en conséquence. J'ai pris note de la remarque du modérateur en qui concerne le titre.

Eric
LibreOffice Version: 5.2.7.2
OS Debian 9
Eric_03
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 31 Déc 2017 19:01

Re: [Base] Importation csv

Messagepar Dude » 05 Mars 2018 11:10

Ici, il faut faciliter la vie des bénévoles.
Pourquoi joindre un fichier compressé et pas directement un ODB ?

Eric_03 a écrit:La clé primaire concerne le champ demande.

Sais-tu à quoi sert une clef primaire au moins ?
L'erreur montre que tu veux insérer une information vide alors que tu interdis cette opération sur le champ.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20055
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Base] Importation csv

Messagepar Eric_03 » 05 Mars 2018 11:27

Bonjour,

je n'ai pas pu intégrer mon fichier csv sans procéder de cette manière

Une clé primaire permet d'identifier un enregistrement de manière unique

Tous mes champs sont non vides

Eric
Dernière édition par Eric_03 le 05 Mars 2018 11:30, édité 2 fois.
LibreOffice Version: 5.2.7.2
OS Debian 9
Eric_03
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 31 Déc 2017 19:01

Re: [Base] Importation csv

Messagepar Dude » 05 Mars 2018 11:29

Bis repetitae :
Dude a écrit:Pourquoi joindre un fichier compressé et pas directement un ODB ?
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20055
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Base] Importation csv

Messagepar Hubert Lambert » 05 Mars 2018 11:30

Bonjour,

Le problème vient du fait que la macro n'est pas adaptée à la structure de ta table. Celle-ci impose une valeur pour la champ "Dossier" et pour le champ "Demande" (ce dernier, en 4e position, étant la clé primaire), alors que la macro originale attend un seul champ requis en première position (position naturelle d'une clé primaire).
J'ai adapté le code pour qu'il fonctionne avec ta source csv.
Cordialement.
Pièces jointes
Europa1.odb
(28.37 Kio) Téléchargé 17 fois
AOOo 4.1.2 sur Win7
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 870
Inscrit le : 06 Avr 2016 08:26

Re: [Base] Importation csv

Messagepar Eric_03 » 05 Mars 2018 11:32

Tout fonctionne parfaitement

La clé primaire se trouve en quatrième position car le fichier que je récupère en pdf se trouve sur un gros système. Ce fichier pdf est enregistré en txt puis mise en forme sous calc pour être enregistrer en csv et ensuite intégré dans Base.

J'analyse tes modifications et mettrai le sujet résolu ensuite

Encore merci

Eric
LibreOffice Version: 5.2.7.2
OS Debian 9
Eric_03
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 31 Déc 2017 19:01

Re: [Base] Importation csv

Messagepar Eric_03 » 05 Mars 2018 11:57

Dude a écrit:Bis repetitae :
Dude a écrit:Pourquoi joindre un fichier compressé et pas directement un ODB ?


Je n'arrivais pas à joindre mon fichier csv c'est pourquoi j'ai effectué un zip de ma base et de mon csv

Eric
LibreOffice Version: 5.2.7.2
OS Debian 9
Eric_03
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 31 Déc 2017 19:01

Re: [Base] Importation csv

Messagepar Eric_03 » 05 Mars 2018 12:57

micmac a écrit:Bonjour et bienvenue,
votre signature a écrit:LibreOffice Version: 5.2.7.2
OS Debian 9

Votre signature indique une version de LibreOffice qui n'est plus maintenue.
Est-ce une une erreur, un oubli, un choix, une obligation ?
Dans ce dernier cas, mentionnez-le dans votre signature par "Obligation de version".

Il est fortement recommandé d'être à jour de la dernière version stable 5.4.5 : Soyez à jour de la dernière version

Accès direct à votre signature pour la corriger.

Cordialement.


Merci pour l'accueil

Il s'agit bien de ma version. Je n'ai pas de proposition d'upgrade automatique pour LibreOffice pour Debian 9.

Eric


La modération a écrit::alerte: Merci de ne pas poster plusieurs messages à la suite, si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.
Image
En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.
LibreOffice Version: 5.2.7.2
OS Debian 9
Eric_03
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 31 Déc 2017 19:01

Re: [Résolu][Base] Importation csv

Messagepar Hubert Lambert » 08 Mars 2018 10:55

Bonjour,

Voici un exemple , qui devra bien sûr être adapté en fonction de ce qu'il faut exactement entendre par "mise à jour" :
Code : Tout sélectionner   AgrandirRéduire
REM  *****  BASIC  *******

dim lines()

sub ajoutdonnees()
    file = getfilepath()
    if file = "" then exit sub

    sql = buildsql(file)

    dbase = thisdatabasedocument
    dbase.CurrentController.connect("","")
    conn = dbase.CurrentController.ActiveConnection
    statement = conn.createStatement()

    statement.execute(sql)
    msgbox "Terminé"

    dbase.FormDocuments.getByName("f_miseajour").close()
    dbase.FormDocuments.getByName("f_menu").open()
end sub

function getfilepath
    filepicker = createunoservice("com.sun.star.ui.dialogs.FilePicker")
    filepicker.appendFilter("Fichiers txt", "*.txt")
    filepicker.appendFilter("Tous les fichiers", "*.*")
    if filepicker.execute() then
        getfilepath = filepicker.Files(0)
    else
        getfilepath = ""
    end if
end function

function buildsql(url)
    dim line1 as string
    dim line2 as string
    ff = freefile
    open url for input as ff
    while not eof(ff)
        line input #ff, line1
        l1 = split(line1, "*")
        if ubound(l1) = 12 then
            line input #ff, line2
            l2 = split(line2, "*")
            if trim(l1(1)) <> "NUMERO" then
                addline(l1, l2)
            end if
        end if
    wend
    close #ff
    sql = sql + join(lines(), ";")
    buildsql = sql
end function

sub addline(line1, line2)
    dim a(11)
    a(0) = trim(line1(1))
    a(1) = trim(line1(2))
    a(2) = trim(line2(2))
    a(3) = trim(line1(3))
    a(4) = trim(line1(4))
    a(5) = trim(line1(5))
    a(6) = trim(line1(6))
    a(7) = trim(line1(7))
    a(8) = trim(line1(8))
    a(9) = trim(line1(9))
    a(10) = trim(line1(10))
    a(11) = getdate(trim(line1(11))
   
    u = ubound(lines)+1
    redim preserve lines(u)
    lines(u) = "INSERT INTO ""t_europa"" VALUES ('" & join(a(), "','") & "')"
end sub

function getdate(str)
    if instr(str, "/") = 0 then
        getdate = str
    else
        d = split(str, "/")
        getdate = d(2) & "-" & d(1) & "-" & d(0)
    end if
end function

Cordialement.

 Ajout : J'aurais dû poster ici : https://forum.openoffice.org/fr/forum/v ... =8&t=57238.
Désolé pour la distraction ! 
Pièces jointes
Europa1.odb
(27.38 Kio) Téléchargé 25 fois
Dernière édition par Hubert Lambert le 08 Mars 2018 17:23, édité 1 fois.
AOOo 4.1.2 sur Win7
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 870
Inscrit le : 06 Avr 2016 08:26

Re: [Résolu][Base] Importation csv

Messagepar Eric_03 » 08 Mars 2018 13:15

Chapeau bas :bravo:

J'ai adapté un peu le code car dans le champ redevable l'apostrophe dans certain nom posé problème pour l'importation (dans le fichier texte joint cela ne se présentait pas)

Code : Tout sélectionner   AgrandirRéduire
sub addline(line1, line2)
   dim a(11)
   a(0) = trim(line1(1))
   a(1) = getquote(trim(line1(2)))
   a(2) = trim(line2(2))
   a(3) = trim(line1(3))
   a(4) = trim(line1(4))
   a(5) = trim(line1(5))
   a(6) = trim(line1(6))
   a(7) = trim(line1(7))
   a(8) = trim(line1(8))
   a(9) = trim(line1(9))
   a(10) = trim(line1(10))
   a(11) = getdate(trim(line1(11))
   
   u = ubound(lines)+1
   redim preserve lines(u)
   lines(u) = "INSERT INTO ""t_europa"" VALUES ('" & join(a(), "','") & "')"
end sub

function getdate(str)
   if instr(str, "/") = 0 then
      getdate = str
   else
      d = split(str, "/")
      getdate = d(2) & "-" & d(1) & "-" & d(0)
   end if
end function

function getquote(str)

   getquote = join(split(str,"'")," ")

end function



Cordialement
Eric
LibreOffice Version: 5.2.7.2
OS Debian 9
Eric_03
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 31 Déc 2017 19:01

Re: [Résolu][Base] Importation csv

Messagepar Hubert Lambert » 08 Mars 2018 22:40

De mémoire (je n'ai pas d'ordi sous la main pour vérifier), il Il suffit de doubler l'apostrophe pour que ça passe.
Par exemple :
Code : Tout sélectionner   AgrandirRéduire
a(1) = replace(trim(line1(2)),"'","''")
AOOo 4.1.2 sur Win7
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 870
Inscrit le : 06 Avr 2016 08:26

Re: [Résolu][Base] Importation csv

Messagepar Eric_03 » 09 Mars 2018 17:26

Fonctionne parfaitement

Code plus court donc beaucoup plus élégant

Merci
Eric
LibreOffice Version: 5.2.7.2
OS Debian 9
Eric_03
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 31 Déc 2017 19:01


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 4 invité(s)