IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

4D Discussion :

Lancer process externe


Sujet :

4D

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Par défaut Lancer process externe
    Bonjour,
    j'ai un petit problème avec la commande Lancer Process externe en 4D 2004.
    Je veux effectuer la sauvegarde du base Postgres avec l'utilitaire pgdump, mais il semble que les paramètres ne passent pas dans la commande.
    Si j'execute la commande dans l'invite de commande ça fonctionne sans problème.
    La code est le suivant $database est un ligne récupérée dans un tableau.
    C_BLOB($in;$out)
    $in:=""
    $out:=""
    $pg_dumpall:="\""+Dossier systeme(16)+"PostgreSQL"+<>SepPath+"8.2"+<>SepPath+"bin"+<>SepPath+"pg_dump.exe\" "
    $dossier_sauv:=Selectionner dossier
    Si (OK=1)
    $commande:=$pg_dumpall+$database+" --format=c --blobs --user=postgr"+"es > \""+$dossier_sauv+$database+"\""
    LANCER PROCESS EXTERNE($commande;$in;$out)
    Fin de si

    voila, si quelqu'un a une idée...

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Par défaut
    Peut-être est-ce parce que to chemin d'accès, tel que récupéré via <Sélectionner dossier> n'est pas au format POSIX ?

    Pour tester, fait le test en mettant dans $dossier_sauv le chemin POSIX hard codé (genre "/Users/bibi/...etc...")

    Thibaud

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Par défaut
    bonjour,
    merci pour votre réponse.
    J'ai oublié de préciser une chose dans mon premier poste, il s'agit d'un chemin d'accès sous windows.
    Pour la version Mac j'ai utilisé un plugin que j'avais fait en version 2003 pour executer les commandes shell.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    359
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 359
    Par défaut
    Bonjour,

    Essaye en typant les variables $in et $out en TEXTE, sauf si tu reçois plus de 32000 octets dans $out.

    Peux-tu nous donner la ligne de commande que tu passes dans le Terminal ou Invite de commande et qui fonctionne ?

    Quelle est l'erreur retournée si tu utilises le 4ème paramètre de la commande LANCER PROCESS EXTERNE : $error ?

    Peux-tu essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    C_ENTIER LONG(<>plateforme;<>systeme;<>machine;<>langue)
    C_ALPHA(2;<>SepPath)
    PROPRIETES PLATE FORME(<>plateforme;<>systeme;<>machine;<>langue)
    Si (<>plateforme=Windows )
    	<>SepPath:="\\"
    Sinon 
    	<>SepPath:=":"
    Fin de si 
     
    C_TEXTE($in;$out;$error)
    $in:=""
    $out:=""
    $pg_dumpall:=Dossier systeme(16)+"PostgreSQL"+<>SepPath+"82"+<>SepPath+"bin"+<>SepPath+"pg_dump.exe"
    $dossier_sauv:=Selectionner dossier
    Si (OK=1)
    	$commande:=$pg_dumpall+$database+" --format=c --blobs --user=postgr"+"es > "+$dossier_sauv+$database
    	LANCER PROCESS EXTERNE($commande;$in;$out;$error)
    Fin de si
    A+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Par défaut
    Je vais essayer ça je vous tiens au courant, merci.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Par défaut
    voici l'erreur renvoyé par $error
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $error=pg_dump: too many command-line arguments (first is ">")
    Try "pg_dump --help" for more information.
    voici la commande qui fonctionne dans l'invite de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C:\Program Files\PostgreSQL\8.2\bin\pg_dump.exe" nom_de_la_base --format=c --blobs --user=postgres > "C:\Documents and Settings\utilisateur\Bureau\nom_de_fichier"
    Il semble que ce soit la destination du fichier qui pause problème >

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    359
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 359
    Par défaut
    Je ne connais pas du tout Postgre mais j'essaye de cherche pourquoi ça ne marche pas...

    Je lis dans la Documentation PostgreSQL 7.2 : pg_dump que "Les formes d'options longues ne sont disponibles que sur certaines plateformes.".
    Et je ne trouve pas d'option --user mais bien -S username, --superuser=username.

    As-tu essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $quote:=Caractere(Guillemets )
    Si (OK=1)
    	$commande:=$pg_dumpall+$database
    	$commande:=$commande+" -F=c -b -S=postgres > "
    	$commande:=$commande+$quote+$dossier_sauv+$database+$quote
    	LANCER PROCESS EXTERNE($commande;$in;$out;$error)
    Fin de si

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Par défaut
    merci pour vos recherches.
    Je pense approcher de la solution avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    		C_ENTIER LONG(<>plateforme;<>systeme;<>machine;<>langue)
    		C_ALPHA(2;<>SepPath)
    		PROPRIETES PLATE FORME(<>plateforme;<>systeme;<>machine;<>langue)
    		Si (<>plateforme=Windows )
    			<>SepPath:="\\"
    		Sinon 
    			<>SepPath:=":"
    		Fin de si 
     
    		C_TEXTE($in;$error)
    		C_BLOB($out)
    		$in:=""
     
    		$pg_dumpall:=Dossier systeme(16)+"PostgreSQL"+<>SepPath+"8.2"+<>SepPath+"bin"+<>SepPath+"pg_dump.exe"
    		$dossier_sauv:=Selectionner dossier
     
    		Si (OK=1)
    			$commande:="\""+$pg_dumpall+"\" "+$database+" --format=c --blobs --user=postgres"
    			LANCER PROCESS EXTERNE($commande;$in;$out;$error)
    			BLOB VERS DOCUMENT($dossier_sauv+$database;$out)  `on enregistre sur le disque
    		Fin de si
    J'envoie le résultat de la commande dans le blob et j'enregistre ensuite le blob dans un fichier.
    Reste que l'execution de cette commande m'ouvre l'invite de commande ce que je préfère éviter et que l'utilisation du format c compresser plante l'invite de commande. Avec le format standard ou t (tar) ça ne pause pas de problème. Enfin il ne s'agit plus vraiment de problème 4D à ce niveau.
    Encore merci.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Par défaut
    C'est bon ça fonctionne avec le paramètre --format=t
    Je m'attaque maintenant à la restauration de base avec pg_restore.exe

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Process] Lancer programme externe dans form
    Par goddet dans le forum C#
    Réponses: 24
    Dernier message: 11/12/2019, 14h32
  2. difficultés avec "lancer process externe"
    Par homech dans le forum 4D
    Réponses: 1
    Dernier message: 22/07/2009, 15h50
  3. Lancer application externe - Fixer une popup
    Par shiryuseiya dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 09/07/2007, 12h00
  4. Lancer un process externe
    Par Nico28 dans le forum MFC
    Réponses: 2
    Dernier message: 17/04/2007, 11h14
  5. lancer application externe
    Par dmalik dans le forum Général Python
    Réponses: 1
    Dernier message: 28/11/2005, 16h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo