Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Elsif Автор Сообщений: 14 Дата регистрации: 05.02.2020 |
![]() DataEnvirontment тянет таблицы из .\db\, хотя на загрузке формы четко прописано откуда их надо брать. Стоит путь к базе, потом закрытие таблиц в de, присвоение им базы из переменной и имени курсора в бд, потом открытие. А оно всё равно лезет не туда (( Причем только на терминальном сервере программа так себя ведёт. Локально на компе пробовала - куда базу ни положи, при настройке пути все ок. ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Elsif Автор Сообщений: 14 Дата регистрации: 05.02.2020 |
А, нет, локально тоже тупит.
Памагити! ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Elsif Автор Сообщений: 14 Дата регистрации: 05.02.2020 |
А теперь вообще если в load формы пытаться написать thisform.dataenv... - не выскакивает подсказка, как будто DE на форме нет.
![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Elsif Автор Сообщений: 14 Дата регистрации: 05.02.2020 |
Но при этом я проверяю на ините формы какая бд у таблиц в de - присвоена правильная база данных, а таблицы открываются правильные. Неправильно открываются представления, а не таблицы, оказывается! ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Владимир Максимов Сообщений: 14041 Откуда: Москва Дата регистрации: 02.09.2000 |
Когда Вы включаете таблицу в DataEnvironment, то Вы также записываете и путь доступа к этой таблице. Но! Путь доступа относительный. Относительно той директории, которая является текущей в момент включения таблицы в DataEnvironment
Когда Вы запускаете форму на выполнение, то FoxPro, предпринимает попытку найти указанную таблицу по тому пути, который оказался записан в DataEnvironment. Напоминаю, что это относительный путь. Но теперь относительно текущей директории в момент вызова формы Если файл не найден, то далее выполняется поиск в следующих директориях 1. Внутри файла EXE или APP, который в настоящий момент выполняется (если таблицы в него включены) 2. В текущей на данный момент директории 3. В директориях, указанных в настройках SET PATH Но! Это все работает, если речь идет о свободных таблицах DBF не включенных в контейнер базы данных (DBC). Если же таблицы включены в контейнер базы данных, то все описанное выше будет относится не к поиску самой таблицы (DBF), а к поиску именно контейнера базы данных (DBC). После открытия контейнера базы данных таблицы будут найдены по относительным путям, которые записаны внутри контейнера базы данных. Там опять же относительные пути. Есть вариант программного изменения путей доступа именно внутри DataEnvironment forum.foxclub.ru Но, на практике, проще сделать ряд организационных мероприятий 1. Файлы DBF, включенные в контейнер базы данных, физически всегда должны быть расположены в той же папке, что и сам контейнер базы данных (DBC). 2. При запуске приложения (еще до открытия каких-либо форм) желательно сразу открыть DBC по нужному пути доступа. Если форма запущена в Default DataSession, то этого будет достаточно. Если в Private DataSession, то организовать открытие DBC в Load-формы ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Elsif Автор Сообщений: 14 Дата регистрации: 05.02.2020 |
Dbf и dbc вместе лежат, я прям выкинула таблицу и представление в таблицу на диск - таблица открыта правильная, а представление как будто построено на таблице по другому пути.
![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Elsif Автор Сообщений: 14 Дата регистрации: 05.02.2020 |
В main.prg всегда пишу объявление глоб.переменных и открытие .dbc Так что это тоже написано уже. ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Владимир Максимов Сообщений: 14041 Откуда: Москва Дата регистрации: 02.09.2000 |
Речь идет о Local View? Надо смотреть, на сконструированный запрос. Что указано в качестве источника данных (опции FROM, JOIN)? Указан ли там путь доступа и расширение? Теоретически, должно быть только имя таблицы без пути доступа и без расширения
Но, для гарантии, лучше сделать следующее 1. Явным образом добавить в DataEnvironment таблицы-источники этого View. То, что указано в опциях FROM и JOIN 2. У самого View установить NoDataOnLoad = .T. - это настройка в DataEnvironment у курсора для View 3. Наполнение View данными через REQUERY( ) уже в init()-формы Если версия Visual FoxPro 8 или старше, то лучше вместо Local View использовать объект CursorAdapter. Если есть сомнения, что используются разные базы данных, то можно посмотреть список открытых баз через ADATABASES(). Второй столбец массива - это путь доступа к соответствующему DBC. ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Elsif Автор Сообщений: 14 Дата регистрации: 05.02.2020 |
1-3 - всё так С Cursor Adapter не сталкивалась - пошлите куда-нибудь почитать, пожалуйста. ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Владимир Максимов Сообщений: 14041 Откуда: Москва Дата регистрации: 02.09.2000 |
С точки зрения путей доступа в Local View все корректно.
Как определили, что не по тем таблицам запрос выполнен? Пробовали сделать запрос напрямую к нужным таблицам? Есть ряд функций, которые могут помочь идентифицировать именно сами файлы-источники. Надо в форме для целей отладки их выполнить и посмотреть, что вернут ADATABASES() - возвращает массив открытых DBC. Там есть полный путь доступа к файлу. Можно будет понять какой DBC открыт AUSED() - список открытых курсоров. Тоже массив. Для каждого алиаса использовать DBF(), чтобы узнать, какой файл DBF открыт под этим алиасом CursorAdapter - это программная оболочка над запросами. Вот все то, что делает View делает и CursorAdapter (плюс еще сверху много чего), но объект не привязан к контейнеру базы данных. Это "внешний" по отношению к DBC объект. Примеры работы с CursorAdapter на этом форуме можно поискать. ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Elsif Автор Сообщений: 14 Дата регистрации: 05.02.2020 |
В представлении, которое из базы смотрю, записей намного больше (порядка 60тыс, как и в таблице на основе которой он сделан). А при запуске формы почему-то представление берёт таблицу, которая лежит в папке с экзешником, по пути .\db\ - там меньше записей (10 тыс) и некоторые из них я сознательно попортила, чтобы проверить откуда берутся данные.
В общем-то не первый раз такую схему использую в фоксовской программе. Но именно сейчас, когда сроки "горят" - Фокс решил меня свести с ума (( Попробую завтра aused() проверить ещё ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
leonid Сообщений: 3176 Откуда: Рига Дата регистрации: 03.02.2006 |
Помнится когда-то давным давно для решения этой проблемы помещал в Projecthook в метод BeforeBuild примерно такой код
P.S. Ну пути там вероятно нужно скорректировать Исправлено 1 раз(а). Последнее : leonid, 02.03.23 20:17 ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
of63 Сообщений: 24232 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
() в фоксе последовательность встроенных операций (выполнения методов, типа Init (экрана и обьектов)), и в случае DE тоже самое (тоже самое - просто надо узнать, когда и что происходит). Это можно узнать без "хелпа" (в нем совсем не все), но путем проведения опыта - поставьте точку останова в любом месте, или опертор "SET STEP ON", и в "отладчике" вы увидите (подведя мышку, и т.п.) значения переменных, "дефаулты", всё как в командном окне. Кстати, в окне значений переменных можно писать не только имена переменных, но и функции (не все), и макросы (с амперсанда если начать имя)
Да, забыл сказать слово "стек". Да, Фоксовый язык, раз имеет подпрограммы, то он в этом смысле обычный штатный Си-подобный язык... Если вы явно не видите вызывающе программы в стеке (типа метода Init ), то она вызвана внутренним механизмомо фокса. Но Это внутренний механизм тоже немного описан (просто надо вьехать в приципы построения ООП фокса, в последовательность, идею инициализаций обьектов на форме в т.ч) Ребята сделали фокс простым и в ООП, много скрыли (сделали умолчательным) нарисовали хелп, который здешние ребята и девушки заботливо (идеально, ну, не везде, между нами) ) перевели. () Если желания нет во все это вникать, то есть языки и поподатливее молоды умам. Фокс - уж очень немодный Исправлено 2 раз(а). Последнее : of63, 02.03.23 21:47 ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Elsif Автор Сообщений: 14 Дата регистрации: 05.02.2020 |
Ну другой язык в данном случае не совсем уместен. Проект довольно большой, рабочий, написан на фоксе. Поддержку таких никто не отменял. Просто стрельнуло некоторым его изменить и как обычно "ещё вчера". Ну поменять то я поменяла, но давно уже практики не было и боюсь что забыла какую-то мелочь.
![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Taran Сообщений: 13522 Откуда: Красноярск Дата регистрации: 16.01.2008 |
DE - пережиток прошлого. Открывать таблицы надо ручками при необходимости и явно указывать пути.
![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Elsif Автор Сообщений: 14 Дата регистрации: 05.02.2020 |
А LocalView?
Кстати, именно на этой форме была проблема. Сначала я явно прописала пути к таблицам, без добавления их в DE (там были только представления). Но данные брались не оттуда и я решила и таблицы в DE засунуть. В общем мега странно себя в этот раз фокс ведет. Когда стала на сервере тестировать, то сначала вообще выдавалась ошибка что по заданному пути таблицы новые не найдены. Хотя лежат там же, где и старые, пути берутся из одного и того же файла. ![]() Исправлено 1 раз(а). Последнее : Elsif, 03.03.23 08:08 ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Taran Сообщений: 13522 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Лично я отказался почти сразу, как только появился CursorAdapter. Могу использовать в своих личных прикладных программах-пятиминутках. Есть много причин, тянущихся с прошлого века. ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
andrewk Сообщений: 159 Откуда: Красноярск Дата регистрации: 15.05.2005 |
Как вариант. Где-нибудь (например, в ProjectHook.BeforeBuild) можно перебрать формы, открыть как DBF, удалить в поле Properties значения для "cursorsource=" пути – оставить только имя файла. Ну и на старте проги, конечно, SET PATH. ![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
Выше Леонид как раз и описал этот способ.
![]() |
Re: Проблема с открытием таблиц в DE по заданному пути | |
---|---|
Elsif Автор Сообщений: 14 Дата регистрации: 05.02.2020 |
ProjectHook не помог (как и в какой момент его надо запускать? не использовала раньше никогда - наверное что-то не так делаю. Создала класс на основе стандартного ProjHook, написала в beforeBuild замену "..", как здесь советовали со своими путями и указала его в ProjectClass проекта) (( Смотрю формы в виде таблиц - нигде не осталось "cursorsource=..", а таблицы берет все равно не оттуда. Потом ребилд стала делать - так вообще на эту форму ругается, что она стала ReadOnly. Теперь только локально на компе базу видит правильно, а на термин.сервере - все равно теряет таблицы. Исправлено 5 раз(а). Последнее : Elsif, 06.03.23 09:17 ![]() |
© 2000-2023 Fox Club  |