Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];

Вниз

потерялся индекс в фоксе, как быть?   Найти похожие ветки 

 
Olivka   (2001-12-13 15:28) [0]

Господа! помогите разобраться! есть база данных, созданная в foxPro для дос или win, которая при обработке в программе моих коллег индексируется(потом индекс удаляется, но сами понимаете в FoxPro это дело неоднозначно:) и в результате то ли файл индекса теряется, то ли портится, то ли еще что, но когда я загружаю эту базу в программу получаются чудеса - то LangDriver не устанавливается, то пишет -неправильных индекс, то еще что. Приходится открывать эту базу в FoxPro, делать "Ignore" на вопрос об индексах (то, что индекс запорчен, или файл отсутствует), а он дописывает после этого что-то в базу, что она становиться нормальной, а затем спокойно можно открывать ее в моей программе и все ОК. Так вот, нельзя ли этот "Ignore" сделать программно, и не в фоксе, а в Дельфи?
Благо моя программа с вашей помощью становится уже просто совершенной, осталась вот эта вроде бы мелочь (чтоб все предусмотреть, не скажешь же заказчикам, обладающим комплексом наших программ, что им еще и фокс нужен! На всякий случай:))) вот :) и скажут, что все наши программы ... ну сами знаете, а ведь это не так!)
С уважением!


 
DmitryA   (2001-12-15 17:48) [1]

Hi, Olivka!

Дело в том, что индексные файлы MDX и CDX являются связанными с соответствующими файлами DBF (т.е. у DBF присутствует признак наличия его индексного файла, если этот признак убрать, то файл откроется без проблем). Попробуйте договориться со своими FoxPro-товарищами, что индексы будет генерировать Ваша программа.

Best regards!


 
Olivka   (2001-12-17 09:41) [2]

Мое замечание о загадочности FoxPro касалось того, что индексы, создаваемые в их программах в их же программах и удаляются после использования, но на деле - остаются! :) что же мне с этой особенностью FoxPro делать? :))) Надо заметить, что в этом языке это неудивительно, потому что там много подобных глюков.


 
DmitryA   (2001-12-17 15:47) [3]

Не понял смысла "удаляются после использования, но на деле - остаются". Как это? Зачем удалять?!!


 
Olivka   (2001-12-17 18:33) [4]

Дело в том, что если в программе на фоксе оставить индексы в базе, даже если файл индекса mdx или cdx, кажется , сохранился - все равно дельфи не воспримет этот файл как нужный ей и будет считать, что в базе какая-то ошибка. Для этого я и прошу в программе на foxPro эти индексы удалять - что-то типа delete all index (не знаю точно команды). ТАк она - то срабатывает, то нет - и программист тут не причем. А мне нужен универсальный способ удаления этого индекса (фокспрошного) из программы на дельфи. Вот. :)


 
Гоша   (2001-12-17 18:46) [5]

>Olivka:
"не скажешь же заказчикам, обладающим комплексом наших программ, что им еще и фокс нужен! На всякий случай:))) вот :) и скажут, что все наши программы ... ну сами знаете, а ведь это не так!)"
Честно говоря, на месте ваших заказчиков я бы так и сказал...
Скажите, а зачем вам далась DELPHI, если формат данных у вас FoxPro, какие-то программы пишутся на FoxPro, что-то делается на DELPHI, а чтобы все это работало, вы хотите каждый раз создавать/удалять индексы...
Ей-бо, я бы на их месте точно послал...


 
DmitryA   (2001-12-17 19:12) [6]

Вот универсальный способ удаления индекса (MDX, и кажется CDX тоже): нужно взять описание DBF формата 3-й версии, почитать, и написать процедурку удаления индексного файла (CDX) и корректировки заголовка файла данных (DBF).


 
DmitryA   (2001-12-18 16:28) [7]

Кстати - на этом же сайте, по-моему в кладовке есть описание формата DBF-файла 3 версии. А можно поискать на Yahoo и Rambler...


 
Olivka   (2001-12-18 22:06) [8]

