powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / пути к базе данных
92 сообщений из 92, показаны все 4 страниц
пути к базе данных
    #37403727
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создан проект на VFP9.
Структура:
-Class
-Data (одна база данных, в ней хранятся все таблицы)
-Form
-Help
-Menus и тд.
Требуется: переместить папку Data (с базой данных) на другой диск (отдельно от .exe).
Вопрос: как из проекта настроить «доступ» к этой папке? Чтобы после компиляции проект обращался к этой папке извлекал, удалял, сохранял данные.
...
Рейтинг: 0 / 0
пути к базе данных
    #37403814
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AllkayСоздан проект на VFP9.
Структура:
-Class
-Data (одна база данных, в ней хранятся все таблицы)
-Form
-Help
-Menus и тд.
Требуется: переместить папку Data (с базой данных) на другой диск (отдельно от .exe).
Вопрос: как из проекта настроить «доступ» к этой папке? Чтобы после компиляции проект обращался к этой папке извлекал, удалял, сохранял данные.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
************************************************
FUNCTION SetPath
************************************************
workdir2=JUSTPATH(ALLTRIM(SYS( 16 , 0 )))
workdir='"'+workdir2+'"'
IF .not. RIGHT(workdir2, 1 )=='\'
	workdir2=workdir2+'\'
ENDIF
CD &workdir
RETURN
...
Рейтинг: 0 / 0
пути к базе данных
    #37403952
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расположение файлов проекта

В настройке SET PATH можно указывать не только абсолютные, но и относительные (относительно текущей директории) пути доступа. Если текущей директорией является та, внутри которой и расположены созданные директории, то перемещение в другое место не портебует никаких изменений в настройках. Для большинства задач этого вполне достаточно.
...
Рейтинг: 0 / 0
пути к базе данных
    #37405786
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как правильно заполнить файл config.fpw?
В нем:
Как правильно прописать путь, с помощью опции PATH, к директории data с Базой Данных :
- на диске
- на сервере
При компиляции где должна находиться папка data с Базой Данных ?
...
Рейтинг: 0 / 0
пути к базе данных
    #37405915
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AllkayКак правильно заполнить файл config.fpw?
В нем:
Как правильно прописать путь, с помощью опции PATH, к директории data с Базой Данных :
- на диске
- на сервере
При компиляции где должна находиться папка data с Базой Данных ?
А зачем это всё кино надо ? Запускаем приложение, оно открывает локальный файл (типа CONFIG.DBF), читает оттуда путь к БД. Нашлась БД - всё ОК, работаем с ней, не нашлась - выдать запрос на указание папки с БД и если мы указали какой-то новый путь к папке БД, то записываем его в CONFIG.DBF для следующих запусков. Автор сам себе головную боль зарабатывает.
...
Рейтинг: 0 / 0
пути к базе данных
    #37406062
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смысл в чем, есть готовый проект и все данные проекта, и таблицы с данными хранятся в БД «BD1» в папке DATA.
Мне нужно переместить эту папку на другой диск или сервер (не важно), и прописать путь к БД.
Проблема:
Как разделить проект с БД.
-Если папка data расположена вместе с проектом проблем нет.
-Если папка data расположена на другом диске выдает сообщение об ошибке (нет «BD1»).
Прописать пути к БД в файл config.fpw, только к папке или к каждой таблице в БД.
...
Рейтинг: 0 / 0
пути к базе данных
    #37406148
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже давно бы попробовали. Делов-то, переименовать старую папку с данными (чтобы "скрыть" ее от проекта) и создать новую (можно на то же компьютере). Затем поиграться с путями доступа, чтобы все заработало.

AllkayПрописать пути к БД в файл config.fpw, только к папке или к каждой таблице в БД.
Как Вы себе представляете прописывание пути доступа (без собственно имени файла) к каждой таблице в БД? SET PATH - это адреса папок. Как Вы собираетесь записать здесь адреса таблиц?
...
Рейтинг: 0 / 0
пути к базе данных
    #37406209
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AllkayСмысл в чем, есть готовый проект и все данные проекта, и таблицы с данными хранятся в БД «BD1» в папке DATA.
Мне нужно переместить эту папку на другой диск или сервер (не важно), и прописать путь к БД.
Проблема:
Как разделить проект с БД.
-Если папка data расположена вместе с проектом проблем нет.
-Если папка data расположена на другом диске выдает сообщение об ошибке (нет «BD1»).
Прописать пути к БД в файл config.fpw, только к папке или к каждой таблице в БД.
А на фиг тут вообще вам config.fpw ? Да храните путь к БД в локальной табличке (где много прочего мусора) типа CONFIG.DBF (если есть желание, даже в текстовом файле) и берите этот путь при каждом запуске приложения. Проверили при запуске, а есть ли в этой папке какой-нить характерный файл. Если есть, да, это та самая папка. Если файла нет, то увы, облом, предлагается окошко для выбора папки.
...
Рейтинг: 0 / 0
пути к базе данных
    #37406326
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал. Переименовал папку, даже создал новый проект, но после запуска положения он ищет папку с базой данных у себя в папке “Proect”. Прописал в файле config.fpw путь (SET PATH TO D:\BD\DATA) доступа к папке data – но он все равно ищет в папке “Proect”.
...
Рейтинг: 0 / 0
пути к базе данных
    #37406359
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
reware,

Потому что все советуют указывать путь к БД в файле config.fpw.
Сохраню путь в текстовом файле, а как брать путь из текстового файла при каждом запуске приложения.?
...
Рейтинг: 0 / 0
пути к базе данных
    #37406365
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Чтобы определить какой именно файл конфигурации подхватывается при запуске EXE используйте функцию SYS(2019)
2. Если Вы хотите использовать настройку PATH в файле конфигурации, то убедитесь, что у Вас не используется настройка SET PATH в коде программы, поскольку она может затереть настройки файла конфигурации (если нет опции ADDITIVE)
3. Если используются относительные пути доступа, то принципиально важным становится директория по умолчанию относительно коьторой эти пути и будут определяться

Для справки :

В файле config.fpw синтаксис настройки имеет вид

PATH=D:\BD\DATA

В файле PRG синтаксис настройки имеет вид

SET PATH TO D:\BD\DATA
...
Рейтинг: 0 / 0
пути к базе данных
    #37406427
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkayreware,

Потому что все советуют указывать путь к БД в файле config.fpw.
Сохраню путь в текстовом файле, а как брать путь из текстового файла при каждом запуске приложения.?
Да бог с ним текстовым. Что мешает хранить этот путь в локально-эксклюзивном CONFIG.DBF ? Открыли его штатно, прочли этот путь, зашли в эту папку (если таковая обнаружена), совпал (по наличию какого-то характерного файла) путь с нужным - переключаемся на эту папку. Нет этого "характерного" файла, значит не та папка - выдаём диалог для выбора другой папки. Кронштейн ?
...
Рейтинг: 0 / 0
пути к базе данных
    #37406469
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ1. Чтобы определить какой именно файл конфигурации подхватывается при запуске EXE используйте функцию SYS(2019)
2. Если Вы хотите использовать настройку PATH в файле конфигурации, то убедитесь, что у Вас не используется настройка SET PATH в коде программы, поскольку она может затереть настройки файла конфигурации (если нет опции ADDITIVE)
3. Если используются относительные пути доступа, то принципиально важным становится директория по умолчанию относительно коьторой эти пути и будут определяться

Для справки :

В файле config.fpw синтаксис настройки имеет вид

PATH=D:\BD\DATA

В файле PRG синтаксис настройки имеет вид

SET PATH TO D:\BD\DATA

С помощью функцию SYS(2019) проверил файл конфигурации: D:\uasnewexp\config.fpw.
В файле config.fpw прописал путь: PATH=D:\database\data\.
С компилировал проект, запустил – ответ системы: D:\uasnewexp\data\bduaski.dbc – файл не существует. А должен был искать: D:\database\data\
...
Рейтинг: 0 / 0
пути к базе данных
    #37406474
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни чего не мешает!! только знать бы, как его создать, где хранить, и как штатно открывать?
Я новичок на FOXe поэтому пока не очень «Кронштейн»
...
Рейтинг: 0 / 0
пути к базе данных
    #37406726
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AllkayС помощью функцию SYS(2019) проверил файл конфигурации: D:\uasnewexp\config.fpw.
В файле config.fpw прописал путь: PATH=D:\database\data\.
С компилировал проект, запустил – ответ системы: D:\uasnewexp\data\bduaski.dbc – файл не существует. А должен был искать: D:\database\data\
Вообще-то, проверять надо было из запускаемого приложения. В смысле, из EXE. Ну, например, где-то в начале главного (стартового) файла проекта записать нечто вроде

Код: plaintext
MessageBox("config = " + SYS( 2019 ) + chr( 13 ) + "path = " + SET("PATH"))

Дело в том, что если файл Config.FPW включен внутрь EXE, то в первую очередь будут использоваться настройки этого самого "включенного" файла.

Можно еще использовать ключ -C (латинская буква "С"), чтобы явно задать файл конфигурации, который следует использовать. Примерно так

Код: plaintext
MyProg.EXE -C"D:\database\data\config.fpw"

Здесь MyProg.exe - это Ваше приложение, скопилированное в EXE-файл.

И еще, я бы посоветовал открывать контейнер базы данных "вручную" в главном стартовом файле проекта ДО открытия каких-либо форм. Примерно так

Код: plaintext
1.
2.
OPEN DATABASE bduaski.dbc SHARED
SET DATABASE TO bduaski

====================

То, о чем говорит reware - это следующая стратегия.

1. Создается специальный файл DBF, который НЕ включен в контейнер базы данных. Так называемая, свободная таблица. В проекте это узел "Free Tables" на закладке Data.

2. Ну, структура этой таблицы может быть разной, но суть в том, что определенном поле определенной записи записан путь доступа к базам данных.

3. Данный файл DBF всегда кладется рядом с EXE в ту же самую директорию. Другими словами, этот файл всегда находится в директории по умолчанию.

4. В момент открытия приложения в главном стартовом файле проекта предпринимается попытка открыть эту таблицу прямой командой USE и прочитать настройку путей доступа. Далее командой SET PATH эти настройки устанавливаются.

Разумеется, пункт 4 должен быть еще окружен рядом дополнительных проверок, как на факт существования такой таблицы, так и на факт существования нужной записи и нужного значения. Все это дополнительно программируется и обрабатываться возможные ошибки.


Собственно, это тот же Config.fpw, но "вид сбоку". Преимущества данного способа в том, что кроме пути доступа можно хранить ряд других локальных настроек приложения. Хотя особого практического смысла это и не имеет, поскольку те же локальные настройки можно хранить и на сетевом ресурсе.

Я бы сказал так. Пока Вы не разберетесь, почему через config.fpw у Вас не работает, пытаться использовать файл DBF для подобных настроек - не стоит. Вы просто повторите все те ошибки, которые уже сделали для config.fpw, но запутаетесь еще больше, поскольку тут будет больше кода. Как следствие, больше мест, где можно ошибиться.
...
Рейтинг: 0 / 0
пути к базе данных
    #37407388
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прописал в головной программе:
MessageBox("config = " + SYS(2019) + chr(13) + "path = " + SET("PATH"))
OPEN DATABASE bduaski.dbc SHARED
SET DATABASE TO bduaski
С компилировал без ошибок. Запустил.
Он ответил:
-[config = D:\uasnew1\config.fpw]
-[path = D:\database\data\]
Нажал ОК!:
-ошибка: файл D:\uasnew1\data\bduaski.dbc не существует
Нажал ОК!:
-ошибка: файл не существует data\bduaski
Нажал ОК!: - выкидывает из программы.

Может я не правильно отделил БД от проекта?
...
Рейтинг: 0 / 0
пути к базе данных
    #37407415
rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я сделал форму
txt
button
локальная база в которую записую пути
при запуске проги вылетает форма
нажал на кнопочки, настроил пути, запомнил и работаешь
...
Рейтинг: 0 / 0
пути к базе данных
    #37407437
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,
Так кто ж знает, как ты ее отделял
...
Рейтинг: 0 / 0
пути к базе данных
    #37407530
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изначально проект создавался в месте с папкой data.

Отделил не правильно и не корректно. Перенес из одного места в другое.(Если кто знает скажите как правильно)

Нужно что бы «uasoao.exe» знал где сидит «bduaski.dbc».
...
Рейтинг: 0 / 0
пути к базе данных
    #37407650
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

А в проект эта база данных у тебя включена? См. на вкладке Data
...
Рейтинг: 0 / 0
пути к базе данных
    #37407700
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да.
...
Рейтинг: 0 / 0
пути к базе данных
    #37407857
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

Поскольку база данных у тебя включена в проект, можешь встать на нее и внизу увидишь соответствующий путь к ней. Вот она и открывается, а то что ты как бы исключил из проекта, ровным счетом ничего не значит.
...
Рейтинг: 0 / 0
пути к базе данных
    #37407867
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прописал в головной программе:
MessageBox("config = " + SYS(2019) + chr(13) + "path = " + SET("PATH"))
OPEN DATABASE bduaski.dbc SHARED
SET DATABASE TO bduaski
С компилировал без ошибок. Запустил.
Он ответил:
...
Рейтинг: 0 / 0
пути к базе данных
    #37407870
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нажал ОК!:
...
Рейтинг: 0 / 0
пути к базе данных
    #37407871
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нажал ОК!:

Нажал ОК!: - выкидывает из программы.
...
Рейтинг: 0 / 0
пути к базе данных
    #37407886
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

Плохо читаешь, что тебе советуют.

http://www.foxclub.ru/articles/index.php?id=32#FilesInProject


PATH - еще одна очень важная настройка. Она говорит FoxPro о том, где следует искать файлы (в каких директориях) ОТНОСИТЕЛЬНО текущей директории. В качестве разделителя можно указывать как просто запятую, так и символ точки с запятой. Подробнее о путях доступа чуть ниже.
...
Рейтинг: 0 / 0
пути к базе данных
    #37407893
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AllkayПрописал в головной программе:
MessageBox("config = " + SYS(2019) + chr(13) + "path = " + SET("PATH"))
OPEN DATABASE bduaski.dbc SHARED
SET DATABASE TO bduaski
С компилировал без ошибок. Запустил.
Он ответил:
-[config = D:\uasnew1\config.fpw]
-[path = D:\database\data\]
Нажал ОК!:
-ошибка: файл D:\uasnew1\data\bduaski.dbc не существует
Нажал ОК!:
-ошибка: файл не существует data\bduaski
Нажал ОК!: - выкидывает из программы.

Может я не правильно отделил БД от проекта?

1. Между командами MessageBox() и OPEN DATABASE есть еще какие-то команды?
2. Файл bduaski.dbc (dct, dcx) физически существует по указанному пути в папке "D:\database\data\" ? Т.е. что возвращает функция

Код: plaintext
?File("D:\database\data\bduaski.dbc")

Т.е. в Вашем сценарии либо был изменен путь доступа, либо просто контейнер базы данных не существует по указанным путям доступа. Сообщение об ошибке говорит о том, что по путям SET PATH не был найден нужный файл, поэтому показывает путь доступа к текущей директории


Еще проверьте, что все буквы латинские. Например, отличить русскую букву "а" от латинской "a" или русскую "с" от латинской "c" визуально невозможно. Поэтому попробуйте скопировать имена из проводника. Не писать, а именно копировать.

Если русские буквы оказались в имени базы данных, то в файле CONFIG.FPW обязательно должна быть строчка

CODEPAGE=1251

и главный стартовый файл должен быть написан в кодировке 1251.
...
Рейтинг: 0 / 0
пути к базе данных
    #37407897
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNGPATH - еще одна очень важная настройка. Она говорит FoxPro о том, где следует искать файлы (в каких директориях) ОТНОСИТЕЛЬНО текущей директории.
Не обязательно. Можно и абсолютный путь указать. В данном случае - это не важно. Проблема в чем-то другом. Подозреваю, где-то "затерялась" русская буква в имени или пути доступа.
...
Рейтинг: 0 / 0
пути к базе данных
    #37407944
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ1. Между командами MessageBox() и OPEN DATABASE есть еще какие-то команды?
#INCLUDE "INCLUDE\STRINGS.H"

SET ENGINEBEHAVIOR 70
SET NOTIFY OFF


OPEN DATABASE bduaski.dbc SHARED
SET DATABASE TO bduaski
MessageBox("config = " + SYS(2019) + chr(13) + "path = " + SET("PATH"))


mwidth=SYSMETRIC(1)
mheight=SYSMETRIC(2)
IF mwidth<800 OR mheight<600 и тд.[/quot]
ВладимирМ2. Файл bduaski.dbc (dct, dcx) физически существует по указанному пути в папке "D:\database\data\" ? Т.е. что возвращает функция
Код: plaintext
?File("D:\database\data\bduaski.dbc")


.Т.

ВладимирМ3. Еще проверьте, что все буквы латинские. Например, отличить русскую букву "а" от латинской "a" или русскую "с" от латинской "c" визуально невозможно. Поэтому попробуйте скопировать имена из проводника. Не писать, а именно копировать.

Копировал из «тотола»

ВладимирМ4. Если русские буквы оказались в имени базы данных, то в файле CONFIG.FPW обязательно должна быть строчка
CODEPAGE=1251

Содержание моего CONFIG.FPW
SCREEN=OFF
CODEPAGE=AUTO
statusbar=off
TITLE="BDUASKI"
PATH=D:\database\data\

ВладимирМ5. и главный стартовый файл должен быть написан в кодировке 1251.

Когда выбираю редактировать главную программу проекта, в командной строке прописывается:
MODIFY COMMAND d:\uasnew1\progs\main.prg AS 1251
...
Рейтинг: 0 / 0
пути к базе данных
    #37408048
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay#INCLUDE "INCLUDE\STRINGS.H"

OPEN DATABASE bduaski.dbc SHARED
SET DATABASE TO bduaski
MessageBox("config = " + SYS(2019) + chr(13) + "path = " + SET("PATH"))

Вы ведь раньше писали, что СНАЧАЛА отображается MessageBox() и только ПОТОМ идет ругань на открытие базы данных! А в приведенном коде все наоборот. База данных СНАЧАЛА открывается (без ругани?), а ПОТОМ отображается MessageBox().

И, кстати, в файле STRINGS.H никакого кода прекомпиляции нет? Только определение констант?

Код: plaintext
CODEPAGE=AUTO

Так нельзя. Это означает, что будет использована кодовая страница по умолчанию. А для FoxPro начиная с VFP7 и старше в готовом EXE это будет 1252 (win eng) вне зависимости от кодовой страницы Windows. Нужно явно указать кодовую страницу 1251.

Код: plaintext
1.
SCREEN=OFF
TITLE="BDUASKI"

Опция TITLE - это заголовок основного окна FoxPro. Но опци SCREEN=OFF означает, что основное окно FoxPro отображено не будет. Так какой смысл менять заголовок у окна, которое не отображается?

Кроме того, в файле Config.fpw все значения и так по умолчанию символьные. Поэтому кавычки будут восприняты как содержимое параметра, а не его границы. Т.е. в заголовке окна эти самые кавычки таже окажутся отображенными.

Да, на этапе тестирования оставьте SCREEN=ON

=======================

1. Если Вы прямо в командом окне FoxPro дадите команду

Код: plaintext
OPEN DATABASE D:\database\data\bduaski.dbc SHARED

База данных откроется? Если откроется, то что вернет

Код: plaintext
?DBC()


2. Создайте новый тестовый проект, в котором будет один единственный файл PRG как главный стартовый файл и в нем ТОЛЬКО следующие две строчки

Код: plaintext
1.
2.
MessageBox("config = " + SYS( 2019 ) + chr( 13 ) + "path = " + SET("PATH"))
OPEN DATABASE bduaski.dbc SHARED

После чего сгенерите файл EXE и с этим EXE далее и экспериментируйте с путями доступа и файлом config.fpw
...
Рейтинг: 0 / 0
пути к базе данных
    #37408142
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
Вы ведь раньше писали, что СНАЧАЛА отображается MessageBox() и только ПОТОМ идет ругань на открытие базы данных! А в приведенном коде все наоборот. База данных СНАЧАЛА открывается (без ругани?), а ПОТОМ отображается MessageBox().

Так и было, он отрывает БД но наверное еще какое-то приложение пытается открыть БД!

Код: plaintext
1.
2.
 1 . Если Вы прямо в командом окне FoxPro дадите команду 

OPEN DATABASE D:\database\data\bduaski.dbc SHARED

