Форум: "Базы";
Текущий архив: 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%).
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c