Bonjour,

Je travaille sous Windows XP SP2 et Qt 4.5.1

Voilà mon problème: Je souhaite exécuter deux commandes DOS en pipe avec QProcess. Voici la commande complète:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
C:\\PostgreSQL\\8.4\\bin\\shp2pgsql.exe -dDI shapefile shape_import_table | C:\\PostgreSQL\\8.4\\bin\\psql.exe -d amsdb -U amsdb -p 5433
En gros ces commandes doivent importer le contenu d'un fichier shape dans une BD Postgresql. Tout est bon pour la connexion à la BD (d'ayeur c'est pour ça que je met ce sujet en dehors du sous-forum SGBD de ce forum).

J'ai vu la doc de QProcess et j'ai essayé d'appliquer. Je n'ai pas d'erreur de compilation mais mon programme se plante à l'exécution. Mon code est le 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
22
23
24
25
26
27
28
 
    cmd1 = new QProcess;
    cmd1->setProcessChannelMode(QProcess::ForwardedChannels);
    QString prg1("C:\\PostgreSQL\\8.4\\bin\\shp2pgsql.exe");
    QStringList args1;
    args1 << "-dDI";
    args1 << shapefile; //shapefile est une QString représentant le nom du fichier shape à importer à là BD
    args1 << "shape_import_table";
 
    cmd2 = new QProcess;
    cmd2->setProcessChannelMode(QProcess::ForwardedChannels);
    QString prg2("C:\\PostgreSQL\\8.4\\bin\\psql.exe");
    QStringList args2;
    args2 << "-d";
    args2 << "amsdb";
    args2 << "-U";
    args2 << "amsdb";
    args2 << "-p";
    args2 << "5433";
 
    cmd1->setStandardOutputProcess(cmd2);
    int res1 = cmd1->execute(prg1,args1);
    int res2 = cmd2->execute(prg2,args2);
    res = QString::number(res1) + QString::number(res2);
    QMessageBox::critical(0,"RES Process", res);
 
    cmd1->~QProcess();
    cmd2->~QProcess();
J'espère que quelqu'un ici a une idée