![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема со скоростью [D7, MS Access]
Бисовецкий Андрей © (2009-08-07 13:58:00)Привет всем, появилась серьезная проблема со скоростью выполнения запроса скл к базе данных MS ACCESS. Есть файл с запросами типа INSERT. Я читаю каждый запрос с новой строчки и сходу выполняю, т.к. только так и умею. 3800 запросов выполняются примерно секунд 47. Аналогичная конструкция только написана на Бэйсике делает эти операции за 25 сек. Но мне нужно именно на Делфи. Ниже выставляю код программы, а если кому надо то могу переслать и файл с запросами
Прога:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
f: TextFile;
tmp: String;
ADOQuery1: TADOQuery;
t: TDateTime;
begin
ADOQuery1 := TADOQuery.Create(self);
AssignFile(f, '1');
ReSet(f);
ADOQuery1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Other\Проэкты\tmp\Andrey\db.mdb;Persist Security Info=False';
t := Now();
while not EOF(f) do
begin
ReadLn(f, tmp);
Delete(tmp, 1, 1);
Delete(tmp, Length(tmp) - 3, 4);
ADOQuery1.SQL.Add(tmp);
ADOQuery1.ExecSQL;
ADOQuery1.SQL.Clear;
end;
CloseFile(f);
ADOQuery1.ExecSQL;
ShowMessage(FormatDateTime('hh.mm.ss', Now() - t));
ADOQuery1.Active := False;
ADOQuery1.Free;
end;
end.
И вот примерное содержимое файла:
"INSERT INTO price(preparat, cena, proisv, upak, srok, kod_tov, tam_cena, data_pr, post) VALUES('5-НОК; ТАБЛ П/О 50МГ N50', '19,91','SANDOZ','1','1,13','21','22,30','07.08.2009','Фарм-Сервіс');;;"
"INSERT INTO price(preparat, cena, proisv, upak, srok, kod_tov, tam_cena, data_pr, post) VALUES('5-ФТОРУРАЦИЛ; Р-Р Д/ИН 500МГ 10МЛ №1', '63','EBEWE','1','7,10','14193','0,00','07.08.2009','Фарм-Сервіс');;;"
"INSERT INTO price(preparat, cena, proisv, upak, srok, kod_tov, tam_cena, data_pr, post) VALUES('5-ФТОРУРАЦИЛ; Р-Р Д/ИН 500МГ 10МЛ №5', '348,67','EBEWE','1','10,10','13666','350,41','07.08.2009','Фарм-Сервіс');;;"
"INSERT INTO price(preparat, cena, proisv, upak, srok, kod_tov, tam_cena, data_pr, post) VALUES('L-ЛИЗИНА ЭСЦИНАТ; Р-Р Д/ИН 0,1% 5МЛ №10', '75,85','КМП АРТЕРИУМ','20','4,11','3742','85,00','07.08.2009','Фарм-Сервіс');;;"
Каждый запрос с новой строчки.
Жду помощи старейшин. Оч. уж долго сам мучался.
D2009 (желательно), Д7-тоже есть
sniknik (2009-08-07 16:56:00) [21]> И вроде бы сам Акцесс работает через свои средства, JET это для внешнего мира. Не буду настаивать, если это не так.
легко проверяется, заходишь в access (программу), набиваешь запрос к несуществующей таблице, выполняешь и смотришь от кого ошибка...
Anatoly Podgoretsky (2009-08-07 16:08:00) [22]> sniknik (07.08.2009 15:46:07) [7]
И вроде бы сам Акцесс работает через свои средства, JET это для внешнего мира. Не буду настаивать, если это не так.
sniknik (2009-08-07 15:46:00) [23]> а если кому надо то могу переслать и файл с запросами
перешли, вечером попробую сколько получится.
а вообще оптимально было бы привести файл к CSV формату, тогда бы это вставлялось одной командой, около секунды... (скорее в меньшую сторону чем в большую)
> акцес вроде через него работает
вранье. он не может, т.к. сам ODBC работает через jet.
MsGuns (2009-08-07 14:56:00) [24]ODBC вроде шустрее (акцес вроде через него работает)
Виталий Панасенко (2009-08-07 14:54:00) [25]Попробуй вместо кверика ADOCommand. Ты ж только вставляешь данные. И прочитай файл одним махом в TStringList например, на больших объемах заметно прибавление скорости
Бисовецкий Андрей (2009-08-07 14:08:00) [26]и база та же
Бисовецкий Андрей (2009-08-07 14:08:00) [27]файл один и тот же, мне кажется что запрос с параметрами ничего не изменит
Sergey13 (2009-08-07 14:05:00) [28]А бейсиковская программа оперирует с тем же файлом БД? Если БД разные то все ли индексы одинаковые?
Sergey13 (2009-08-07 14:03:00) [29]Попробовать переделать на запрос с параметрами. Хотя для аксеса это возможно и не столь актуально.