Главная страница
    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, что неприемлемо как для пользователя, так и для моей совести.
Есть ли какие-нибудь предложения ? Может кто предложит другой алгоритм перезаписи.
Заранее благодарен.



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

Форум: "Базы";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.005 c
1-80534
asdf
2002-03-13 12:37
2002.03.25
Временная задержка


14-80679
Axel
2002-02-12 11:47
2002.03.25
DELPHI eBOOKs


4-80716
FLASH !
2002-01-25 14:28
2002.03.25
WINDOWS 9x РЕЕСТР !!!!


14-80663
Merlin
2002-02-11 13:00
2002.03.25
test


1-80544
yakshe
2002-03-07 23:54
2002.03.25
Удалить строку из TStringGrid





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский