Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чем обусловлено появление временных файлов? [D6, dBase, FoxPro]


Страницы:   1 2

b-Ars ©   (2002-10-15 15:49:00) 

Господа, так по какому же принципу создаются временные файлы BDE?
В одном случае они у меня создаются, в другом - нет, а программы работают. В чем так сказать соль?


ЮЮ   (2002-10-18 03:12:00) [1]

Да не БАЗЫ это, а ТАБЛИЦЫ. Если не используешь алиасы, значит не используешь и TDataBase. Потому и не видишь разницы между БАЗОЙ и ТАБЛИЦЕЙ :-)


b-Ars   (2002-10-17 13:03:00) [2]

ЮЮ © (17.10.02 12:57) 8-[ ]. Хм и ещё, я не пользуюсь алиасами, как быть, баз допустим 3 штуки, 1-я не главная, 2-я связана только со 3-й, 3-я связана со 2-й и 1-й. И что, я могу объединить их в одну базу?


ЮЮ   (2002-10-17 12:57:00) [3]

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


b-Ars   (2002-10-17 12:49:00) [4]

MsGuns © (17.10.02 12:44), тогда соответственно вопрос, в одном каталоге баз несколько, а TDataBase будет один? Чё то я опять торможу, сорри... :(


MsGuns   (2002-10-17 12:44:00) [5]

>b-Ars © (17.10.02 11:59)

Подписался бы под всем, что сказал Подгорецкий, кроме последнего абзаца (Ну не любит он Парадокс !), но, к сожалению, не могу, т.к. не владею его опытом и кое-что новое взял из его поста и себе на вооружение.
Делай все так как и делаешь. На временные файлы временно плюнь. Главное, чтобы софтины работали. А вот когда будут сбои, тогда и разбираться надо конкретно с каждым.

Да, еще ! ОБЯЗАТЕЛЬНО используй TDatabase ОДИН на ОДИН каталог с файлами БД. Лучше через алиас, который надо соотв-но настроить на DBASE. Откывай ее один раз в начале и закрывай в конце.
Если Local Share настроен, то все должно работать нормально.

PS Для запуска более чем одного экземпляра проги на ОДНОМ компе (с трудом представляю себе зачем это надо, но надо так надо !) не забудь про РАЗНЫЕ Приват-директории.


b-Ars   (2002-10-17 11:59:00) [6]

>Anatoly Podgoretsky © (17.10.02 00:20) Хм, так, вы меня окончательно запутали. Если вы читали заголовок сабжа, то там написано: [D6, dBase, FoxPro], т.е. базы у меня FoxPro 2.x. Ситуация действительно не позволяет применить клиент-сервер, ну нету денег на выделенный сервер, вы пишите, что лучше dBase - дык он родимый и используется, только получается, что все о чем мы тут говорили не нужно? Ни Local Share, ни NetDir, так что ли? Временные файлы у меня все равно создавались, хотя базы и не Paradox, просто в одночасье перестали потом, а программа все равно работает. Может мне кто-нибудь сказать конкретно, что нужно сделать, чтобы всё было корректно с моими базами?


Anatoly Podgoretsky   (2002-10-17 00:20:00) [7]

С local share = false работать нормально не будет, даже в локальном варианте, единственный плюс это скорость, минус повреждения базы и потери данных.
Написанному у борланда особенно не верь, написано правильно, но это не вся правда про local share, а правда состоит в том, что при каждой записи все немедленно сбрасывается на диск и риск потери данных сводится только к кешам диска и ОС.
По поводу NetDir ни в коем случае не помещать в папку с программой или базой данных, только отдельный каталог и как можно ближе к корню, лучше всего прямо в корне и с длиной имени не более 8 символов.
Идеальная структура примерно следующая

NETDIR
DB
DB1 база 1
...
DBN база N
PROGRAMS
PROG1
DB1 - так тоже можно
PROGN
DB2

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

А самое лучше вовсе забытьчто существует такой формат как Парадокс и если ситуация не позволяет приметь клиент-сервер, то dBase или Access


b-ars   (2002-10-16 23:46:00) [8]

>MsGuns © Спасибо огромное, жаль не могу расплатиться :)). Только проблему мы так и не решили: Почему моя программа перестала создавать временные файлы и почему вылетает ошибка после её выгрузки из памяти. И ещё, хотите верьте, хотите нет, но до недавнего времени у меня local share стояло в false, и всё нормально работало, хотя базы лежат на соседнем компе: а в запросе я пишу SELECT ... FROM "\\USER1\MYDIR" и т.п. Опять тык сказать парадокс? :)


