Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-16444
nv
2004-01-27 09:40
2004.02.06
А можно ли из DLLки (типа плагина) получить переменне основной пр


14-16655
GRAND
2004-01-13 16:49
2004.02.06
Инструкция по охране труда


7-16778
MeskaLito
2003-11-21 11:31
2004.02.06
Блокировка компьютера


1-16494
Dmitriy
2004-01-27 14:52
2004.02.06
Ввод числа.


3-16048
Pako
2004-01-12 11:27
2004.02.06
Insert





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