Форум: "Базы";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
ВнизВставка записей в TDBF Найти похожие ветки
← →
Yamaha (2004-01-15 09:24) [0]Здравствуйте. У меня такая проблема. Есть DBF файл с которым я работаю через TDBF. В нем оклол 6000 записей. Мне необходимо вставить в него запись, именно вставить, а не добавить в конец. Я делал так: все записи, которые будут после моей, копировал в другой файл, затем их удалял. Потом вставлял в конец мою запись и добавлял ранее удаленные записи. В итоге, получалось как мне надо, НО, такая операция требовала около 20 минут. Пожалуйста, может кто-то подскажет более простой и быстрый вариант ???
← →
Flagman (2004-01-15 09:32) [1]Попробуй это:
TDataSet.InsertRecord
Inserts a new, populated record to the dataset and posts it to the database.
procedure InsertRecord(const Values: array of const);
Description
Call InsertRecord to create a new, empty record at in the dataset, populate it with the field values in Values, and post the values to the database. A newly inserted record is posted to the database in one of three ways:
• For indexed Paradox and dBASE tables, the record is inserted into the dataset in a position based on its index.
• For unindexed Paradox and dBASE tables, the record is inserted into the dataset at the current cursor position. • For SQL databases, the physical location of the insert is implementation-specific. For indexed tables, the index is updated with the new record information.
The newly inserted record becomes the current record.
← →
ЮЮ (2004-01-15 09:44) [2]>Flagman © (15.01.04 09:32) [1]
Так это в DataSet, а автор, судя по всему, не может получить DataSet в нужном порядке, он, очевидно работает с записями по принципу 33 строка, 50 строка
Автору! А как ты определяешь, какие записи будут после моей ?
← →
Anatoly Podgoretsky (2004-01-15 09:57) [3]ЮЮ © (15.01.04 09:44) [2]
Он про индексы не знает, а вставлять в физический набор в опрделеное время это дикость начала 80 годов, когда индексов не было (dBase II), посмотрел бы я не него как он вставить запись в самое начало, сказем при миллионе записей :-).
← →
Flagman (2004-01-15 10:04) [4]2 Anatoly Podgoretsky
Если смотреть правде в глаза, то dBase сам по себе дикость ;))
← →
Yamaha (2004-01-15 10:15) [5]Спасибо. Но у меня FOXPRO файл. А в нем запись можно вставить только в конец файла. А мне нужно в любое место
← →
Yamaha (2004-01-15 10:18) [6]Смысл такой. Оператор набивает пачку платежей. В пачке 100 платежный квитанций. Вот она по порядку и набивает. После набивки, она заметила, что забыла вбить 10 платеж. Вот мне и нужно вставить этот платеж именно после 9 записи. Мне важен порядок платежей
← →
Term (2004-01-15 10:21) [7]
> у меня FOXPRO файл. А в нем запись можно вставить только
> в конец файла. А мне нужно в любое место
опять же чем конец, отличается от середины, НИЧЕМ, т.к. в нормально организованной БД порядок записей определяется ИНДЕКСОМ,
прочти что тебе советуют, и не мучайся вопросами типа "в любое место", ну если уж так охота то кроме Table.Append есть еще Table.Insert, а ваще читай вот это:
> Anatoly Podgoretsky © (15.01.04 09:57) [3]
← →
Term (2004-01-15 10:23) [8]
> Table.Append есть еще Table.Insert
за это извиняюсь, БДЕ-шные привычки :)))
← →
Term (2004-01-15 10:26) [9]
> dBase сам по себе дикость ;))
совсем не обязательно, для небольших локальных баз самое нормальное решение
← →
Yamaha (2004-01-15 10:28) [10]У компонента TDBF метод Insert работает так же, как и Append, т.е. лепит в КОНЕЦ файла. TTable я не могу использовать по ряду причин, т.е. только TDBF
← →
YuRock (2004-01-15 10:29) [11]> Term © (15.01.04 10:26) [9]
Это вообще не решение. В dBase вообще ничего нельзя - нет ни транзакций, ни траггеров... да ничего вообще нет, кроме постоянно слетающих индексов.
← →
YuRock (2004-01-15 10:35) [12]> Yamaha © (15.01.04 10:28) [10]
Insert для dBase не работает.
Нужно сделать индекс. Если TDBF (не знаю, что это такое) не понимает,что такое индекс, можно сделать индекс где-нибудь в другом месте (например ч-з тот же TTable), тогда он будет ставиться автоматически при открытии файла (первый по порядку индекс, если он есть). Для этого надо сделать какое-нибудь скрытое уникальное поле. Напимер, вещественного типа. И при добавлении записи записывать туда необходимое значение. После, например, Refresh"a запись станет (на экране) куда надо.
← →
Flagman (2004-01-15 10:38) [13]2 YuRock:
Согласен.
2 Term:
С тех пор как столкнулся с IB (сейчас под FireBird работаю), я и локальные и сетевые задачи под ним решаю. И полагаю, что как раз для небольших баз, независимо от того локальные они или сетевые, IB/FB гораздо удобнее.
← →
Term (2004-01-15 10:40) [14]
> кроме постоянно слетающих индексов.
чтото не помню чтобы у меня постоянно индексы летели, хотя базы были довольно приличного объёма, я подчёркиваю для ЛОКАЛЬНЫХ приложений, в сети это конечно ... там мороки побольше, блокировки и всё прочее, но ведь не об этом речь, а про то что ПОРЯДОК ЗАПИСЕЙ НЕ ИМЕЕТ ЗНАЧЕНИЯ т.к. должен определяться индексом, делать по другому не есть правильно :)))
← →
Term (2004-01-15 10:44) [15]
> 2 Flagman © (15.01.04 10:38) [13]
да я это понимаю, так как сам уже давно всё на FB делаю, я это к тому что при правильном подходе dBase это тоже довольно надёжная штука, но в прошлом конечно :)))
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.029 c