MsGuns   (2002-10-16 20:33:00) [9]

>b-Ars © (16.10.02 19:52)

По поводу PDOXUSRS.net я написал в предыдущих постах (BDE>Configuration>System>Paradox> есть в таблице строка

NET DIR |C:\ // Обычно в духе Борланда

Вот вместо этого "C:\" надо проставить "\\MyComp\D:\DB" (точнее тот путь, который реально лежит к удаленной БД

Настраивать можно и программно, залезая в реестр виндузы, но я лично не ленюсь прописать вручную, тем более, что путь может у разных клиентов быть разным (имеются в виду разные ОРГАНИЗАЦИИ, а не юзера внутри одной конторы)

По уму надо все это закладывать в инсталляху, но это если прога пишется "под коробку", т.е. на массовую продажу.

Насчет инсталляции BDE на каждом клиенте. Существует множество мнений, что, мол, не надо таскать с собой диск с дельфей и инсталлить на клиентах бде, которая сжирает иногда несколько десятков метров диска, а достаточно просто скопировать несколько мегабайт библиотек и прописать ручками в реестр все, что нужно.
Лично я так НИКОГДА не делаю, т.к. не настолько досконально знаю BDE, чтобы кусками ее резать и кромсать. Чего и Вам желаю !


b-Ars   (2002-10-16 19:52:00) [10]

>MsGuns - огромное спасибо за столь детальный анализ! Только все же ситуация: моя программа устанавливается у нескольких пользователей. Это получается, что кроме ядра BDE мне нужно будет и BDE - админа каждому ставить и настраивать каждому? Возможно ли программно изменить эти настройки? И соответственно путь к PDOXUSRS.NET без TSession я не представляю пока как прописать. Плиз, если я вас ещё не достал, просвятите на этот счет.


MsGuns   (2002-10-16 17:53:00) [11]

>b-Ars © (16.10.02 17:10)

Маразма на самом деле никакого нет. К БД, созданной с помощью BDE, могут обращаться приложения, которые ее вообще не используют, например, тот же ACCESS. Однако при доступе к данным уже аксесс будет выполнять прямые вызова Dbi или использовать другие методы (драйвера в частности), которые все равно будут юзать отд.части BDE, а те в свою очередь лезут в реестр и смотрят на Local Share. Кстати, эту опцию проверяет не только одна BDE, но и другие (по-моему что-то типа Informix или Clarion)

На первый взгляд кажется, что ну ее на фиг, эту БДЕ ! Может лучше взять эксесс с его предустановкой практически на каждом компе и никаких нюансов в сети, поломок БД и проч.прелестей. Это действительно так. Однако перед тем как принимать решение, стоит писануть простенькую прогу, юзающую штуки 3-4 связанных таблиц и выполнить ее в двух вариантах: Paradox (dBase) и Access, и сравнить как они работают, в частности скорость реакции, обработки запросов, поисков и фильтрации.


MsGuns   (2002-10-16 17:43:00) [12]

>b-Ars © (16.10.02 17:10)
Выставляется все в BDE Administrator (Закладка Configuration)

->System->INIT-> "Local Share = TRUE"
->Drivers->PARADOX->"NET DIR = <Путь к сетевому каталогу, общему для всех прог, работающих в сети с БД Paradox>

Смысл Local Share в том, что файлы БД, созданные BDE, того компа, который содержит эту опцию, становятся ДОСТУПНЫ в локальной сети. Без этой опции все попытки доступа к файлам .db, dbf и др, созданных BDE, из других компов будут завершаться фиаскою ;)


MsGuns   (2002-10-16 17:32:00) [13]

