Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2009, 09:27   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

боюсь, что большого прироста скорости Вы уже не добьётесь.

но вот, интересно. Если Вы запишете Ваши запросы в текстовый файлик (.sql) и выполните его (хотя бы из того же IBExpert'а) - какая будет скорость? (думаю, что для тестирования 5 тысяч записей будет вполне достаточно).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.08.2009, 13:15   #12
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от BARNEY Посмотреть сообщение
сделал ещё прямее

Код:
 try
     ProgrammMain.IBQ.SQL.Text:='insert into polis values ('''+drfiski.Quick.Fields[0].AsString+''''
     +','''+drfiski.Quick.Fields[1].AsString+''','''+drfiski.Quick.Fields[2].AsString+''','''+drfiski.Quick.Fields[3].AsString+''''
     +','''+drfiski.Quick.Fields[4].AsString+''','''+drfiski.Quick.Fields[5].AsString+''','''+drfiski.Quick.Fields[6].AsString+''''
     +','''+drfiski.Quick.Fields[7].AsString+''','''+drfiski.Quick.Fields[8].AsString+''','''+drfiski.Quick.Fields[9].AsString+''''
     +','''+drfiski.Quick.Fields[10].AsString+''','''+drfiski.Quick.Fields[11].AsString+''','''+drfiski.Quick.Fields[12].AsString+''''
     +','''+drfiski.Quick.Fields[13].AsString+''','''+drfiski.Quick.Fields[14].AsString+''','''+drfiski.Quick.Fields[15].AsString+''''
     +','''+drfiski.Quick.Fields[16].AsString+''','''+drfiski.Quick.Fields[17].AsString+''','''+drfiski.Quick.Fields[18].AsString+''''
     +','''+drfiski.Quick.Fields[19].AsString+''','''+drfiski.Quick.Fields[20].AsString+''','''+drfiski.Quick.Fields[21].AsString+''''
     +','''+drfiski.Quick.Fields[22].AsString+''','''+drfiski.Quick.Fields[23].AsString+''','''+drfiski.Quick.Fields[24].AsString+''''
     +','''+drfiski.Quick.Fields[25].AsString+''','''+drfiski.edit1.Text+''',1,'''+drfiski.Quick.Fields[26].AsString+''''
     +','''+drfiski.Quick.Fields[27].AsString+''',0)';
     ProgrammMain.IBQ.ExecQuery;
     except
     drfiski.memo1.Lines.Add(ProgrammMain.IBQ.SQL.Text);
     end;

     ii:=ii+1;
    drfiski.Quick.Next;
    Synchronize(progress);
    Application.ProcessMessages;
скорость + 20 записей... в сек... не того что я ожидал в скорости
это не прямее
это так же криво
пищи в гугле или любом другом дсотупном поисковике что-нить из этого "параметры в SQL запросе", "bind variables"
а то когда тебе пишешь на русском языке с примерами ты не понимаешь
soleil@mmc вне форума Ответить с цитированием
Старый 03.08.2009, 13:24   #13
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
боюсь, что большого прироста скорости Вы уже не добьётесь.

но вот, интересно. Если Вы запишете Ваши запросы в текстовый файлик (.sql) и выполните его (хотя бы из того же IBExpert'а) - какая будет скорость? (думаю, что для тестирования 5 тысяч записей будет вполне достаточно).
думаю, что такой файлик будет намного быстрее обрабатываться хотя бы потому что там нет переключения между интерфейсами
а в проге наверняка еще и неявные препейры

имхо грамотнее будет реализовать такой импорт через ХП - она ведь и так уже хранится в БД в скомпиленном виде и на строне прилады достаточно будет один раз ей сказать prepare и все
soleil@mmc вне форума Ответить с цитированием
Старый 03.08.2009, 13:54   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

soleil@mmc, в принципе я с Вами полностью согласен. Но, думаю, что основные затраты будут идти на передачу параметров (хоть в запрос, хоть в ХП) и собственно вызов функции вставки... хотя попробовать безусловно можно и нужно!

Да и если задача "одноразовая", то я бы предложил запустить это на ночь. и к утру база была бы залита...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.08.2009, 15:41   #15
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

если делаю

Код:
ProgrammMain.IBQ.SQL.Text:='insert into polis values (:p0,:p2,:p3,:p4,:p5,:p6,:p7,'
                +':p8,:p9,:p10,:p11,:p12,:p13,:p14,:p15,:p16,:p17,:p18,:p19,:p20,'
                +':p21,:p22,:p23,:p24,:p25,'''+drfiski.edit1.Text+''',1,:p26,:p27,0)';
while (not drfiski.Quick.Eof) do
  begin
   try
  ProgrammMain.IBQ.ParamByName('p0').Value:=drfiski.Quick.Fields[0].Value;
  ProgrammMain.IBQ.ParamByName('p1').Value:=drfiski.Quick.Fields[1].Value;
  ProgrammMain.IBQ.ParamByName('p2').Value:=drfiski.Quick.Fields[2].Value;
  ProgrammMain.IBQ.ParamByName('p3').Value:=drfiski.Quick.Fields[3].Value;
  ProgrammMain.IBQ.ParamByName('p4').Value:=drfiski.Quick.Fields[4].Value;
  ProgrammMain.IBQ.ParamByName('p5').Value:=drfiski.Quick.Fields[5].Value;
  ProgrammMain.IBQ.ParamByName('p6').Value:=drfiski.Quick.Fields[6].Value;
  ProgrammMain.IBQ.ParamByName('p7').Value:=drfiski.Quick.Fields[7].Value;
  ProgrammMain.IBQ.ParamByName('p8').Value:=drfiski.Quick.Fields[8].Value;
  ProgrammMain.IBQ.ParamByName('p9').Value:=drfiski.Quick.Fields[9].Value;
  ProgrammMain.IBQ.ParamByName('p10').Value:=drfiski.Quick.Fields[10].Value;
  ProgrammMain.IBQ.ParamByName('p11').Value:=drfiski.Quick.Fields[11].Value;
  ProgrammMain.IBQ.ParamByName('p12').Value:=drfiski.Quick.Fields[12].Value;
  ProgrammMain.IBQ.ParamByName('p13').Value:=drfiski.Quick.Fields[13].Value;
  ProgrammMain.IBQ.ParamByName('p14').Value:=drfiski.Quick.Fields[14].Value;
  ProgrammMain.IBQ.ParamByName('p15').Value:=drfiski.Quick.Fields[15].Value;
  ProgrammMain.IBQ.ParamByName('p16').Value:=drfiski.Quick.Fields[16].Value;
  ProgrammMain.IBQ.ParamByName('p17').Value:=drfiski.Quick.Fields[17].Value;
  ProgrammMain.IBQ.ParamByName('p18').Value:=drfiski.Quick.Fields[18].Value;
  ProgrammMain.IBQ.ParamByName('p19').Value:=drfiski.Quick.Fields[19].Value;
  ProgrammMain.IBQ.ParamByName('p20').Value:=drfiski.Quick.Fields[20].Value;
  ProgrammMain.IBQ.ParamByName('p21').Value:=drfiski.Quick.Fields[21].Value;
  ProgrammMain.IBQ.ParamByName('p22').Value:=drfiski.Quick.Fields[22].Value;
  ProgrammMain.IBQ.ParamByName('p23').Value:=drfiski.Quick.Fields[23].Value;
  ProgrammMain.IBQ.ParamByName('p24').Value:=drfiski.Quick.Fields[24].Value;
  ProgrammMain.IBQ.ParamByName('p25').Value:=drfiski.Quick.Fields[25].Value;
  ProgrammMain.IBQ.ParamByName('p26').Value:=drfiski.Quick.Fields[26].Value;
  ProgrammMain.IBQ.ParamByName('p27').Value:=drfiski.Quick.Fields[27].Value;
  ProgrammMain.IBQ.ExecQuery;
     except
     drfiski.memo1.Lines.Add(ProgrammMain.IBQ.SQL.Text);
     end;
 ii:=ii+1;
    drfiski.Quick.Next;
    Synchronize(progress);
    Application.ProcessMessages;
вылетает

' ' is not a valid integer value
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 03.08.2009, 15:55   #16
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от BARNEY Посмотреть сообщение
если делаю
вылетает

' ' is not a valid integer value
просто ты напутал с соответствием полей
по-хорошему, в инсерте нужно указывать список полей и только за ним значений, либо писать список значений в строгом соответствии с тем как оно хранится в БД (хотя это тоже под вопросом)
soleil@mmc вне форума Ответить с цитированием
Старый 03.08.2009, 16:01   #17
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

переписал как в примере советовали раньше

Код:
ProgrammMain.IBQ.SQL.Text:='insert into polis values (:p0,:p2,:p3,:p4,:p5,:p6,:p7,'
                +':p8,:p9,:p10,:p11,:p12,:p13,:p14,:p15,:p16,:p17,:p18,:p19,:p20,'
                +':p21,:p22,:p23,:p24,:p25,'''+drfiski.edit1.Text+''',1,:p26,:p27,0)';
while (not drfiski.Quick.Eof) do
  begin
   try
  ProgrammMain.IBQ.ParamByName('p0').Value:=drfiski.Quick.ParamByName('f0').Value;
  ProgrammMain.IBQ.ParamByName('p1').Value:=drfiski.Quick.ParamByName('f1').Value;
  ProgrammMain.IBQ.ParamByName('p2').Value:=drfiski.Quick.ParamByName('f2').Value;
  ProgrammMain.IBQ.ParamByName('p3').Value:=drfiski.Quick.ParamByName('f3').Value;
  ProgrammMain.IBQ.ParamByName('p4').Value:=drfiski.Quick.ParamByName('f4').Value;
  ProgrammMain.IBQ.ParamByName('p5').Value:=drfiski.Quick.ParamByName('f5').Value;
  ProgrammMain.IBQ.ParamByName('p6').Value:=drfiski.Quick.ParamByName('f6').Value;
  ProgrammMain.IBQ.ParamByName('p7').Value:=drfiski.Quick.ParamByName('f7').Value;
  ProgrammMain.IBQ.ParamByName('p8').Value:=drfiski.Quick.ParamByName('f8').Value;
  ProgrammMain.IBQ.ParamByName('p9').Value:=drfiski.Quick.ParamByName('f9').Value;
  ProgrammMain.IBQ.ParamByName('p10').Value:=drfiski.Quick.ParamByName('f10').Value;
  ProgrammMain.IBQ.ParamByName('p11').Value:=drfiski.Quick.ParamByName('f11').Value;
  ProgrammMain.IBQ.ParamByName('p12').Value:=drfiski.Quick.ParamByName('f12').Value;
  ProgrammMain.IBQ.ParamByName('p13').Value:=drfiski.Quick.ParamByName('f13').Value;
  ProgrammMain.IBQ.ParamByName('p14').Value:=drfiski.Quick.ParamByName('f14').Value;
  ProgrammMain.IBQ.ParamByName('p15').Value:=drfiski.Quick.ParamByName('f15').Value;
  ProgrammMain.IBQ.ParamByName('p16').Value:=drfiski.Quick.ParamByName('f16').Value;
  ProgrammMain.IBQ.ParamByName('p17').Value:=drfiski.Quick.ParamByName('f17').Value;
  ProgrammMain.IBQ.ParamByName('p18').Value:=drfiski.Quick.ParamByName('f18').Value;
  ProgrammMain.IBQ.ParamByName('p19').Value:=drfiski.Quick.ParamByName('f19').Value;
  ProgrammMain.IBQ.ParamByName('p20').Value:=drfiski.Quick.ParamByName('f20').Value;
  ProgrammMain.IBQ.ParamByName('p21').Value:=drfiski.Quick.ParamByName('f21').Value;
  ProgrammMain.IBQ.ParamByName('p22').Value:=drfiski.Quick.ParamByName('f22').Value;
  ProgrammMain.IBQ.ParamByName('p23').Value:=drfiski.Quick.ParamByName('f23').Value;
  ProgrammMain.IBQ.ParamByName('p24').Value:=drfiski.Quick.ParamByName('f24').Value;
  ProgrammMain.IBQ.ParamByName('p25').Value:=drfiski.Quick.ParamByName('f25').Value;
  ProgrammMain.IBQ.ParamByName('p26').Value:=drfiski.Quick.ParamByName('f26').Value;
  ProgrammMain.IBQ.ParamByName('p27').Value:=drfiski.Quick.ParamByName('f27').Value;
  ProgrammMain.IBQ.ExecQuery;
     except
     drfiski.memo1.Lines.Add(ProgrammMain.IBQ.SQL.Text);
     end;

     ii:=ii+1;
    drfiski.Quick.Next;
    Synchronize(progress);
    Application.ProcessMessages;
  end;
Ошибка таже....

А это как??

"в инсерте нужно указывать список полей и только за ним значений"

или вы предлагаете сделать

drfiski.Quick.ParamByName('f27').st ring ??
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 03.08.2009, 16:30   #18
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

вот так ты точно не промахнешься
Код:
insert into polis 
(f_00, f_01, ...., f_29)
values (:pf00, :pf01, ..., :pf29)
вообще-то, я так немного трезво взвесил и понял, что 1000 строк в сек вполне себе даже ничо скорость

Последний раз редактировалось soleil@mmc; 03.08.2009 в 16:33.
soleil@mmc вне форума Ответить с цитированием
Старый 03.08.2009, 16:34   #19
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

на
ProgrammMain.IBQ.ParamByName('p0'). Value

ругается

Empty query
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 03.08.2009, 16:56   #20
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

текст запроса?
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с запросом euronymous SQL, базы данных 12 18.03.2012 05:24
Помогите с запросом NATAHA Microsoft Office Access 2 08.05.2009 15:17
Помогите с запросом Айвенго Microsoft Office Access 3 08.05.2008 09:07
Помогите с запросом Blackmore БД в Delphi 3 07.05.2008 01:18
помогите с запросом 9-11 БД в Delphi 4 20.11.2006 10:04