Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];




Вниз

Как можно быстро програмно загрузить в базу 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%).




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.021 c
3-66804           AAAPLE                2002-02-22 14:17  2002.03.21  
Записи в BD


14-66970          Anics                 2002-02-06 08:51  2002.03.21  
Кто знает как это сделать ?


3-66729           Demon ltd             2002-02-20 17:19  2002.03.21  
работа с сортировкой в dbgreed е


4-67056           neodiX                2001-12-18 01:16  2002.03.21  
Mozno li imeja izobrazenie Desktop a v TmemoryStream, opiat otabrazit ego na desktop?


6-66939           Muxec                 2002-01-03 20:31  2002.03.21  
Internet components