>b-Ars © (16.10.02 15:22)
Сессия и компоненты доступа к БД - это НЕ ОДНО И ТО ЖЕ !!
Сессия в большинстве случаев нужна только одна независимо сколько TQuery или TTable или TDatabase я буду использовать.
Несколько сеесий имеет смысл создавать если есть НЕСКОЛЬКО серверов БД, обмен с которыми я хочу ЗАПАРАЛЛЕЛИТЬ (Как, например, в случае с РАСПРЕДЕЛЕННЫМИ БД).
При запуске программы, если в ней испльзуется любой компонент БД, Делфа АВТОМАТИЧЕСКИ создает сессию ("Default") и дополнительно создавать лишний экземпляр этого класса решительно не стоит.

TDatabase обычно соответствует ОДНОЙ ФИЗИЧЕСКОЙ БАЗЕ ДАННЫХ (Для Paradox, dBase, Foxpro - это каталог с файлами БД). Если надо обратиться к нескольким РАЗНЫМ каталогам ОДНОВРЕМЕННО, только тогда имеет смысл использовать несколько TDatabas. Если же каталог ОДИН, то и Tdatabase предпочтительно иметь ОДИН. Почему - тяжело объяснить в форуме.

При запуске одной или нескольких программ на одном компе одновременно для каждой из них создается СВОЯ сессия и они обслуживают все коннекты к БД СВОЕЙ пограммы.

Использование прямых вызовов BDE (Dbixxxx - процедуры) используется только в тех случаях, когда что-либо НЕВОЗМОЖНО выполнить стандартными компонентами с помощью их свойств и методов. К тому же требует достаточно глубокого понимания внутреннего механизма ядра BDE и досконального знания структуры и особенностей той БД, к которой происходит обращение.

Рекомендую Вам почитать хелпы к TSession и всем компонентам стандартной закладки Delphi "BDE" - возможно, необходимость прямых вызовов отпадет.


b-Ars   (2002-10-16 17:10:00) [14]

В БДЕ хелп написано, что если Local Share = true, то доступ к файлам могут получить и не-BDE приложения. Маразм какой-то. В чем магия-то?


b-Ars   (2002-10-16 15:23:00) [15]

Да, и как мне программно Local Share усмтановить, и если можно про него поподробнее, смысл его вообще, что он физически делает?


b-Ars   (2002-10-16 15:22:00) [16]

Ещё интересный факт: делаю DbiGetSesInfo(Res), узнаю информацию о текущей сессии (не по умолчанию, а сделанный мною TSession) в получаю Res.iDatabases=2, а база данных-то одна, странно. Пытаюсь вешать 5 штук TQuery на сессию, Res.iDatabases всё равно =2, изменяется только число курсоров, на сессии по-умолчанию он показывает что Res.iDatabases=3, хотя там 8 компонентов TQuery. Вообще происходит, что за бред?


MsGuns   (2002-10-16 13:12:00) [17]

1. Local Share -> True
2. PDOXUSRS -> в каталог, общий для всех компов
3. Private -> в действительно "ЛИЧНУЮ" папку для каждого запущенного экземпляра проги.

Если все это есть, тогда и не знаю, ошибка где-тов коде. ИМХО


b-Ars   (2002-10-16 13:05:00) [18]

Нет, нет, private разный, почему-то не помогает. Может есть ещё идеи?


b-Ars   (2002-10-16 12:59:00) [19]

>MsGuns, все уже пробовал, всё прописывал, даже файл PDOXUSRS.NET уж и тот в разных местах размещал, толку мало, может быть есть ещё идеи?


MsGuns   (2002-10-16 12:39:00) [20]

Так проги на одном компе ? Это уже яснее. Тогда для КАЖДОГО запущенного экземпляра проги или прог надо в TSession указывать РАЗНЫЕ пути для Private-directory. По умолчанию Delphi назначает приватом каталог, из которого прога запущена. Вот и получается, что 2 раза запущенная прога фактически представляет 2 РАЗНЫЕ задачи и связанные с ними сессии, работающие на ОДНОМ привате, а это КАТЕГОРИЧЕСКИ недопустимо ! Вылеты будут самые уматные.
Представьте себе ситуевину:
Прога "А" открывает файл 1.ini и сбрасывает туда некую инфу, связанную с текущими настройками интерфейса и продолжает работать дальше.
Через секунду прога "Б" делает то же, но скидывает туда (в файл с таким же именем) свою инфу срвершенно другого содержания.
Прога "А" решила прочитать якобы свой файл 1.ini и чего-то там настроить. Читает, а там...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо