Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
Мефодий   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.005 c
14-80676
Atrem
2002-02-10 18:16
2002.03.25
Как удалить Windows 2000 Professional


1-80602
Starkom
2002-03-11 13:34
2002.03.25
Проблема с TStringList.Duplicates в ЛистБоксе


1-80480
Lenidus
2002-03-08 00:53
2002.03.25
Как узнать что мышь вошла/вышла с компонента, если у этого компонента нет события OnMouseMove?


3-80434
blankalex
2002-02-27 12:24
2002.03.25
Ib_Util.dll


7-80711
Andrey196
2001-12-23 20:06
2002.03.25
Как программно поменять разрешение экрана





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский