Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.21;
Скачать: CL | DM;

Вниз

Как можно быстро програмно загрузить в базу 600 записей так как 600 раз такой код выполняетсся долго   Найти похожие ветки 

 
Alextov   (2002-02-07 19:39) [0]

Как можно быстро програмно загрузить в базу 600 записей
так как 600 раз такой код выполняетсся долго

Query1.Close;
Query1.SQL.Clear;
Query1.Add("insert into Table (field1,field2) values (value1,value2)");
Query1.ExecSql;

Хотелось бы как-то за 1 раз все загрузить и 1 раз закомитить.


 
Desdechado ©   (2002-02-07 20:11) [1]

сделай хранимую процедуру и запусти ее - будет быстро.
а если не знаешь заранее, что нужно вставлять, то ничего не поделаешь :))
а с транзакциями так:
database.starttransaction;
try
// твой код
database.commit;
except
database.rollback;
end;



 
Shaman_Naydak ©   (2002-02-07 20:20) [2]

ну в принципе, можно чуть-чуть поиграться
Написать так скажем:

Query1.SQL.Text:="insert into Table (field1,field2) values (:value1, :value2)";
Query1.Prepare
а дальше в цикле делаешь

Query1.ParamByName("value1").AsInteger:=213;
Query1.ParamByName("value2").AsInteger:=444;
Query1.ExecSQL;
или побыстрее, но менее читабельно
Query1.Params[0].AsInteger:=213;
Query1.Params[1].AsInteger:=444;
Query1.ExecSQL;

Но не факт, что сильно поможет :)


 
Дремучий ©   (2002-02-07 21:47) [3]

2 Alextov (07.02.02 19:39)
можно, только если все записи известны изначально
если записи грузяться из другой таблицы или запроса

Query1.Close;
Query1.SQL.Clear;
Query1.Add("insert into Table (field1,field2)")
Query1.Add("select field1,field2 from Table2 where ....");
Query1.ExecSql;

что-то вроде этого...
;)


 
tovSuhov ©   (2002-02-20 14:28) [4]

У меня получалось так:
var
cmd:string;
...
cmd:="begin ";
for i:=0 to ...
cmd:=cmd+"insert into Table (field1,field2) values (value1[i],value2[i]);";

cmd:=cmd+" end";
Query1.Close;
Query1.SQL.Clear;
Query1.Add(cmd);
Query1.ExecSql;

Единственное, есть ограничение на размер получившейся команды. Я, для скорости, отправлял по 70 команд в запросе...




 
REL_   (2002-02-20 14:41) [5]

Где у тебя хранятся эти 600 записей (ну, или где ты их формируешь), которые ты все сразу хочешь слить в таблицу.

Если они формируются в другой таблице, то можешь попробовать запрос вида: Insert into Table(приёмник) ---- Select(источник).


 
alextov   (2002-02-20 14:59) [6]

Записи хранятся в другой таблице но вариант типа
insert into Table (field1,field2) (select field1,field2 from Table2 where ....")
не проходит так как данные необходимо слегка модифицировать перед
копированием.
А вот тов.Сухов подал хорошую идею
Ща попробуем


 
amamed_3071 ©   (2002-02-20 15:19) [7]

Query1.Close;
Query1.SQL.Clear;


Query1.Add("insert into Table (field1,field2) values (value1,value2)");
Query1.Add("insert into Table (field1,field2) values (value3,value4)");
Query1.Add("insert into Table (field1,field2) values (value6,value6)");




Query1.ExecSql;



 
Awex ©   (2002-02-20 16:28) [8]

2amamed_3071

И так 600 записей ?


 
SergSuper   (2002-02-20 17:04) [9]

2 alextov
Глупо модифицировать данные, которые лежат на SQL сервере, через клиентскую часть. Наверняка это можно сделать одним запросом(уверен на 95%).



Страницы: 1 вся ветка

Текущий архив: 2002.03.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
14-67004
Beast
2002-02-07 16:49
2002.03.21
WebBrowser


1-66921
Michael C
2002-03-06 16:45
2002.03.21
То ли лыжи не едут...


1-66928
Алиса
2002-03-05 12:24
2002.03.21
Как проверить запущено ли приложение?


1-66820
Eco
2002-03-07 09:01
2002.03.21
Закрытие модального окна


4-67043
bobr
2002-01-21 17:08
2002.03.21
Знаю PID процесса как получить имя пользователя запустившего процесс