OPEN DATABASE D:\database\data\bduaski.dbc SHARED
MODIFY DATABASE

Открывается БД и все таблицы.


Код: plaintext
1.
2.
База данных откроется? Если откроется, то что вернет 

?DBC()

Путь: D:\database\data\ bduaski.dbc


Нашел в коде
Код: plaintext
1.
2.
3.
4.
Устанавливаем пути в рабочие директории
  SET PATH TO PROGS, FORMS, LIBS, ;
        MENUS, DATA, OTHER, ;
        REPORTS, INCLUDE, HELP, ;
        PICTURES, API, DLL
Пытался изменять, но все равно выдает ошибку что файла не существует.
...
Рейтинг: 0 / 0
пути к базе данных
    #37408173
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
// Определяем присутствие базы данных, если надо открываем ее//
nDatabase=OCCURS("!",cTableName)
IF nDatabase>0
nPosDatabase=AT("!",cTableName)
cDatabaseName=SUBSTR(cTableName,1,nPosDatabase-1)
cTableName=SUBSTR(cTableName,nPosDatabase+1)
IF !DBUSED(cDatabaseName)
IF !FILE(ALLTRIM(cDatabaseName)+".DBC")
=MESSAGEBOX("База данных "+UPPER(cDatabaseName)+" не найдена",;
0+64+0,"Ошибка N 1")
RETURN .F.
ENDIF
OPEN DATABASE &cDatabaseName
ENDIF
cDatabaseName=cDatabaseName+"!"
ENDIF

Вот здесь возникают ошибки, об открытии.
...
Рейтинг: 0 / 0
пути к базе данных
    #37408248
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Устанавливать пути к рабочим директориям в коде не желательно. Для указания путей доступа используется отдельный файл config.fpw специально для этапа разработки (отладки) приложения. Поэтому, сделайте поиск по ключевому слову PATH по всему приложению и удалите все настройки SET PATH .

У Вас должно быть 2 файла config.fpw. Один используется на этапе разработки, а другой будет использоваться с готовым EXE.

2. Как я уже писал, настройка SET PATH удаляет ранее сделанные настройки путей доступа, если только не используется специальный синтаксис. Поэтому команда SET PATH в Вашем приложении просто затерла настройки PATH сделанные в файле конфигурации.

Еще раз посоветую: удалить SET PATH в коде и используйте для указания путей доступа только config.fpw

====================

PS: Добавление путей доступа к ранее настроенным выполняется по одной штуке за раз. При этом, добавляемый путь доступа обязательно заключается в кавычки. Примерно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SET PATH TO "PROGS" ADDITIVE
SET PATH TO "FORMS" ADDITIVE
SET PATH TO "LIBS" ADDITIVE
SET PATH TO "MENUS" ADDITIVE
SET PATH TO "DATA" ADDITIVE
SET PATH TO "OTHER" ADDITIVE
SET PATH TO "REPORTS" ADDITIVE
SET PATH TO "INCLUDE" ADDITIVE
SET PATH TO "HELP" ADDITIVE
SET PATH TO "PICTURES" ADDITIVE
SET PATH TO "API" ADDITIVE
SET PATH TO "DLL" ADDITIVE

* Смотрим, что настроили
?SET("PATH")

Если же в настройке указывается список путей, то настройка SET PATH удаляет ранее сделанные настройки вне зависимости от наличия опции ADDITIVE. При этом, наличие опции ADDITIVE приводит к парадоксальным результатам

Код: plaintext
1.
2.
3.
4.
SET PATH TO PROGS
?SET("PATH")
SET PATH TO FORMS,LIBS ADDITIVE
?SET("PATH")
...
Рейтинг: 0 / 0
пути к базе данных
    #37408381
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SET PATH TO – точно работает, но только до поры до времени.
Проблема в программе main.prg.
Понятия не имею что она делает с SET PATH TO, но он перестает действовать.
Я изменял в программе SET PATH TO, но ничего не выходит, на проверке выдает что файл не найден.
...
Рейтинг: 0 / 0
пути к базе данных
    #37408662
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, еще раз. Пожалуйста, прочитай внимательно

Команда SET PATH отменяет (удаляет, затирает) ранее сделанные настройки PATH

Файл конфигурации config.fpw при помощи опции PATH сделал настройку путей доступа. Затем, в твоем главном файле в функции SetPath() ты сделал свою настройку SET PATH и удалил настройку, сделанную в файле конфигурации.

Как решить проблему? Есть два принципиальных варианта

1. Использовать специальный синтаксис команды SET PATH, который был введен только в VFP9, чтобы дополнить, а не удалить, ранее сделанную настройку. Для версий младше VFP9 придется делать "конструктор" с макроподстановкой.

2. Вообще не использовать команду SET PATH в приложении. А настройку путей доступа делать только и исключительно в файле конфигурации config.fpw

Какой вариант объяснять дальше? Кстати, о какой версии FoxPro идет речь?
...
Рейтинг: 0 / 0
пути к базе данных
    #37409128
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, команда SET PATH затирает настройки PATH в файле config.fpw. Просто я сразу в код не полез а начал так настраивать, а когда тестировал отладчиком заметил.
У меня версия VFP 9.
1. Если возможна небольшая коррекция файла config.fpw, без изменения кода, то этот вариант мне подходит.
2. Я пытался не использовать команду SET PATH в приложении – но кроме кучи ошибок у меня ничего не вышло.
...
Рейтинг: 0 / 0
пути к базе данных
    #37409446
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay1. Если возможна небольшая коррекция файла config.fpw, без изменения кода, то этот вариант мне подходит.
Без изменения кода - не получится. Ведь проблема именно в этом самом коде. Как изменить, уже показал

11165753

Allkay2. Я пытался не использовать команду SET PATH в приложении – но кроме кучи ошибок у меня ничего не вышло.
Нужны два файла конфигурации. Один для разработки приложения, другой - для готового приложения. В файле конфигурации указать ВСЕ необходимые пути

На этапе разработки приложения

Код: plaintext
PATH = PROGS, FORMS, LIBS, MENUS, DATA, OTHER, REPORTS, INCLUDE, HELP, PICTURES, API, DLL

Для готового приложения

Код: plaintext
PATH = D:\database\data\, HELP, PICTURES, API, DLL
...
Рейтинг: 0 / 0
пути к базе данных
    #37410148
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

Я здесь немножко по экспериментировал с проектом.
Заходил в проект через ярлык (ярлык прописан "C:\Program Files\Microsoft Visual FoxPro 9\vfp9.exe" -T -C"D:\uasnew1\config.fpw").

В config.fpw прописано:
SCREEN=ON
CODEPAGE=1251
statusbar=off
PATH = PROGS, FORMS, LIBS, MENUS, D:\database\data\, OTHER, REPORTS, INCLUDE, HELP, PICTURES, API, DLL

