Небольшой личный проект: https://github.com/trdm/sqlquery (https://github.com/trdm/sqlquery) используется для изучения английского.
Выглядит так: https://raw.githubusercontent.com/trdm/sqlquery/main/Doc/Screenshot_178.png
Проблема сидит в void TextEdit::doSelTextFormat()
void TextEdit::doSelTextFormat()
{
if (!QFile::exists(m_ExePath)) {
return;
}
QString vSel = textCursor().selectedText();
if (vSel.isEmpty()) {
return;
}
//QFile vFile(m_ExePath);
QString vExeFile = "SqlFormatter.exe";
QString vSqlFile = "SqlFormatter.sql";
QString vSqlFileС = "SqlFormatterС.sql";
QString vSqlFile2 = "SqlFormatter2.sql";
QString vSqlFile2p = " /o:SqlFormatter2.sql";
QString vBatFile = "SqlFormatter.bat";
QStringList vList = m_ExePath.split("/");
QStringList vList0 = m_ExePath.split("/");
vList0.removeAt(vList.size()-1);
QString vFolder = vList0.join("/");
vFolder.append("/");
//vList[vList.size()-1] = vBatFile;
QString vPathBat = vFolder; vPathBat.append(vBatFile);
vList[vList.size()-1] = vSqlFile;
QString vPathTxt = vList.join("/");
QString vPathTxtС = vList.join("/");
vList[vList.size()-1] = vSqlFile2;
QString vPathTxt2 = vList.join("/");
vList.removeAt(vList.size()-1);
QString vPathFolder = vList.join("/");
writeToFile(vPathTxt, vSel);
writeToFile(vPathBat, QString("SqlFormatter ").append(vSqlFile).append(vSqlFile2p),false);
QStringList arguments;
arguments << vSqlFile << vSqlFile2p;
//SqlFormatter test*.sql /o:resultfile.sql
QProcess myProcess; //= new QProcess(this);
myProcess.setWorkingDirectory(vPathFolder);
myProcess.start(vExeFile, arguments);
myProcess.waitForFinished(3000);
// if (!myProcess.waitForFinished())
// return;
QProcess::ProcessError err = myProcess.error();
myProcess.close();
vSel = loadFromFile(vPathTxt2);
if (!vSel.isEmpty()) {
QTextCursor cur = textCursor();
setTextCursor(cur);
//cur.removeSelectedText();
//insertPlainText(vSel);
//cur.insertText(vSel);
cur.beginEditBlock();
//cur.movePosition(QTextCursor::End);
QStringList string_list = vSel.split('\n');
for (int i = 0; i < string_list.size(); i++){
cur.insertText(string_list.at(i));
if ((i + 1) < string_list.size()){
cur.insertBlock();
}
}
cur.endEditBlock();
}
//qDebug() << vPathProc;
}
При исполнении этого кода прога фризится секунд на 5-10 и/или выдает неправильные результаты.Для форматирования использую внешнюю утилиту из http://architectshack.com/PoorMansTSqlFormatter.ashx
ссыль на скачивание: http://architectshack.com/GetFile.aspx?Page=PoorMansTSqlFormatter&File=SqlFormatter.1.6.10.zip
Пожалуйста пните в нужном направлении. Функционал нужен :(
Предполагаю что SqlFormatter.exe ждет разблокировки файла с запросом? Но вроде как файло закрываю.
void TextEdit::writeToFile(QString &psPath, QString &psSrc, bool psUtf8)
{
QFile vSqlFile(psPath);
if (!vSqlFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
return;
}
QTextStream out(&vSqlFile);
if (psUtf8) {
out.setCodec("UTF-8");
}
out << psSrc /*<< "\n"*/;
out.flush();
vSqlFile.close();
}
Юзаю Qt4.8.7 + MSVC 9.0, Win 7
Небольшой личный проект:
Вы считаете, что разработанный Вами «язык», которым пишутся входные файлы для Вашей программы удобнее, чем промышленный язык SQL?
Чтоб ответить Вам по существу надо читать код Вашей программы, что при таком содержании делать никакого желания.
Напишите короткий тестовый пример и будем разбираться. Никаких внешних утилит быть не должно. Может в этой утилите и есть проблема.