Russian Qt Forum

Qt => Базы данных => Тема начата: smilik от Февраль 19, 2015, 10:13



Название: медленно работает программа при подключении к удаленному серверу
Отправлено: smilik от Февраль 19, 2015, 10:13
Доброго времени cуток!
Может быть вы подскажите в чем может быть проблема
Имеется Microsoft SQL Server 2005 и прога-клиент, написанная на Qt.
При подключении на локальный сервер, установленный на данном компьютере прога летает, а когда подключаешься к серверу по сети прога ужасно тормозит. В чем может быть проблема???


Название: Re: медленно работает программа при подключении к удаленному серверу
Отправлено: gil9red от Февраль 19, 2015, 10:16
Без кода сложно сказать будет в чем проблема :)


Название: Re: медленно работает программа при подключении к удаленному серверу
Отправлено: smilik от Февраль 19, 2015, 11:43
Код
C++ (Qt)
#include <QtCore/QDebug>
#include <QtCore/QVariant>
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QDateTime>
 
#include "qdbftable.h"
#include "qdbfrecord.h"
#include "qdbffield.h"
 
 
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
 
   QSqlDatabase db;
   db = QSqlDatabase::addDatabase("QODBC");
   db.setDatabaseName("DRIVER={SQL Server Native Client 10.0};SERVER=SRVSQL1;Database=smeta;Trusted_Connection=Yes;");
   db.open();
 
   QSqlQuery q;
   q.exec("select Code, Name, Cat, Level, Price, DATEBEG, DATEEND from P06");
 
   qDebug() << QDateTime::currentDateTime().toString("hh:mm:ss");
 
   QDbf::QDbfTable table;
 
   if (!table.open("C:/DBF/P06.dbf", QDbf::QDbfTable::ReadWrite)) {
       qDebug() << "file open error";
       return a.exec();
   }
 
   table.setCodepage(QDbf::QDbfTable::IBM866);
   while(q.next())
   {
       QDbf::QDbfRecord rec = table.record();
 
 
       rec.setValue(0, q.value(0));
       rec.setValue(1, q.value(1));
       rec.setValue(2, q.value(2));
       rec.setValue(3, q.value(3));
       rec.setValue(4, q.value(4));
       rec.setValue(5, q.value(5));
       rec.setValue(6, q.value(6));
 
       table.addRecord(rec);
   }
 
   table.close();
 
   qDebug() << QDateTime::currentDateTime().toString("hh:mm:ss");
 
   db.close();
 
   qDebug() << "End...";
 
   return a.exec();
}
 

Вот код записи таблицы P06 в dbf, там порядка 170.000 записей ... когда запускаешь у себя на сервере выгружается меньше чем за 1 минуту,
а через удаленный сервер - 40 минут  :(


Название: Re: медленно работает программа при подключении к удаленному серверу
Отправлено: Пантер от Февраль 19, 2015, 11:45
Сетка тормозит, скорее всего.


Название: Re: медленно работает программа при подключении к удаленному серверу
Отправлено: Пантер от Февраль 19, 2015, 11:49
В свое время приходилось работать dbf базой. Сначала написал свою реализацию чтения этого формата файла, но потом захотелось sql и я сделал все удобнее и проще - написал прогу, которая перегоняла данные в Postgres и уже с ним работал. Было достаточно удобно.


Название: Re: медленно работает программа при подключении к удаленному серверу
Отправлено: smilik от Февраль 24, 2015, 10:22
Решилось добавление свойства setForwardOnly(true) ... Стала выгружаться за 20 сек по сети)))
И вот такой тогда вопрос, как же быть с QSqlQueryModel или QSqlTableModel??Там такое свойство не поставишь... У меня при отображении данных по сети также притормаживает(


Название: Re: медленно работает программа при подключении к удаленному серверу
Отправлено: panAlexey от Февраль 24, 2015, 19:24
медленно работает программа..

почему никто не предложил воспользоваться профайлером?