[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 !
Eric_03
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 31 déc. 2017 18:01

[Résolu][Base] Importation csv

Message par Eric_03 »


La modération vous 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/v ... p?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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Eric_03 le 05 mars 2018 14:14, modifié 2 fois.
Version: 6.2.3.2 (x64)
OS Windows 10
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9254
Inscription : 28 août 2010 08:45

Re: [Base] Importation csv

Message par micmac »

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.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Eric_03
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 31 déc. 2017 18:01

Re: [Base] Importation csv

Message par Eric_03 »

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
Version: 6.2.3.2 (x64)
OS Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Importation csv

Message par Dude »

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.
Eric_03
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 31 déc. 2017 18:01

Re: [Base] Importation csv

Message par Eric_03 »

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 modification par Eric_03 le 05 mars 2018 10:30, modifié 2 fois.
Version: 6.2.3.2 (x64)
OS Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Importation csv

Message par Dude »

Bis repetitae :
Dude a écrit :Pourquoi joindre un fichier compressé et pas directement un ODB ?
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Base] Importation csv

Message par Hubert Lambert »

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.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
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)
Eric_03
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 31 déc. 2017 18:01

Re: [Base] Importation csv

Message par Eric_03 »

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
Version: 6.2.3.2 (x64)
OS Windows 10
Eric_03
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 31 déc. 2017 18:01

Re: [Base] Importation csv

Message par Eric_03 »

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
Version: 6.2.3.2 (x64)
OS Windows 10
Eric_03
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 31 déc. 2017 18:01

Re: [Base] Importation csv

Message par Eric_03 »

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 vous 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.

Version: 6.2.3.2 (x64)
OS Windows 10
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

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

Message par Hubert Lambert »

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

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 ! 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Hubert Lambert le 08 mars 2018 16:23, modifié 1 fois.
AOOo 4.1.7 sur Win10
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)
Eric_03
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 31 déc. 2017 18:01

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

Message par Eric_03 »

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

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
Version: 6.2.3.2 (x64)
OS Windows 10
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

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

Message par Hubert Lambert »

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

a(1) = replace(trim(line1(2)),"'","''")
AOOo 4.1.7 sur Win10
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)
Eric_03
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 31 déc. 2017 18:01

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

Message par Eric_03 »

Fonctionne parfaitement

Code plus court donc beaucoup plus élégant

Merci
Eric
Version: 6.2.3.2 (x64)
OS Windows 10