powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / пути к базе данных
25 сообщений из 92, страница 2 из 4
пути к базе данных
    #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
25 сообщений из 92, страница 2 из 4
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / пути к базе данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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