![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вставка записей в TDBF [D6, DBF]
Yamaha © (2004-01-15 09:24:00)
Здравствуйте. У меня такая проблема. Есть DBF файл с которым я работаю через TDBF. В нем оклол 6000 записей. Мне необходимо вставить в него запись, именно вставить, а не добавить в конец. Я делал так: все записи, которые будут после моей, копировал в другой файл, затем их удалял. Потом вставлял в конец мою запись и добавлял ранее удаленные записи. В итоге, получалось как мне надо, НО, такая операция требовала около 20 минут. Пожалуйста, может кто-то подскажет более простой и быстрый вариант ???
Term (2004-01-15 10:44:00) [1]
> 2 Flagman © (15.01.04 10:38) [13]
да я это понимаю, так как сам уже давно всё на FB делаю, я это к тому что при правильном подходе dBase это тоже довольно надёжная штука, но в прошлом конечно :)))
Term (2004-01-15 10:40:00) [2]
> кроме постоянно слетающих индексов.
чтото не помню чтобы у меня постоянно индексы летели, хотя базы были довольно приличного объёма, я подчёркиваю для ЛОКАЛЬНЫХ приложений, в сети это конечно ... там мороки побольше, блокировки и всё прочее, но ведь не об этом речь, а про то что ПОРЯДОК ЗАПИСЕЙ НЕ ИМЕЕТ ЗНАЧЕНИЯ т.к. должен определяться индексом, делать по другому не есть правильно :)))
Flagman (2004-01-15 10:38:00) [3]
2 YuRock:
Согласен.
2 Term:
С тех пор как столкнулся с IB (сейчас под FireBird работаю), я и локальные и сетевые задачи под ним решаю. И полагаю, что как раз для небольших баз, независимо от того локальные они или сетевые, IB/FB гораздо удобнее.
YuRock (2004-01-15 10:35:00) [4]
> Yamaha © (15.01.04 10:28) [10]
Insert для dBase не работает.
Нужно сделать индекс. Если TDBF (не знаю, что это такое) не понимает,что такое индекс, можно сделать индекс где-нибудь в другом месте (например ч-з тот же TTable), тогда он будет ставиться автоматически при открытии файла (первый по порядку индекс, если он есть). Для этого надо сделать какое-нибудь скрытое уникальное поле. Напимер, вещественного типа. И при добавлении записи записывать туда необходимое значение. После, например, Refresh"a запись станет (на экране) куда надо.
YuRock (2004-01-15 10:29:00) [5]
> Term © (15.01.04 10:26) [9]
Это вообще не решение. В dBase вообще ничего нельзя - нет ни транзакций, ни траггеров... да ничего вообще нет, кроме постоянно слетающих индексов.
Yamaha (2004-01-15 10:28:00) [6]
У компонента TDBF метод Insert работает так же, как и Append, т.е. лепит в КОНЕЦ файла. TTable я не могу использовать по ряду причин, т.е. только TDBF
Term (2004-01-15 10:26:00) [7]
> dBase сам по себе дикость ;))
совсем не обязательно, для небольших локальных баз самое нормальное решение
Term (2004-01-15 10:23:00) [8]
> Table.Append есть еще Table.Insert
за это извиняюсь, БДЕ-шные привычки :)))
Term (2004-01-15 10:21:00) [9]
> у меня FOXPRO файл. А в нем запись можно вставить только
> в конец файла. А мне нужно в любое место
опять же чем конец, отличается от середины, НИЧЕМ, т.к. в нормально организованной БД порядок записей определяется ИНДЕКСОМ,
прочти что тебе советуют, и не мучайся вопросами типа "в любое место", ну если уж так охота то кроме Table.Append есть еще Table.Insert, а ваще читай вот это:
> Anatoly Podgoretsky © (15.01.04 09:57) [3]
Yamaha (2004-01-15 10:18:00) [10]
Смысл такой. Оператор набивает пачку платежей. В пачке 100 платежный квитанций. Вот она по порядку и набивает. После набивки, она заметила, что забыла вбить 10 платеж. Вот мне и нужно вставить этот платеж именно после 9 записи. Мне важен порядок платежей
Yamaha (2004-01-15 10:15:00) [11]
Спасибо. Но у меня FOXPRO файл. А в нем запись можно вставить только в конец файла. А мне нужно в любое место
Flagman (2004-01-15 10:04:00) [12]
2 Anatoly Podgoretsky
Если смотреть правде в глаза, то dBase сам по себе дикость ;))
Anatoly Podgoretsky (2004-01-15 09:57:00) [13]
ЮЮ © (15.01.04 09:44) [2]
Он про индексы не знает, а вставлять в физический набор в опрделеное время это дикость начала 80 годов, когда индексов не было (dBase II), посмотрел бы я не него как он вставить запись в самое начало, сказем при миллионе записей :-).
ЮЮ (2004-01-15 09:44:00) [14]
>Flagman © (15.01.04 09:32) [1]
Так это в DataSet, а автор, судя по всему, не может получить DataSet в нужном порядке, он, очевидно работает с записями по принципу 33 строка, 50 строка
Автору! А как ты определяешь, какие записи будут после моей?
Flagman (2004-01-15 09:32:00) [15]
Попробуй это:
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.