Запускал тестировщика и смотрел где что вылетает, соблюдая точность выполнения программы. Там есть несколько моментов, если не сложно посмотрите. Огромное спосибо за вашу помощь.
...
Рейтинг: 0 / 0
пути к базе данных
    #37410178
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,
Перед этой строкой выведи на экран значение cDataBase

wait "Значение cDataBase = " + this.cDataBase window
IF !EMPTY(this.cDataBase)

и посмотри, что покажет
...
Рейтинг: 0 / 0
пути к базе данных
    #37410419
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже несколько раз повторил: удалите настройку SET PATH из программы или адаптируйте ее под совместное использование с config.fpw У Вас функция setPath() по прежнему удаляет настройку сделанную в config.fpw .

Какой смысл делать настройку в config.fpw, если Вы ее все-равно не используете?
...
Рейтинг: 0 / 0
пути к базе данных
    #37411120
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В файл config.fpw снял настройки ‘PATH’, оставил только в коде.

Вот последний цикл перед ошибкой.

7. mainobj.vcx:person.bcapplication.init .

Код: plaintext
1.
2.
3.
This.AddObject("oEnvironment", "bcEnvironment")
This.oEnvironment.Set()
this.cOldMainWindowCaption = _screen.Caption
_screen.caption = this.cMainWindowCaption

ЗАПРОС: .
Код: plaintext
?SET("PATH")

ОТВЕТ: .
Код: plaintext
[PROGS, FORMS, LIBS, MENUS, D:\DATABASE\DATA\, OTHER, REPORTS, INCLUDE, HELP, PICTURES, API, DLL]

Код: plaintext
CLOSE DATA ALL

ЗАПРОС: .[/src]
Код: plaintext
wait "Значение cDataBase = " + this.cDataBase window

ОТВЕТ: .
Код: plaintext
[Значение cDataBase = DATA\BDUASKI]

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
wait "Значение cDataBase = " + this.cDataBase window

IF !EMPTY(this.cDataBase)
  OPEN DATABASE (this.cDataBase) – ОШИБКА 
  IF EMPTY(DBC())
    =MessageBox(FILENOTEXIST_LOC + this.cDataBase, ;
                 0  +  16 , ;
                ERRORTITLE_LOC)
    RETURN .F.
  ENDIF
ENDIF
...
Рейтинг: 0 / 0
пути к базе данных
    #37411141
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что из этого кода следует? Вопрос-то в чем?

Если Вы думаете, что по разрозненным фрагментам кода можно догадаться в чем ошибка, то Вы ошибаетесь. Откуда я могу знать как и где Вы заполняете свойство this.cDataBase? Вы вообще-то его заполняете? Почему в этом свойстве оказался фрагмент пути доступа?

Нужен полноценный рабочий код, воспроизводящий проблему. Напишите тестовый проект, где будет один файл PRG и один класс, выполняющий открытие базы данных. Вот этот тестовый проект и положите во вложение. Тогда можно будет указать, где в этом коде ошибка. А так, Вы постоянно будете говорить "я сделал, а не работает". Естесственно не работает, ведь неизвестно ЧТО Вы сделали.
...
Рейтинг: 0 / 0
пути к базе данных
    #37411189
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня IgorNG попросил что бы я сделал запрос
Код: plaintext
 wait "Значение cDataBase = " + this.cDataBase window  
а
Код: plaintext
?SET("PATH")
я сам решил посмотреть настройки "PATH" – сохраняются они или нет.

Но это уже не беда.
Все изначально работало и было правильно, не работало из-за мелочи.
Нужно было прописать
Код: plaintext
[PROGS, FORMS, LIBS, MENUS, D:\DATABASE\, OTHER, REPORTS, INCLUDE, HELP, PICTURES, API, DLL]
а не
Код: plaintext
[PROGS, FORMS, LIBS, MENUS, D:\DATABASE\DATA\, OTHER, REPORTS, INCLUDE, HELP, PICTURES, API, DLL]
Я изменил, прога с компилировалась и запустилась.
Прошелся тестировщиком, и он тоже не показал ошибок
...
Рейтинг: 0 / 0
пути к базе данных
    #37411193
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

А из командного окна:

cDataBase = "DATA\BDUASKI"
OPEN DATABASE (cDataBase)

Что получишь?
...
Рейтинг: 0 / 0
пути к базе данных
    #37411215
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но вот беда, приложение запускается но когда я выбираю какую ни будь формы на запуск появляется сообщение:

Может это быть из-за Data Environment или Control Source?
...
Рейтинг: 0 / 0
пути к базе данных
    #37411231
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNG
Из командного окна:

cDataBase = "DATA\BDUASKI"
OPEN DATABASE (cDataBase)

А получаю ответ
...
Рейтинг: 0 / 0
пути к базе данных
    #37411233
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

Так, ты что думаешь, что открыл контейнер базы данных и у тебя все таблицы, находящиеся в ней открыты? А в DE зачем нужно, если вручную открываешь?
...
Рейтинг: 0 / 0
пути к базе данных
    #37411294
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNG,

Да этого момента я об этом не думал.
Получается, что, нужно в начале каждой программы открывать отдельные таблицы?


А в DE зачем нужно, если вручную открываешь?

А с этого места по подробнее…
...
Рейтинг: 0 / 0
пути к базе данных
    #37411299
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AllkayIgorNGИз командного окна:

cDataBase = "DATA\BDUASKI"
OPEN DATABASE (cDataBase)

А получаю ответ

Fox не обманешь - значит не лежит там БД
...
Рейтинг: 0 / 0
пути к базе данных
    #37411329
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AllkayIgorNG,

Да этого момента я об этом не думал.
Получается, что, нужно в начале каждой программы открывать отдельные таблицы?


А в DE зачем нужно, если вручную открываешь?

А с этого места по подробнее…

А зачем они в DE? Да еще, наверняка с AutoOpen. Нужно делать все руками - закрывать и открывать. Тогда и весь процесс будет под контролем. Я точно не помню, но по-моему, если БД запихиваешь в DE, которая лежит в определенном месте, так в этом месте и будет пытаться открыть ее. Не понял вопроса "в начале каждой программы". Что ты имеешь ввиду под каждой программой?
...
Рейтинг: 0 / 0
пути к базе данных
    #37411372
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNGА зачем они в DE? Да еще, наверняка с AutoOpen. Нужно делать все руками - закрывать и открывать. Тогда и весь процесс будет под контролем.
Это один из главных аргументов против использования DE. Именно желание всегда и все контролировать. Для большинства задач в этом нет никакой необходимости. Хотя, конечно, есть исключения.

Именно по причине желания все контролировать в данном случае и "огребли" кучу проблем. Я настойчиво твержу, что SET PATH в коде использовать НЕ НАДО, тем не менее, этот совет игнорируется и по прежнему лепят проблему на проблеме. Ну, успехов в борьбе с глюками...

IgorNG Я точно не помню, но по-моему, если БД запихиваешь в DE, которая лежит в определенном месте, так в этом месте и будет пытаться открыть ее.
Если таблица включена в контейнер базы данных, то пути доступа к таблицам прописаны в собственно контейнере базы данных. И открываются после открытия этого самого контейнера.

