Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

Вставка записей в 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
1-16313
LaidBack
2004-01-28 13:44
2004.02.06
Как послать контролу сообщение о нажатии Ctrl+C?


3-16090
dilp
2004-01-11 03:36
2004.02.06
runtime определение поля как lookup ?


1-16320
kaginava
2004-01-25 10:02
2004.02.06
Сервис


1-16264
MakNik
2004-01-26 09:58
2004.02.06
TEDIT


14-16608
Стесняюсь...
2004-01-02 00:57
2004.02.06
Пачеко