Форум: "Базы";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
ВнизУскорение проверки на существование записи в таблице. Найти похожие ветки
← →
Карелин Артем © (2007-01-10 09:23) [0]Ситуация такая - в ексельных файлах есть под сотню тысяч записей. Каждую запись надо вытащить и проверить, есть ли соответствующая ей запись на сиквельном сервере.
Сейчас приблизительно следующее:const
QueryFindText:string = "select PolicyID from dbo.policy where dbo.policy.nvcPolicyNum = @num";for i:=1 to RowsCount do
begin
s:=Sheet.Cells.Item[i,1].Value;
ADOQuery1.SQL.Text:=StringReplace(QueryFindText,"@num",AnsiQuotedStr(s,""""),[]) ;
ADOQuery1.Open;
if ADOQuery1.IsEmpty then
Sheet.Cells.Item[i,1].Interior.ColorIndex:= 5;
ADOQuery1.Close;
end;
Прошу не пинать особо, с дельфи давно последний раз работал.
← →
Карелин Артем © (2007-01-10 09:25) [1]Вопрос следующий: как минимизировать время поиска нужной записи путем оптимизации дельфийского кода?
← →
ЮЮ © (2007-01-10 09:44) [2]ADOQuery1.SQL.Text := "select PolicyID from dbo.policy where dbo.policy.nvcPolicyNum = :num";
ADOQuery1.Prepare;
for i:=1 to RowsCount do
begin
s:=Sheet.Cells.Item[i,1].Value;
ADOQuery1.Close;
ADOQuery1.Parameters[0].Value := s;
ADOQuery1.Open;
if ADOQuery1.IsEmpty then
Sheet.Cells.Item[i,1].Interior.ColorIndex:= 5;
end;
← →
Ega23 © (2007-01-10 09:45) [3]Использовать параметры; запрос "препарировать"; сам запрос переписать на exists (хотя это спорное); TADOQuery заменить на TADODataSet.
Это что сходу в глаза бросилось.
Также попробуй оценить время выполнения каждой из команд, увидишь, где потери больше всего.
← →
Виталий Панасенко © (2007-01-10 10:01) [4]А если книмгу Excel Открыть как таблицу, а не работаь через OLE ? Тоже АДО используя ?
← →
stone © (2007-01-10 10:27) [5]
> Карелин Артем © (10.01.07 09:23)
> Ситуация такая - в ексельных файлах есть под сотню тысяч
> записей.
хмм... мне всегда казалось, что эксель хранит чуть более 65 тыс.
> Каждую запись надо вытащить и проверить, есть ли соответствующая
> ей запись на сиквельном сервере.
Вот что вещает на эту тему BOLSELECT * FROM OpenDataSource( "Microsoft.Jet.OLEDB.4.0",
"Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0")...xactions
преобразовать этот запрос с использованием exists, полагаю, труда не составит
На дельфийский код уже ничего не остается, разве что Open :)
← →
Карелин Артем © (2007-01-10 10:49) [6]
> хмм... мне всегда казалось, что эксель хранит чуть более
> 65 тыс.
> stone © (10.01.07 10:27) [5]
в ексельных файлах.
В дельфийском коде еще раскрашивать ячейки надо будет. И еще много чего. Это упрощенные наброски приведены.
Хотя идея сама хороша
← →
evvcom © (2007-01-10 10:54) [7]> [5] stone © (10.01.07 10:27)
> что эксель хранит чуть более 65 тыс.
чуть - это еще полтыщи, а точнее 536 :)
Итого 65536 = 2^16, но это на лист, а на нескольких может и больше, а если как у автора "в ексельных файлах", то количество ограничивается только размерами памяти и производительностью компа :)
> [0] Карелин Артем © (10.01.07 09:23)
Я BOL не читал, но, видимо, в [5] лучший совет даден. А так по поводу того, как сделано в [0], кроме сказанного про параметры и Prepare, могу добавить, что на OLE-шном построчном чтении тоже теряется много времени. Есть вариант чтения/записи данных через VarArray сразу всего диапазона. И даже если необходимо в цикле читать разные диапазоны и прочее, и время опять же хотелось бы сократить, можно использовать при обращении к COM-объекту способ раннего связывания, а не позднего.
← →
Anatoly Podgoretsky © (2007-01-10 12:58) [8]> stone (10.01.2007 10:27:05) [5]
> хмм... мне всегда казалось, что эксель хранит чуть более 65 тыс.
А версия Экселя не озвучено, а без этого это только предположение.
← →
Sergey Masloff (2007-01-10 22:57) [9]Я бы во временную таблицу согнал и закрытым джойном соединил. Возможно суммарно будет быстрее чем соединение с внешней таблицей в самом екселе. Ячейки я б тоже на сервере красил. Ну в смысле в резалтсете признак каким цветом красить а на гриде кодик в пару строчек универсальной раскраски.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.045 c