Если "вскрыть" файл формы с DE, то в свойствах курсора будет написано нечто вроде

Код: plaintext
1.
2.
3.
4.
Alias = "table1"
Database = data1.dbc
CursorSource = "table1"
Name = "Cursor1"

Т.е. ссылка только и исключительно через DBC. Как следствие, если контейнер открыт и сделан текущим в начале приложения, то именно его таблицы и будут открываться при открытии форм с DE.
...
Рейтинг: 0 / 0
пути к базе данных
    #37411402
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМIgorNGА зачем они в DE? Да еще, наверняка с AutoOpen. Нужно делать все руками - закрывать и открывать. Тогда и весь процесс будет под контролем.
Это один из главных аргументов против использования DE. Именно желание всегда и все контролировать. Для большинства задач в этом нет никакой необходимости. Хотя, конечно, есть исключения.

Именно по причине желания все контролировать в данном случае и "огребли" кучу проблем. Я настойчиво твержу, что SET PATH в коде использовать НЕ НАДО, тем не менее, этот совет игнорируется и по прежнему лепят проблему на проблеме. Ну, успехов в борьбе с глюками...

IgorNG Я точно не помню, но по-моему, если БД запихиваешь в DE, которая лежит в определенном месте, так в этом месте и будет пытаться открыть ее.
Если таблица включена в контейнер базы данных, то пути доступа к таблицам прописаны в собственно контейнере базы данных. И открываются после открытия этого самого контейнера.

Если "вскрыть" файл формы с DE, то в свойствах курсора будет написано нечто вроде

Код: plaintext
1.
2.
3.
4.
Alias = "table1"
Database = data1.dbc
CursorSource = "table1"
Name = "Cursor1"

Т.е. ссылка только и исключительно через DBC. Как следствие, если контейнер открыт и сделан текущим в начале приложения, то именно его таблицы и будут открываться при открытии форм с DE.

Давно не пользовался DE, вот и забыл. Кстати, и Wizardфми тоже не пользуюсь - только на первом этапе знакомства с Visual FoxPro
...
Рейтинг: 0 / 0
пути к базе данных
    #37411777
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В коде удалил “PATH”. Только в файле config.fpw прописаны пути к директориям.

Компиляция бес ошибок.

Запуск задачи:
Сопровождение ИК → Отметка о выполнении = должна открыться форма, Но в место этого Ошибка.

Проект изначально создавался через Проект Менеджер, со всеми директориями.
Я “жестоко” перенес директорию DATA и создал на диск D:\.

Формы создавались “New Form” ? открывался DE добавлялись таблицы, представления и просто курсоры (на форме создавались компоненты а за частую просто перетаскивались из DE).

В файлах с DE прописано

SET DELETED ON

DODEFAULT()

SELECT AUTOR

CREATE CURSOR

НО ни где не прописано открытие БД, открытие ТАБЛИЦ.
...
Рейтинг: 0 / 0
пути к базе данных
    #37411783
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СОРИ не та картинка
...
Рейтинг: 0 / 0
пути к базе данных
    #37411812
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

из картинки ничего не понятно
...
Рейтинг: 0 / 0
пути к базе данных
    #37411841
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первая картинка ЭТО какая ошибка вылетает

Вторая картинка Какое приложение запускаю(Типа: ФАЙЛ→Сахронить как → Вылетает форма)
...
Рейтинг: 0 / 0
пути к базе данных
    #37411932
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Провел эксперимент:
1. Создал FORM
2. Добавил в DE таблицу, из БД.
(БД -- находится на диске D:\DATABASE\DATA)
3. Перетащил БД на FORM
4. Ни чего не прописывал, ни на FORM ни в DE
5. Добавил FORM в меню
6. С компилировал проект
7. Запустил вуаля – работает (но только эта форма!?)

К стати в VFP для что бы редактировать форму нужно копировать директорию DATA в папку с проектом, а иначе ОШИБКА «БД не существует» Хотя в Project Manager БД добавлена. Мало того что добавлена да и еще и открыта (можно просматривать таблицы). А мною созданную форму можно редактировать.
...
Рейтинг: 0 / 0
пути к базе данных
    #37411964
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

так вот что не заниматься копирование папок, я и говорил, что нужно обходиться без DE, а открывать все что нужно ручками

OPEN DATABASE .....
USE <Table> IN 0 SHARED ALIAS ...
и .д.

Весь процесс под контролем. А когда БД в DE, а потом перетащил папку с базой в другое место и все - ошибка.
...
Рейтинг: 0 / 0
пути к базе данных
    #37411992
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А VFP где ни будь запоминает откуда я в DE добавлял таблицы?

Я еще думал что то что я перетаскиваю в DE можно настроить.

А если я буду прописывать

OPEN DATABASE .....
USE <Table> IN 0 SHARED ALIAS ...

в ручную, то что тогда config.fpw не нужен? или нужен?

И OPEN DATABASE ..... и USE <Table> IN 0 SHARED ALIAS ... прописывать путь полностью?
...
Рейтинг: 0 / 0
пути к базе данных
    #37412021
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

Когда добавляешь в DE выводится диалоговое окно, в котором укабываешь БД. Естественно, что запоминается именно эта база данных. Если открываешь ручками, а в DE ничего нет, то будет искаться по путям, прописанным в конфиге, о чем собственно тебе и говорят все уже который день.
...
Рейтинг: 0 / 0
пути к базе данных
    #37412094
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так получается, что в моем проекте нужно удалять таблицы из DE и в коде прописывать ручками пути?
...
Рейтинг: 0 / 0
пути к базе данных
    #37412105
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

Из DE удалять. Зачем пути прописывать ручками? Путь в конфиге укажешь.
...
Рейтинг: 0 / 0
пути к базе данных
    #37412154
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле не пути прописывать а открывать в начале!? и БД и Таблицы?
...
Рейтинг: 0 / 0
пути к базе данных
    #37412215
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ
Извините за повторение (чуть выше мы с Игорем осуждали этот вопрос)
Очень важно ваше мнение

Вы сказали:

Код: plaintext
1.
2.
Т.е. ссылка только и исключительно через DBC. Как следствие, если 
контейнер открыт и сделан текущим в начале приложения, то именно его 
таблицы и будут открываться при открытии форм с DE.

Так что делать с Проектом удалять таблицы из DE ?
...
Рейтинг: 0 / 0
пути к базе данных
    #37412266
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

Вообще-то DE в форме, а не в проекте. По-моему у вас путаница с понятиями. В проекте у вас БД
...
Рейтинг: 0 / 0
пути к базе данных
    #37412316
Ffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сколько лет работаю с FoxPro, ни разу не возникали проблемы с путями. Вообще не понимаю, почему почти у всех начинающих они появляются.
...
Рейтинг: 0 / 0
пути к базе данных
    #37412353
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ffffffffffffffff,

Так у него бы все работало бы, если б не задумал базы в другое место кинуть.
...
Рейтинг: 0 / 0
пути к базе данных
    #37412361
Ffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обычная ситуация.
...
Рейтинг: 0 / 0
пути к базе данных
    #37412405
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможны разные стратегии настройки путей доступа. Но если уж Вы выбрали какую-то из них, то ее и следует придерживаться. Вы же смешали в кучу несколько стратегий и в результате, получили "кашу". Та стратегия, про которую я говорю решается при выполнении следующих условий

1. Никакие явные (прописанные в коде) указания на файл не должны иметь путей доступа. Только и исключительно имя файла
2. Настроек SET PATH в коде быть не должно. Пути доступа прописываются исключительно в файле конфигурации
3. Нужны два файла конфигурации . Один для создания и отладки приложения, другой для готового EXE


Если Вы собираетесь придерживаться этой стратегии, то у Вас 2 проблемы

Проблема 1 . Вы включили указание на директорию где-то в своих настройках имени базы данных

this.cDataBase = "DATA\BDUASKI"

Вот именно это явное указание путей доступа и "ломало" весь алгоритм поиска. Естесственно, Вам пришлось "мудрить" и удалять ссылку на папку DATA из настроек SET PATH, чтобы при "сложении" с указанным путем получить нужную директорию. Необходимо сделать настройку БЕЗ указания пути доступа

this.cDataBase = "BDUASKI.dbc"

Проблема 2 . Судя по описанию, на этапе разработки Вы не используете файл конфигурации. Как следствие, при удалении настроек SET PATH из программы Вы вобще теряете все пути доступа и на этапе отладки приложение отказывалось работать.


Для справки :

DE запоминает только относительный путь доступа к контейнеру базы данных (к файлу DBC). Относительно той директории, которая была текущей на момент добавления таблицы в DE. Путь доступа непосредственно к таблицам там вообще не хранится. Это уже контейнер базы данных занимается поиском таблиц.

Именно поэтому, предварительное открытие только собственно контейнера базы данных в стартовой программе, как правило, снимает вопрос поиска таблиц вообще. Контейнер уже открыт и где какая таблица находится он сам знает.


PS: Отказ от использования DE и "ручное" открытие/закрытие таблиц, в подавляющем большинстве случаев объясняется исключительно личными предпочтениями программиста . Есть ситуации, когда это действительно оправдано. Но, в большинстве случаев вполне достаточно использовать DE.
...
Рейтинг: 0 / 0
пути к базе данных
    #37413159
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

Даже не знаю что и сказать. Сам не понял как это вышло, и наверное не пойму.

В начале я по всему коду искал

this.cDataBase = "DATA\BDUASKI"
this.cDataBase = "BDUASKI.dbc"

но не нашел и решил было написать что не нашел.

Но патом все эти формы, их открытие, коды, ODBC Driver, config.fpw меня достали и я удалил проект.
Проект был экспериментальным (оригинал хранился в другой дирректориии), в нем я создавал новые отчеты, формы. Потом из папки с скопировал оригинальный Проект. Удалил директорию с папкой DATA, прописал PATH в файле config.fpw. На этапе отладки приложения открывая форму он попросил указать папку с БД – я указал и форма открылась (в предыдущий рас он не просил открыть, он говорил что не нашел БД).
Потом скомпилировал проект, запустил и ПРОЕКТ РАБОТАЕТ.
...
Рейтинг: 0 / 0
пути к базе данных
    #37420681
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

Прога работает все вроде ничего, но есть проблемы с «локальным представлением».

После запуска приложения я выбираю какую ни будь задачу (просмотр отчета, просмотр карточки и тд.). Задача запускается, все показывает, (в задаче есть под пункты, при просмотре карточки можно нажать кнопку Далее отобразится отдел, Далее имя администратора Далее дата закрытия карточки) но если нажать кнопку Назад выбрать другую карточку, снова нажать кнопку Далее выскочит диалоговое окно «Откройте таблицу Whom.DBF» хотя «Whom» это не таблица а локальное представление.
...
Рейтинг: 0 / 0
пути к базе данных
    #37420715
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

Значит, оно закрывается в какой-то момент
...
Рейтинг: 0 / 0
пути к базе данных
    #37421067
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNG,

Явное закрытие представлений, курсоров или таблиц нет.
В задаче участвуют два формы:
Сначала запускается первая форма. На этой форме есть три вкладки. Во второй вкладке используется Представление WHOMISP. Но можно перемещаться с первой на вторую вкладку на третью и обратно сколько угодно рас – работает.

Код программы используемый на второй вкладке, где используется представление WHOMISP:
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT t1_al
SELECT naimp,fio_isp,fio_kur,dnei,dn_per,;
IIF(!ISNULL(whomisp.fio),ALLTRIM(whomisp.fio),SPACE( 30 )) as fio_komu,pointsod,doctitle,t1_al.regnumb,docname,t1_al.pointnumb, t1_al.d_fact;
 FROM t1_al LEFT JOIN whomisp ON (whomisp.regnumb)+'('+ALLTRIM(whomisp.pointnumb)+')'=ALLTRIM(regn);
 WHERE t1_al.fio_isp=t2_al.fio_isp;
 INTO CURSOR t4_al
На третей вкладке есть кнопка вызова Второй формы (просмотр дат карт), в нее передаются параметры из первой. Во Второй форме нет явного закрытия курсоров или таблиц.
После закрытия Второй формы, на третей вкладке Первой формы можно выбрать другой пункт и опять запустить Вторую форму – сколько угодно рас – работает.
Но.
После закрытия Второй формы, из третей вкладки Первой формы вернуться на вторую вкладку Первой формы и обратно на третью откроется диалоговое окно «Откройте таблицу WHOMISP.DBF»
...
Рейтинг: 0 / 0
пути к базе данных
    #37421163
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

В каком событии этот код написан?
...
Рейтинг: 0 / 0
пути к базе данных
    #37421263
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNG,

Вот только в этом коде и используется представление WHOMISP, больше ни где не открывается и не закрывается.
И когда я ему открыл таблицу на которой основано представление WHOMISP,
Вот что вышло:
...
Рейтинг: 0 / 0
пути к базе данных
    #37421310
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNG,

Это все из-за БД, она расположена на E:\DATABASE\DATA\, потому что когда я копирую ее обратно в директорию с проектом, и возвращаю все настройки в исходные – работает как и должно.
...
Рейтинг: 0 / 0
пути к базе данных
    #37421332
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

В запросе ALLTRIM(regn). regn - это переменная?
...
Рейтинг: 0 / 0
пути к базе данных
    #37421336
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

Правильно. Представление откуда берет данные? Из таблиц. Представление небось мастером делал. Указывал конкретные таблицы, а потом их переместил.
...
Рейтинг: 0 / 0
пути к базе данных
    #37421365
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

Правильно. Представление откуда берет данные? Из таблиц. Представление небось мастером делал. Указывал конкретные таблицы, а потом их переместил.
...
Рейтинг: 0 / 0
пути к базе данных
    #37421385
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNG,

