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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2009, 08:59   #1
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию Помогите с запросом

СУБД firebird 2.1

выбераю в одной базе запросом

Код:
select * from table
нужно встать эти данные в другую базу

Всё выбранное...

щас перегоняю по 1 записей через цикл...но это долго...

как вставить выбранные записи 1 запросом, в другую базу?
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 31.07.2009, 09:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пробуй так:
Код:
INSERT INTO table2
SELECT table.*
FROM table;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.07.2009, 09:46   #3
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

в другую базу ....

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

Цитата:
Сообщение от BARNEY Посмотреть сообщение
как вставить выбранные записи 1 запросом, в другую базу?
обе базы локальные?
1) отключить все триггеры на целевой таблице
2) отключить любое отображение переноса данных в интерфейсе проги (это если ты на морде показываешь грид с выбранными строками и по мере вставки записей его листаешь)
3) написать модуль экспорта/импорта через промежуточный файл любого приемлемого формата от .db/.dbf до родного ФИБ-овского

З.Ы.: использование всех пунктов как вместе, так и по отдельности
soleil@mmc вне форума Ответить с цитированием
Старый 31.07.2009, 13:33   #5
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

1) нету их
2) всё в отдельном потоке... на морде только условие except
3) из файла дольше...ибо чтение запись с винта.

660 000 записей в низ и 31 поле в ширину

11 минут... долго
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)

Последний раз редактировалось BARNEY; 31.07.2009 в 13:35.
BARNEY вне форума Ответить с цитированием
Старый 31.07.2009, 14:04   #6
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

базы пробовал и локальные и через сеть...

через сеть нагрузка на сеть 5% от 100 мегабит

Скорости это не добавило.... Сервак Ксеон 8 ядерный , 4 гига оперативки... Не ужели придел достигнут?
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 31.07.2009, 14:41   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от BARNEY Посмотреть сообщение
щас перегоняю по 1 записей через цикл...но это долго...
какие компоненты?
код в студию
soleil@mmc вне форума Ответить с цитированием
Старый 31.07.2009, 15:17   #8
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Quick - IBSQL
IBQ - ну это понятно

Код:
while (not drfiski.Quick.Eof) do
  begin
       sql:='';
       for i := 0 to 27 do
        begin
          s:=drfiski.Quick.Fields[i].AsString;
          if i=25 then  sql := sql +''''+s+''''+','+''+drfiski.edit1.Text+''+',1'
          else
          if i=27 then sql := sql +''''+s+''''+',0'
          else
          sql:=sql+''''+s+'''';

          if (i <> 27) then sql := sql + ',';
        end;
     try
     ProgrammMain.IBQ.SQL.Text:='insert into polis values ('+sql+')';
     ProgrammMain.IBQ.ExecQuery;
     except
     drfiski.memo1.Lines.Add(ProgrammMain.IBQ.SQL.Text);
     end;
     ii:=ii+1;
    drfiski.Quick.Next;
    Synchronize(progress);
    Application.ProcessMessages;
Добавил .... а то прогресс не видно...скорость не поменялась

Код:
procedure MyPotok.progress;
begin
drfiski.Label2.Caption:=IntToStr(ii);
drfiski.Gauge1.Progress:=ii;
end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 31.07.2009, 15:58   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

подумай и согласись, что это изврат чистой воды

Код:
for i := 0 to 27 do
        begin
          s:=drfiski.Quick.Fields[i].AsString;
          if i=25 then  sql := sql +''''+s+''''+','+''+drfiski.edit1.Text+''+',1'
          else
          if i=27 then sql := sql +''''+s+''''+',0'
          else
          sql:=sql+''''+s+'''';

          if (i <> 27) then sql := sql + ',';
        end;
(это был первый тормоз)
второй тормоз - сервак каждый твой запрос парсит
а нужно его (запрос) параметризовать

отсюда все твои тормоза
предлагаю переписать исходный запрос так чтобы все твои подмены уже были учтены в нем - т.е. передавай туда параметром это drfiski.edit1.Text и потом в цикле будешь делать только подстановку параметров из полей
поправить результирующий запрос чтобы ввести параметризацию по типу
Код:
 ProgrammMain.IBQ.SQL.Text:='insert into polis values (:p0, :p1, ...., :p31)';
  ProgrammMain.IBQ.ParamByName('p0').Value:=drfiski.Quick.FieldByName('f0').Value;
.....
  ProgrammMain.IBQ.ParamByName('p31').Value:=drfiski.Quick.FieldByName('f31').Value;

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

сделал ещё прямее

Код:
 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 записей... в сек... не того что я ожидал в скорости
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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