Главная страница
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.007 c
14-80688
mobcos
2002-02-08 21:53
2002.03.25
Господа программисты помогите!


14-80669
Shiza
2002-02-08 18:43
2002.03.25
Вирусы в Delphi


3-80407
fidget
2002-02-26 12:14
2002.03.25
Объединение 2х баз.


3-80408
tovSuhov
2002-02-25 14:49
2002.03.25
Еще вот такой вопрос...


6-80631
Delphimun
2002-01-07 11:39
2002.03.25
Как отослать почту без использования VCL?