(ALLTRIM(kard.regnumb)+'('+ALLTRIM(pointtask.pointnumb)+')') as regn

Да, через мастер, а что делать!?
...
Рейтинг: 0 / 0
пути к базе данных
    #37421387
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNG,

kard.regnumb – таблица и поле
pointtask.pointnumb – таблица и поле
...
Рейтинг: 0 / 0
пути к базе данных
    #37421389
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

Я уже говорил о контроле. Если бы сам, ручками написал запрос, не нужно было бы париться с представлением, которое сгенерил мастер из указанных таблиц (с смысле - ОПЯТЬ пути).
...
Рейтинг: 0 / 0
пути к базе данных
    #37421418
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNG,

А что с этим Представлением можно сделать?
А если с Локальным представлением возникла ошибка, то с Удаленным тоже может возникнуть?
...
Рейтинг: 0 / 0
пути к базе данных
    #37421441
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Allkay,

А для каких целей представление? А курсор. А еще лучше курсор адаптер.
...
Рейтинг: 0 / 0
пути к базе данных
    #37421537
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNG,

Честно, не знаю, я это приложение не создавал.
Но посмотрел, что там, настроено только «GroupBy» и «UpdateCriteria», ни каких фильтров и объединений, т.к. используется только одна таблица.
Получается просто отредактированная таблица.

Курсор в принципе не плохо, я бы так и сделал будь это моя задача.

Получается переделать представление не получится, только в ручную?!
...
Рейтинг: 0 / 0
пути к базе данных
    #37421935
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз. Видимо и для IgorNG

Если таблица включена в контейнер базы данных, то нигде и никоим образом, путь доступа к этой таблицы FoxPro сам не прописывает. Т.е. мастера пути доступа к таким таблицам не указывают .

Все таблицы, включенные в контейнер базы данных, ищет этот самый контейнер. Он сам "знает" где эти таблицы находятся. У него "внутри" эти самые пути доступа записаны. Соответственно, все мастера FoxPro прописывают путь доступа только и исключительно к контейнеру базы данных. К файлу DBC.

Однако есть небольшая тонкость. С целью экономии места и для облегчения переноса приложения, во всех подобных случаях, записываются относительные пути доступа. Вопрос в том, относительно чего?

Путь доступа к таблицам DBF в контейнере базы данных записан относительно той директории, где расположен сам контейнер. А вот путь доступа до контейнера в DataEnvironment записывается относительно той директории, которая была текущей на момент добавления таблицы в DataEnvironment.

------------------------------------------------------------

По поводу Local View.

Local View - это объект контейнера базы данных. Он физически находится внутри самого контейнера. Внутри DBC. Как следствие, никаких путей доступа он вообще НЕ ХРАНИТ . Зачем ему знать эти пути, если он сам "живет" внутри того объекта, который использует?

-----------------------------------------------------------

По поводу ошибки.

Здесь явно и однозначно произошло закрытие Local View или переход в другую DataSession. Кроме явных способов закрытия, существуют еще и не явные. Например, открытие таблицы в рабочей области, где ранее была открыта другая таблица автоматически закроет эту самую другую таблицу. Молча. Без каких-либо сообщений об ошибках.

Поскольку самой формы мы так и не увидим, то гадать как же именно произошло это закрытие можно долго и безуспешно. Либо прикладывайте форму во вложении, либо ищите ошибку сами.
...
Рейтинг: 0 / 0
пути к базе данных
    #37422200
BreDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

Я удивляюсь Вашему терпению. Вам учителем младших классов надо было идти.
Мало того автор топика мимо ушей все пропускает так еще тут "помощник" обїявился который только путает автора
...
Рейтинг: 0 / 0
пути к базе данных
    #37422304
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,
...
Рейтинг: 0 / 0
пути к базе данных
    #37422899
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запустить формы на исполнение, чтобы получить ошибку - невозможно. В архиве нет много чего. Если судить по коду, то, вроде бы, ничего такого, что могло бы привести к закрытию представления WHOMISP в приложенных файлах нет. Но!

- Подчиненная форма создана с использованием библиотеки классов baseobj.vcx. Что именно написано в этой библиотеке - не известно
- Подчиненная форма НЕ модальная (если только это не указано в библиотеке baseobj.vcx). Это значит, что возможен переход в какие-либо другие формы, где и могло произойти закрытие представления
- Из подчиненной формы могут быть вызваны еще две формы: форма календаря (do form kalend) и форма сообщений (DO FORM frmYesNo). Ничего не известно о работе с данными в этих формах
- Сильно подозрительно выглядит вызов форм изнутри Grid. Крайне желательно перед вызовом форм сделать явный переход (через setFocus()) на другой объект формы
- Из описания ошибки не ясно, проблема возникает только после вызова подчиненной формы? Или же достаточно просто перейти на 3 закладку, пощелкать там по Grid и вернуться на 2 закладку, чтобы "потерять" WHOMISP


Я бы написал в окне Watch() отладчика функцию USED("WHOMISP") и поставил слева от нее точку останова. В этом случае, произойдет автоматический переход в окно отладчика, если значение этой функции изменится. Понятно, что первый переход произойдет в момент открытия формы. Но зато когда произойдет закрытие представления, также будет выполнен переход в окно отладчика и можно будет увидеть, какой именно метод вызвал закрытие.
...
Рейтинг: 0 / 0
пути к базе данных
    #37423378
Allkay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

Я глубоко извиняюсь за свою не образованность, но вышла такая ситуация. Не зная как с помощью отладчика написать «функцию USED("WHOMISP") и поставить слева от нее точку останова». Я на всех этапах, а точнее на кнопках Page 2 и Page 3 прописал

MESSAGEBOX(USED("WHOMISP")).

Скомпилировав и запустив процесс он выдавал на всех сообщениях «.Т.», и формы открывались и закрывались, переходил с одной вкладки на другую и обратно бес ошибок.
Даже после выхода из VFP и нового запуска VFP все работало нормально. Даже после того как я снял это сообщение тоже работало.

Внимание.
До того как было прописано MESSAGEBOX(USED("WHOMISP")) – форма не работала!!!.
...
Рейтинг: 0 / 0
пути к базе данных
    #37423467
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AllkayЯ глубоко извиняюсь за свою не образованность, но вышла такая ситуация. Не зная как с помощью отладчика написать «функцию USED("WHOMISP") и поставить слева от нее точку останова». Tools-Debugger, откроется окно отладчика, в нём в главном меню Window-Watch, откроется окно Watch, туда и пишите.

AllkayДо того как было прописано MESSAGEBOX(USED("WHOMISP")) – форма не работала!!!.Ну теперь-то работает, вот и хорошо - цель достигнута
...
Рейтинг: 0 / 0
пути к базе данных
    #37423468
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, видимо в процессе расстановки или удаления MessageBox() что-то все-таки было изменено в формах.
...
Рейтинг: 0 / 0
92 сообщений из 92, показаны все 4 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / пути к базе данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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