Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
ВнизРабота с структурой БД в формате dbf Найти похожие ветки
← →
Sergant (2002-10-31 14:55) [0]Не подскажет кто линк на статью по работе со стртруктурой dbf-файла или пример. Под работой я понимаю просмотр(это просто), добавление, удаление и переименовавание полей БД (это уже посложне).
Заранее спасибо.
← →
Kuusiniemi (2002-10-31 16:19) [1]http://www.delphikingdom.com/helloworld/dbheader.htm
Данный статья поможет гиганту мысли?
← →
MsGuns (2002-10-31 19:59) [2]А чем плох DBD (DeskTop) ? Он есть в дельфях.
← →
Sergant (2002-11-02 08:02) [3]Kuusiniemi>
Гиганту мысли статья очень помогла. Спасибо за ссылку. Есть одно "но" - указанный способ не подходит для Clipper"овских dbf-файлов, так как их структура отличается от стандартной. А вот чем - я не знаю. Может супергигант супермысли подскажет что-либо и по этому поводу?
MsGuns>
DBD не подходит по тому же поводу - он некорректно работает с Clipper"овскими dbf-файлами. А так как на работе используются в основном они и dbf - файлы FoxPro, я пишу свой простенький редактор dbf - файлов на компоненте Halcyon. И именно на работе со структурой застопорился.
← →
Anatoly Podgoretsky (2002-11-02 11:03) [4]Клиппер таблицы стандартнымисредствами не поддержаны, требуется отдельный драйвер, обычно ODBC и от него зависит можно или нет сделать это. Нехорошо с твоей стороны, справишвать про dBase, FoxPro а думать про Клиппер, вводишь в заблуждение и заставляешь давать неверные и не нужные ответы.
Поищи в Сети, кто и как поддерживает Клиппер
← →
Sergant (2002-11-02 14:22) [5]Извиняюсь за некорректно поставленный вопрос. Постараюсь уточнить - что именно меня интересует.
В принципе, методика изменения структуры dbf-файла мне понятна:
1. Определяем текущую структуру файла и заносим ее, например в StringGrid (Имя поля, тип поля, размер и кол-во десятичных знаков.
2. Изменяем структуру (добавляем, удаляем или изменяем список полей БД).
3. Создаем временный файл с новой структурой.
4. Копируем в этот файл данные.
5. Удаляем файл со старой структурой и на его место копируем файл с измененной структурой.
У меня возникли проблемы с 4 пунктом - никак не могу сообразить - как отследить, что вот это поле, напимер, добавили, вот это - удалили, а вот это - изменили имя, а вот у этого - тип и т.д.
Хотя, удаление и добавление поля отследить просто, а вот с изменением у меня никак не получается. Поэтому и спрашивал пример.
← →
Anatoly Podgoretsky (2002-11-02 14:31) [6]Изменения определяются через оператор <>
if Old <> New then ....
Заведи таблицу соответствий
← →
Shulc (2002-11-02 14:34) [7]Мой совет ADS. Но, попытайся перейти на более высокий уровень.
Можно перекачать БД в Oracle. Работка предстоит трудоёмкая, но рано или поздно,(если это не однодневка), тебе придется перейти на более высокий уровень. Так лучше сразу.(А то будешь писать, а потом переписывать, "это мы уже проходили" )
← →
MsGuns (2002-11-02 18:13) [8]>Shulc (02.11.02 14:34)
Согласен по большому счету. Но не всегда применимо, увы :((
← →
blackman (2002-11-02 20:11) [9]1.Если переходить от DBF, то самое простое кинуть его в Access, поскольку импорт есть. И работать через ADO, а не связываться с ORACLE
2. Структура DBase 3, Foxpro 2.5 и Clipper 5 одинаковы за исключением Memo полей.
3. Работа с DBF см.
http://blackman.hoha.ru/primer/my/nstruct.zip - исходник, правда без изменения структуры (что сделать несложно (мыль пришлю пример)) через BDE без задания Alias и т.п.
← →
blackman (2002-11-02 20:37) [10]Забыл подчеркнуть, что Вам нужно именно Dbase3
4. Структура Dbase3, Clipper5
http://articlesd.h1.ru/docum/dbf.php
← →
Anatoly Podgoretsky (2002-11-02 20:44) [11]blackman © (02.11.02 20:11)
Это не так, отличаются также текстовые поля и может быть еще что то.
← →
blackman (2002-11-02 23:26) [12]Зачем спорить ? Я все свои базы из Clipper перевел.
Отличается DBase 5 - это да, а DB 3 - то, что надо кроме Memo полей - они разные для всех и конечно разные индексные файлы,
поэтому надо убить признак индексного файла в заголовке DBF
procedure CorrectDBF(DBFFileName : String);
var
FileHandler : Integer;
Buf : Byte;
begin
buf:=0;
FileHandler:=FileOpen(DBFFileName,fmOpenWrite);
try
FileSeek(FileHandler,28,0);
FileWrite(FileHandler,Buf,1); //
← →
Sergant (2002-11-03 04:34) [13]К сожалению, перебросить в другой формат данные не могу, так как программы, работающие с dbf написаны не мной, а написать, скажем, операционный день банка одному человеку очень сложно :(.
← →
blackman (2002-11-03 11:50) [14]А зачем тогда все эти разговоры ?
Возьмите какую-то готовую прогу например dbfdesk
http://rachitel.narod.ru/util.htm
или
http://members.fortunecity.com/drozdov_mur/downloa1/DBFDesk.zip
и меняйте поля.
Непонятно только, что Вы поменяете, если проги на Clipper остануться старыми ?
← →
Ditrix (2002-11-04 08:02) [15]Что бы работать с Clipper файлами, не меняя их структуру используй библиотеку Apollo, она поддерживает и все и вся, и BDE ей не нужен.
А вообще если ты поправишь заголовок CorrectDBF ничего страшного не произойдет, такого же еффекта можно добиться от тарой доброй утилиты BDBF.EXE, она тоже правит заголовки. И ничего страшного Clipper прграмма при открытии файла вернет все на место без боли и вылетов.
← →
Akella (2002-11-04 08:38) [16]Я работаю с клиперовскими базами стандартно через настройку алиаса в BDE, и стандартные делфийские компоненты - не вижу ни одного повода жаловаться
← →
Ditrix (2002-11-04 11:26) [17]Зачастую Clipper базы построены с учетом криптования, тогда ни Delphi программа ни DatabaseDesktop не в состоянии открыть ее.
DatabaseDesktop например пишет "Encrypted database not supported", именно в этом случае нужно либо править заголовок либо использовать что то отличное от BDE
← →
Kudatsky (2002-11-04 11:29) [18]Я тоже постоянно работаю с Clipper-файлами и всё в порядке.
В том числе работает ALTER TABLE.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c