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

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

Обновление по индексу таблицы Paradox [D5, Paradox]


Страницы:   1 2 3

Sam Stialy ©   (2003-04-02 10:35:00) 

Сталкнулся с такой проблемой
Есть таблица у которой одно из полей которое служит признаком обработана запись или нет(если нет то поле пусто).
Запускаю цикл по необработанным записям и проверяю условие обработки и обновляю запись.
Цикл обрабатывает только первую запись!!!
В чем может быть дело?


Sam Stialy   (2003-04-02 17:31:00) [1]

Table1.Data = Table2.Data
AND
Table1.Number = Table2.Number
AND
Table1.IDSuplier = Table2.IDSuplier

Data - дата
Number - строка(10)
IDSuplier - страка(10) - не номер, а некий идентификатор



Соловьев   (2003-04-02 16:48:00) [2]

опиши эти условия


Sam Stialy   (2003-04-02 16:45:00) [3]

это задано в <condition1> и <condition2>


Соловьев   (2003-04-02 16:40:00) [4]


> записи table2 можно однозначно определить запись Table1.

как?


Sam Stialy   (2003-04-02 16:33:00) [5]

Тогда да, связаны


Соловьев   (2003-04-02 16:24:00) [6]


> записи table2 можно однозначно определить запись Table1.

а ты говоришь не связаны...


Sam Stialy   (2003-04-02 16:21:00) [7]

А их и будет разные, т.е. не всем записям в Table1 соотвествует записи Table2.
Но по записи table2 можно однозначно определить запись Table1.


Соловьев   (2003-04-02 16:19:00) [8]


> В том то и одна из проблем, что ни как :(

????
а если будет разное колличество записей?


Mike Kouzmine   (2003-04-02 16:17:00) [9]

to Соловьев ©
Если файл серверные базы, то пример:
таблица - 600К записей (120 Мб), обновление 1 поля с условием Поле1 = "XXX" (поле в этой же таблице) SQL примерно 40 мин, перебором примерно 15 мин. + прогресс бар + можно прервать + соответственно нормально отрисовывается все (нет ощущения подвисания)


Sam Stialy   (2003-04-02 16:15:00) [10]

В том то и одна из проблем, что ни как :(
Наследие старых времен.


Соловьев   (2003-04-02 16:08:00) [11]

как связаны Table1 и Table2?


Mike Kouzmine   (2003-04-02 16:08:00) [12]

А поробуй в старом варианте после Cancel поставить Next. Может у тебя случается Exception, то бесконечный цикл.
Или, возможно, после post - refresh? Хотя это плохо. Запись и без него должна уходить.


Sam Stialy   (2003-04-02 16:05:00) [13]

Sorry, опечатался я

в подзапросе Table2

UPDATE Table1 refID =
(
SELECT ID FROM Table2WHERE <condition1> and <condition2>
)
WHERE <condition3> AND RefID is NULL


Соловьев   (2003-04-02 16:00:00) [14]


UPDATE Table1 refID = ID
WHERE <condition3> AND RefID is NULL and <condition1> and <condition2>

а так?


Sam Stialy   (2003-04-02 15:56:00) [15]

1. Решил воспользоваться советом много уважаемого общества и использовать SQL запрос, как бы все просто
UPDATE Table1 refID =
(
SELECT ID FROM Table1
WHERE <condition1> and <condition2>
)
WHERE <condition3> AND RefID is NULL
, но ...
При этом только на тестовой БД всего с 20K записями, на использование SQL получил увеличение времени примерно на 250%
:(, хотя общее время не значительно.

2. Спасибо Mike, но не получиться - атрибут был введен только для эксперимента - реально он расчитывается на основании другой Таблицы


Mike Kouzmine   (2003-04-02 15:42:00) [16]

А нельзя так? Изменить индекс Штамп + Аттрибуте
Table1.SetRange(["","2"], ["","2"]);
while not Table1.Eof do
begin // Перебор записей в текущем куросре таблицы
Inc(iUpdate); // Счетчик просмотренных записей (?)
try
Table1.Edit;
Table1.FieldByName("Stamp").AsInteger := 1;
Table1.Post;
except
Table1.Cancel;
Table1.Next;
end;
// Если атрибут у записи не "2", переходим к след.записи
// Возврат к началу цикла
end;


Anatoly Podgoretsky   (2003-04-02 14:05:00) [17]

Убери Table1.SetRange([""], [""]) это какое то страшное выражение, правда гарантировано твоя программа повиснет.


Smashich   (2003-04-02 13:55:00) [18]

>Sam Stialy (02.04.03 13:41)
>Условие получается выборкой из БД в которой примерно 1.3M записей. И найти по ключу примерно быстрее, и намного, чем через SQL запрос

используй SQL и НИИ мозги!


Ильич   (2003-04-02 13:52:00) [19]

>Sam Stialy (02.04.03 13:41)
>Условие получается выборкой из БД в которой примерно 1.3M записей. И найти по ключу примерно быстрее, и намного, чем через SQL запрос

Неужели ? В самом деле ? И проверял ? И несколько раз ?
Эх, скажи спасибо, что нет здесь ни Джонмена, ни Александра, ни других Мастеров - они б тебя на молекулы разъяли !

Сканированием быстрее чем запросом ! Это надо выбить на мраморе и повесить в Школе Для Самоуверенных Дилетантов


Sam Stialy   (2003-04-02 13:41:00) [20]

Увы нет, нет и нет
Конечно можно сделасть запросом, но есть одно НО, которое и делает в данном случае невозмоность пременения SQL.
Условие получается выборкой из БД в которой примерно 1.3M записей. И найти по ключу примерно быстрее, и намного, чем через SQL запрос :(.



Страницы:   1 2 3

Наверх

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