Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.25;
Скачать: CL | DM;

Вниз

Алгоритм для редактирования данных   Найти похожие ветки 

 
Мефодий   (2002-02-25 12:20) [0]

Есть dbf таблица с документами (назовем ее MainTable). Уникальность документа определяется датой и номером. Документ может содержать от нескольких записей до нескольких тысяч. Нужно обеспечить пользователю возможность внесения изменений в любой документ. Под изменением имеется в виду возможность удаления записи, добавления новой или редактирование существующей записи. Причем решение о том, записыать в базу данных внесенные изменения или нет, пользователь дожен иметь возможность принимать в конце сеанса редактирования.
В любом случае, как я понимаю, нужно этот документ переписать во временный файл (назовем ее TempTable), дать возможность пользователю делать что хочет и затем переписать все в основную таблицу. Весь вопрос в том, как переписывать в основную таблицу измененный документ. Есть два варианта:
1. В MainTable стереть этот документ и затем целиком переписать его из TempTable. Вариант хорош простотой и быстротой исполнения. Но очень большой минус - таблица заполняется удаленными записями и увеличивается в размерах. Поэтому требуется частая упаковка.
2. В MainTable стирать, добавлять и изменять записи только "по факту".
Я выбрал 2-й вариант и реализвал его так:
- в MainTable ставлю фильтр по номеру и дате документа
- переписываю его в TempTable
- даю возможность пользователю вносить изменения и подтвердить их запись в базу данных
- ищу записи, удаленные в TempTable. Для этого каждую запись MainTable проверяю на наличие в TempTable. Если ее там нет, значит удаляю из MainTable
- по каждой записи TempTable сканирую все записи MainTable. Если записи в MainTable нет, значит ее туда добавляю, если изменена - обновляю.
Во втором варианте все хорошо с размером файла, но очень плохо с быстродействием. Ведь приходится выполнять 2*m*n проверок(m и n -число записей документа в MainTable и TempTable соответственно) . При тысяче записей на документ это время исчисляется минутами даже у моего Pentium III с его 933 MH, что неприемлемо как для пользователя, так и для моей совести.
Есть ли какие-нибудь предложения ? Может кто предложит другой алгоритм перезаписи.
Заранее благодарен.


 
Корвин ©   (2002-02-26 08:56) [1]

>>- по каждой записи TempTable сканирую все записи MainTable. Если записи в MainTable нет, значит ее туда добавляю, если изменена - обновляю.

Попробуй сделать индекс по дате и номеру в MainTable и всесто сканирования всех записей использовать Locate



Страницы: 1 вся ветка

Текущий архив: 2002.03.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
3-80398
Hawk2
2002-02-25 12:51
2002.03.25
Помогите с ADO.


3-80387
HDD
2002-02-26 00:27
2002.03.25
Подскажите?


6-80652
star
2002-01-05 16:44
2002.03.25
Вопрос к хакерам, часть вторая ...


1-80503
Vladimir K.
2002-03-09 03:25
2002.03.25
Подвисание формы во время выполнения цикла...(#2) RE2ALL


7-80710
Sour
2001-12-23 20:35
2002.03.25
Объединение файлов