[solved]MySQL DB-Dump mit QProcess

Alles rund um die Programmierung mit Qt
Antworten
pixHub
Beiträge: 10
Registriert: 14. April 2006 12:53

[solved]MySQL DB-Dump mit QProcess

Beitrag von pixHub »

Hallo,

angelehnt an http://www.qtforum.de/forum/viewtopic.p ... ut&start=0

habe ich versucht den output von mysqldump in eine Datei zu schreiben.

Code: Alles auswählen

if (!file.open(QIODevice::WriteOnly ) )
	       return;
   QDataStream outfile(&file);   
   QStringList output;
   QProcess *process = new QProcess();
   QString cmd= "/usr/local/mysql/bin/mysqldump";
   QStringList args;

   args << " --single-transaction DB -uuser -ppasswd -h host";
   std::cout<<"try to open: "<<cmd.toStdString()<<std::endl;
   process->start(cmd, args);

   if (!process->waitForStarted() )
      std::cout<<"process couldn't get opened"<<std::endl;

   // wait for finishing of the process
   process->waitForFinished();
   QTextStream *txt_stream = new QTextStream(process);

   while(!txt_stream->atEnd() )
   {
      std::cout<<"read output: ";
      QString tmp_str = txt_stream->readLine();
      output.append(tmp_str);
      std::cout<<tmp_str.toStdString()<<std::endl;

      if(txt_stream->atEnd() )
      {
         process->close();
         std::cout<<"process finished: "<<std::endl;
         outfile << output;     
      }
   }
Es kommt aber nur ein Rumpf (10 Zeilen) vom Dump an.

Muss ich da noch irgendwo zwischenpuffern?
Zuletzt geändert von pixHub am 18. März 2010 12:59, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: MySQL DB-Dump mit QProcess

Beitrag von Christian81 »

pixHub hat geschrieben: Muss ich da noch irgendwo zwischenpuffern?
Könnte schon sein. Ausprobieren würde ich sagen. QProcess/QIOevice hat ja genug Signals welche die Daten liefern bzw. anzeigen dass Daten vorliegen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
pixHub
Beiträge: 10
Registriert: 14. April 2006 12:53

Beitrag von pixHub »

ich hab den Fehler gefunden!
Meine Argumentliste zum Programm war nicht i.O. .
mit:

Code: Alles auswählen

argv << "$Datenbank"<< "-u$user"<< "-p$password"<< "-h$host";
funktioniert es.

Hilfreich ist

Code: Alles auswählen

myprocess->readAllStandardError();
So sieht man daß der Aufruf :

Code: Alles auswählen

args << " --single-transaction DB -uuser -ppasswd -h host";
ein "Access denied!" wirft.
Antworten