Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема со скоростью [D7, MS Access]


Страницы:   1 2

Бисовецкий Андрей ©   (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]

Попробовать переделать на запрос с параметрами. Хотя для аксеса это возможно и не столь актуально.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо