powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / В EXE-файде Индекс не соответствует таблице
25 сообщений из 29, страница 1 из 2
В EXE-файде Индекс не соответствует таблице
    #33324647
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леди и джентельмены!
Шеф попросила создать малю-юсенькую прогу для облегчения жизни пользователям: поисковик по ФИО и выводом данных нужной записи в форму. Работы было меньше, чем на 40 мин: таблица всего одна, структурный индекс, даже БД не создавала. Все нормально, все работает.
Теперь пробую делать EXE. Составляю проект, указываю файлы, делаю пометку "Запускать сразу". Прошла компиляция, прога запустилась. Все работает ОК. Закрываю, пробую запустить созданый EXE. Тут же сообщение Фокса: "Индекс не соответствует таблице. Удалите файл индекса и создайте индекс заново".
Я пробовала и по-разному. Делала APP - работает. Переносила строку открытия файла из LOAD формы в main-файл Запуск.prg, создавала индекс программно - EXE срабатывает только при первом открытии сразу после компиляции.
Что у меня не так?
Благодарю
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33324714
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть, есть одноименные таблица и индекс есть еще и в других путях - и тот, что подключается не соответствует. Просмотри, какие пути доступны из программы (в т.ч. и в папке где стоит VFP) - возможно там такие же файлы. Или укажи в программе полные пути к файлу и индексу. Если таблица небольшая и локальная - так можно и удалять программно индекс и создавать при входе.
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33324963
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrispyМожет быть, есть одноименные таблица и индекс есть еще и в других путях - и тот, что подключается не соответствует. Просмотри, какие пути доступны из программы (в т.ч. и в папке где стоит VFP) - возможно там такие же файлы. Или укажи в программе полные пути к файлу и индексу. Если таблица небольшая и локальная - так можно и удалять программно индекс и создавать при входе.
Я проверила поиском - файлов с таким названием больше нигде нет.
Тогда переделала проект так, чтобы индекс создавался после запуска приложения, а при выходе из него уничтожался. Теперь при запуске EXE у меня выдается друго сообщение: Недопустимая длина ключа.
Подсчитала сумму длины полей (все типа С), используемых в индексе - менее 100 символов.
Самое интересное, что если экзешник я запускаю в самом Фоксе, то все нормально срабатывает.
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33325344
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, проблема именно с путями доступа. Сделай в стартовой проге сообщение:

Код: plaintext
MessageBox(FULLPATH("MyFile.dbf"))

Это будет путь к той таблице, с которой работает твоя прога. Возможно, при запуске из среды FoxPro используется одна таблица, а при запуске из EXE - другая. Или при вызове из EXE происходит переназначение путей доступа.
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33325680
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, для такого варианта, как вот этот твой - лучше и проще пользоваться обычным компактным индексом, создаваемым командой INDEX ON... TO MyIndex COMPACT - только не забывать, что он не открывается автоматически вместе с таблицей, и что при добавлении еще одного индекса - там уже нужно добавлять параметр: INDEX ON... TO MyIndex COMPACT ADDITIVE - чтобы иметь возможность переключаться между ними, либо же - открывать (пересоздавать) каждый индекс каждый раз заново.
Правда в случае таких индексов - не открытый в данный момент индекс - не обновляется при изменении таблицы - надо его открывать и обновлять командой REINDEX (или пересоздвать - что будет удобнее).
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33326268
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Лисонька!

Может ненароком включила сам dbf внутрь exe-ника?

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33327940
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джентельмены!
Я, наверно, что-то не так делаю с созданием самого проекта. Потому что я перепробовала все предложенные вами способы. Можете посмеяться надо мной, хотя лучше поучите.
1. Фокс расположен по умолчанию в Program Files, я при инсталляции ничего не меняла.
2. Папка 'с:\ Прога\' содержит: Запуск.prg; dbf-файла с индексным; файлы трех форм; файл курсора для мыши. Все.
3. В Фоксе 8: создаю новый проект - файл с:\Прога\Проект.pjx
4. В Data->Free Table делаю Add... для своего dbf-файла.
5. В Documents->Forms делаю Add... для своих трех форм.
6. В Code->Programs делаю Add для Запуск.prg и устанавливаю его Main
7. В Other -Other Files делаю Add для мышиного курсора.
8. Нажимаю Build...
9. Выбираю Win32 Executable; помечаю Run After Build
10. ОК -> Экзешник.exe
11. Происходит компиляция, прога запускается.
12. Закрываем прогу (вместе с Фоксом), теперь запускаем созданный экзешник.
13. Все. Приплыли... ((((((((((((((((((((

Где делаю глупость?
Балагодарю за разъяснения
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33327990
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем сулчае, директория, где лежит файл EXE не обязательно будет директорией по умолчанию.

Я бы посоветовал для начала выполнить поиск по ВСЕМУ диску на твоей машине файлов с тем же именем. Если есть то удалить или скопировать в какую-нибудь временную папочку созданную специально ради такого случая.

И еще, обязательно надо запускать EXE сразу после компиляции? Может, именно эта опция глючит. Лично я так никогда не делал. Просто не знаю...
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33328007
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМИ еще, обязательно надо запускать EXE сразу после компиляции? Может, именно эта опция глючит. Лично я так никогда не делал. Просто не знаю...
Ну, это я и так и так делала
Не усянила, какой нужно файл поискать?
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33328161
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛисонькаНе усянила, какой нужно файл поискать?
А тот, на который ругань идет. Т.е. надо поискать как индексный файл, так и собственно dbf-таблицу.
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33328214
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просмотрела поисковиком еще раз весь диск, изменила все совпадающие с названиями файлов проекта .
Вновь попыталась создать exe. Та же самая история. Может у меня дистрибутив Фокса корявый, к тому же SP 14 Мб до сих пор нет возможности скачать из-за лимита трафика - у нас оплата и-нета поминутная.
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33328266
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай тестовый проект из одного единственно файла PRG в котором примерно такой код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
USE MyTab.dbf
IF USED("MyTab")
	MessageBox("Открыли")
	USE IN MyTab
ELSE
	MessageBox("Открыть не удалось")
ENDIF

ВСЕ. Больше ничего нет. Естесственно, замени MyTab на имя твоей таблицы.

Скомпили EXE и несколько раз попробуй его запускать. Если проблем не будет, значит надо "копать" твой код. Точнее, твои формы. Что-то у тебя с ними не так...
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33328447
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовала на 7 сделать ЕХЕ. Ноль эффекта.
Тогда изменила проект. Prg-файл не стала включать в него, SET MAIN пометила форму, которая должна открываться сразу после запуска проги. В ней установила DE с одним моим dbf.
Сначала появляется сообщение: "Ошибка в файле ресурсов. Переписать его новым, пустым файлом?". Потом без разницы - выбираю я ДА или НЕТ - далее идет сообщение о несовпадении индекса.

З.Ы. Последнее сообщение ВладимираМ еще не пробовала применить.
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33328587
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Владимир!
Сделала этот проверочник. Сначала выскакивает сообщение об индексе, а потом уже выходит Открыть не удалось.
Копать мои формы? Но я уже открытие dbf (и со структурным индексом, и с вновь создаваемым каждый) пробовала осущестлять не через форму, а в prg-файле. Этот файл я нашла в Решениях или где-то в топиках, теперь он у меня такой:
Код: plaintext
1.
2.
3.
4.
DO FORM "c:\Поисковик \Поисковик.scx" NAME _поиск LINKED
IF TYPE("_поиск ")="O" AND !ISNULL(_поиск)
_поиск.WindowState =  0  
READ EVENTS 
ENDIF
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33328656
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛисонькаСделала этот проверочник. Сначала выскакивает сообщение об индексе, а потом уже выходит Открыть не удалось.
Копать мои формы?
Нет. Будет копать файл. Раз проблемы проявляются уже просто при открытии таблицы безо всяких форм.

В этом проверочном проекте из одного PRG сам файл DBF включен в проект? Если включен, то стоит ли в окне проекта слева от него значек перечеркнутого кружочка? А если этот файл исключить из проекта?
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33328657
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМСделай тестовый проект из одного единственно файла PRG в котором примерно такой код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
USE MyTab.dbf
IF USED("MyTab")
	MessageBox("Открыли")
	USE IN MyTab
ELSE
	MessageBox("Открыть не удалось")
ENDIF

ВСЕ. Больше ничего нет. Естесственно, замени MyTab на имя твоей таблицы.
Уважаемый ВладимирМ!
Так оно вообще ерунда получается.
Я попробовала просто запустить написанный Вами prg для какой-нибудь таблицы. Сообщение все равно выходит "Открыть не удалось"!!
Я уже и пути перепроверила, и все на латиницу перевела, и после первой строки BROWS поставила (таблица в нем просмативается без проблем), а сообщение выходит "Открыть не удалось"
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33328707
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛисонькаТак оно вообще ерунда получается.
Я попробовала просто запустить написанный Вами prg для какой-нибудь таблицы. Сообщение все равно выходит "Открыть не удалось"!!
Я уже и пути перепроверила, и все на латиницу перевела, и после первой строки BROWS поставила (таблица в нем просмативается без проблем), а сообщение выходит "Открыть не удалось"
Так, ясненько. Т.е. таблица открылась, но с другим алиасом. Это значит, что таблица была открыта ДО запуска данной процедуры.

Надо посмотреть, что собственно было открыто. Модифицируем программку

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
NowOpenTable()
USE MyTab.dbf
NowOpenTable()

FUNCTION NowOpenTable
LOCAL laUsed( 1 ), lnI, lcString
FOR lnI= 1  TO AUSED(laUsed)
	lcString = m.lcString + chr( 13 )+
		"Алиас="+laUsed[m.lnI, 1 ]+" Таблица="+DBF(laUsed[m.lnI, 1 ])
ENDFOR
IF EMPTY(m.lcString)=.F.
	MessageBox("УЖЕ открыты таблицы"+m.lcString)
ELSE
	MessageBox("Ничего не открыто")
ENDIF
RETURN
ENDFUNC
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33328998
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый ВаладимирМ!
Эксперемент продолжается. DBF стояла в проекте с перечеркнутым кружком и удаляла я его.
Ваш код запустила, но в строке
Код: plaintext
lcString = m.lcString + chr( 13 )+ "Алиас="+laUsed[m.lnI, 1 ]+" Таблица="+DBF(laUsed[m.lnI, 1 ])
выдавалась ошибка, я удалила m.lcString, тест заработал (зря удалила?).
Затем сделал такой prg (при структурном индексе):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
SET DEFAULT TO 'c:\Поисковик\'
application.Visible=.f.
SET SAFETY OFF 
SET TALK OFF 
SET CONSOLE OFF 
SET DELETED ON 
SET CENTURY ON 
SET DATE GERMAN 

NowOpenTable()
SELECT  1 
USE tab1.dbf
SET ORDER TO  1 
GO TOP 
NowOpenTable()

DO FORM "c:\Поисковик \Поисковик.scx" NAME _поиск LINKED
IF TYPE("_поиск ")="O" AND !ISNULL(_поиск)
_поиск.WindowState =  0  
READ EVENTS 
ENDIF

FUNCTION NowOpenTable
LOCAL laUsed( 1 ), lnI, lcString
FOR lnI= 1  TO AUSED(laUsed)
		lcString = chr( 13 )+ "Алиас="+laUsed[m.lnI, 1 ]+" Таблица="+DBF(laUsed[m.lnI, 1 ])
ENDFOR
IF EMPTY(m.lcString)=.F.
	MessageBox("УЖЕ открыты таблицы"+m.lcString)
ELSE
	MessageBox("Ничего не открыто")
ENDIF
RETURN
ENDFUNC
Делаю проект, запускаю EXE.
Как и должно, вначале выдается сообщение "Ничего не открыто". Нажимаю ОК, выдается сообщение, что индекс не соответствует таблице. Выбираем кнопку "Продолжить". Выходит следующее:
УЖЕ открыты таблицы. Алиас=Tab1 Таблица=c:\Поисковик \tab1.dbf
Ни-че-го не понимаю!- как говаривал один из братанов-Колобков.
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33329019
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
выложи проект
с пустыми таблами

там чего-то в классах

в трех соснах .....
делов то ...........
брррр............
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33329066
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лисонька
Ваш код запустила, но в строке
Код: plaintext
lcString = m.lcString + chr( 13 )+ "Алиас="+laUsed[m.lnI, 1 ]+" Таблица="+DBF(laUsed[m.lnI, 1 ])
выдавалась ошибка, я удалила m.lcString, тест заработал (зря удалила?).
Да, там перед циклом надо было просто проинициализировать переменную

Код: plaintext
1.
m.lcString = ""
FOR ...

Не надо сейчас ничего лишнего писать в процедуру. Цель - понять почему "рушиться" индекс. Вот поэтапно и определяем. Сначала "голый" код открытия таблиц БЕЗ какихбы-то ни было форм. НЕ НАДО никаких поисковиков вставлять. Без них бы разобраться...

Положи здесь во вложении твою табличку. Пустую. Без данных. Т.е. одну структуру. DBF+CDX (если есть, то и FPT)
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33329418
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не может ли быть так, что у табличного файла имя какое-нибудь замухрявистое?
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33330564
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джентельмены!
Посылаю вам таблицу с индексом.
Я только вот что сейчас вдруг подумала. Данная таблица создается моим скриптом из таблицы базы данных Access (скрипт запускается, разумеется, в Access'овской проге):
SELECT КодКлиента AS nИдКлиент, Фамилия AS cФам ...INTO Клиенты IN "" [dBASE IV; DATABASE=C:\Поисковик;] ~
FROM (((((Клиенты LEFT JOIN Организации ON Клиенты.КодКомпании = Организации.КодОрганизации)... и т.д.
Может, поэтому Фокс и ругается?
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33330764
sanya_tir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй сделать, чтобы пути к проекту, ехешнику и таблице не содержали длинных имен, пробелов и русских букв вобщем как в старом ДОСе, не больше 8 латинских символов. Видал я такие чудеса у фокса, причем все работала, а потом перестало в один момент, долго бился пока не переложил прогу из c:\programm files\uchet в c:\uchet, как рукой сняло.... чудеса....
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33331500
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛисонькаЯ только вот что сейчас вдруг подумала. Данная таблица создается моим скриптом из таблицы базы данных Access (скрипт запускается, разумеется, в Access'овской проге):
SELECT КодКлиента AS nИдКлиент, Фамилия AS cФам ...INTO Клиенты IN "" [dBASE IV; DATABASE=C:\Поисковик;] ~
FROM (((((Клиенты LEFT JOIN Организации ON Клиенты.КодКомпании = Организации.КодОрганизации)... и т.д.
Может, поэтому Фокс и ругается?
А индекс где создаешь? Тоже в Access? Каким образом?

И потом, это могло бы повлиять только в том случае, если бы происходило пересоздание таблицы между запусками EXE. А после того, как таблица была открыта и проиндексирована в FoxPro она уже никакого отношения к ACCESS не имеет.

У тебя проблема может быть связана с русскими именами и текущей кодовой страницей (потерян файл CONFIG.FPW). Попробуй сделать следующее:

1) Создай текстовый файл CONFIG.FPW со строкой

CODEPAGE=1251

и включи его внутрь тестового EXE. Т.е. на закладке проекта Other - Text Files должен быть этот файл и слева от него НЕ должно быть никаких иконок. Он должен стать частью EXE-файла.

Поэкспериментируй с многократным запуском. Если это не поможет, то переходим к следующему пункту:

2) Переименую саму таблицу на имя английскими символами. Например,

Customers.dbf

Переименуй поля таблицы, чтобы все буквы были только и исключительно латинскими (без "каши" из русских и латинских букв).

Создай индекс заново и снова поэкспериментируй смногократным запуском тестового EXE.
...
Рейтинг: 0 / 0
В EXE-файде Индекс не соответствует таблице
    #33331709
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ур-ра-а! Заработало!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Стоило мне только включить Config.fpw в проект и проект начал работать. Прога запускается через ЕХЕ-шник на любой машине у пользователей.
Благодарю всех, кто хотел мне помочь! Спасибо Учителю!
Ну, раз уж наглеть, так наглеть на радостях до конца.

Уважаемый Владимир!
У меня запущено за последнии месяцы три проекта, все через EXE. Училась проектировать этот тип файлов по решениям в FoxClub'е, наверняка большая часть статей там Ваша.
Так вот. По-моему, в статьях нигде твердо не прописано, что Config надо обязательно включать в проект в Text Files. Я и не включала, и проекты работают нормально. Я сейчас просто ради эксперемента изменила в них значения CODEPAGE и TITLE и запустила проги. Поменялся титул основного окна Фокса, вместо кириллицы - кракозёбры в Гриде.
Значит, можно включать в проект Config, а можно и не включать, так получается?
Благодарю.

Елизавета Скрунскайте
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / В EXE-файде Индекс не соответствует таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]