Гоша > У нас хм... не коммерческое предприятие, раз, во вторых я базу имею, а в основном у меня работа идет с Surfer и Word-Excel, два , и интерфейс пользователя большое значение имеет, три. А в четвертых - можете сами попробовать написать все это на фоксе, который к тому же еще и не выпускают. А в пятых - я не собираюсь тут всю жизнь работать, со знанием foxPro далеко не уйдешь, от него противно веет... затхлостью какой-то (ну это ИМХО, только для меня)
Дмитрию > а попробую, спасибо, чем черт не шутит, может получится?


 
Гоша   (2001-12-19 10:34) [9]

>Olivka: Милая Olivka (я не ошибся?), пожалуйста, не обижайтесь, я совсем не хотел Вас обидеть. Как Вам делать Ваши продукты - это исключительно Ваше дело. Но просто исходя из житейской логики не согласитесь ли Вы, что действительно несколько странно делать часть прогр. продукта на FoxPro, а часть на DELPHI и каждый раз при запуске создавать/удалять индексы у таблиц - IMHO это вряд ли благотворно скажется на производительности...

И не удержусь от неск-ких реплик:
-"я базу имею" - это сильно сказано !
-"у меня работа идет с Surfer" - а я к стыду своему понятия не имею, что это такое...
-"интерфейс пользователя большое значение имеет" - о, да! Тут мы солидарны
-"...на фоксе, который к тому же еще и не выпускают" - куда не выпускают ?!
-"со знанием foxPro далеко не уйдешь" - ну это кому как...
-"от него противно веет... " - Вы в самом деле глубоко внюхивались ?

PS: я не знаю будущее FoxPro, знаю о недостатках этой среды для написания клиентского интерфейса, но по моему глубокому убеждению в средствах доступа к данным и их обработке среда DELPHI c ее BDE, ADO и компонентами не дотягивает до уровня, предоставляемого FoxPro.
С уважением.


 
DmitryA   (2001-12-20 18:29) [10]

Ну, ребята! Вы меня просту умилили!!!

Зачем с черто-то шутить? Вот исходники. Можно попробовать, хотя реально они выглядят несколько иначе (я их рихтовал уже в IN Browser"е). Но должно работать!..

TDBFHeader = record
abBuffer0: array[0..7] of byte;
wHeaderLength: word;
abBuffer1: array[0..17] of byte;
bMDX: byte;
abBuffer2: array[0..2] of byte;
end;

TDBFDesc = record
abBuffer0: array[0..30] of byte;
bMDX: byte;
end;

function DropIndexes(const DBFFileName: string): boolean;
var Header: TDBFHeader;
Desc: TDBFDesc;
iHandle, iDescCount, iDesc: integer;
sFileName: string;
begin
Result := true;

// Кооректируем заголовок
sFileName := DBFFileName + ".DBF";
iHandle := FileOpen(sFileName, fmOpenReadWrite or fmShareDenyNone);
if iHandle = -1 then
begin
Result := false;
exit;
end;

FileRead(iHandle, Header, 32);

Header.bMDX := 0;

FileSeek(iHandle, 0, fsSET);
FileWrite(iHandle, Header, 32);

iDescCount := (Header.wHeaderLength - 33) div 32;
for iDesc := 1 to iDescCount do
begin
FileRead(iHandle, Desc, 32);

Desc.bMDX := 0;

Application.ProcessMessages();

FileSeek(iHandle, iDesc * 32 , fsSET);
FileWrite(iHandle, Desc, 32);
end;

FileClose(iHandle);

// Удаляем индекс, если есть
sFileName := DBFFileName + ".MDX";
if FileExists(sFileName) then SysUtils.DeleteFile(sFileName);
end;

И еще.

Olivka! Если у Вас проблемы, пишитя прямо на мой e-mail: dmitry@lintec.net.ua



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.004 c
3-99841
EternalWonderer
2001-12-25 15:47
2002.01.31
Размер поля NUMBER в ORACLE


4-100094
Русский
2001-11-30 20:49
2002.01.31
Самый крутой и прикольный вопрос по API :-D


6-100030
FD
2001-11-08 13:16
2002.01.31
Объясните новичку


4-100104
Romul
2001-12-02 10:59
2002.01.31
Узнать количество файлов с помощью API


1-99955
Enforcer
2002-01-13 22:54
2002.01.31
ListBox





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