Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];

Вниз

Чем обусловлено появление временных файлов?   Найти похожие ветки 

 
b-Ars   (2002-10-15 15:49) [0]

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


 
MsGuns   (2002-10-15 16:56) [1]

Врем.файлы BDE создает в Private - каталоге (Подробнее в документации по TSession и Borland BDE)
Врем.файлы создаются при получении Вами рез.нд при TQuery "SELECT" (_sqlxxxx), при использовании TBatchMove (Changed, Deleted, Inserted, Problims, KeyViol,..), при работе через буфер и т.д, выполнении сложных связанных запросов на больших таблицах (врем.индексы Xxx и Yxx) и пр. Юояться их не надо. Более того, при входе в прогу в большинстве случаев рекомендуется ЧИСТИТЬ Private-каталог.


 
Val   (2002-10-15 17:33) [2]

+MsGuns © (15.10.02 16:56)
Если не назначить этот каталог, временные файлы будут создаваться в директории .exe-файла.
Можно чистить за собой, т.е. при выходе из приложения.(Хотя не скажу, что лучше - при некорректном завершении приложения они могут остаться).


 
MsGuns   (2002-10-15 22:31) [3]

>Val © (15.10.02 17:33)
Оставлять местоположение приват-папок на усмотрение системы - плохой тон программироваия, не говорю уж о том, какие это может иметь последствия (Пример, по умолчанию в C:\, а на нем всего 200 Kb свободного пр-ва).
Чистить приват можно и до и после. Но ДО ОБЯЗАТЕЛЬНО. Иначе после зависаний и Abort`ов неизбежны глюки при перезапуске.


 
b-Ars   (2002-10-16 12:15) [4]

Ок, Привэйт-директорию поменять не проблема. Там ещё есть Net Dir, в котором помещен PDOXUSRS.NET, но почему у меня программа вдруг перестала создавать эти файлы, хотя делала это, код я не менял, самое декбильное, что всё работает. Пишу подобный код, и эти файлы создаются, что такое-то?


 
MsGuns   (2002-10-16 12:24) [5]

Дело в особенностях внутреннего устройства Paradox-движка BDE. При работе с этим форматом появление временных файлов неизбежно, но ничего в этом проблематичного нет при правильной работе с Private-каталогом. Т.е. его надо просто чистить или вообще не трогать. Просто не обращать внимания ! Но если прога "отдыхает", можно все их совершенно безболезненно прибить (если глаза мозолят).

Особенное дело - файл PDOXUSRS.net Это спец.файл регистрации пользователей сетевого Paradox. Если БД юзается с одного компа, то его появление чисто формально. А вот если несколько компов юзают одну БД, то для всех них путь к этому файлу должен быть указан ОДИН. Иначе BDE будет воспринимать НЕСКОЛЬКО лицензионных Paradox`ов и неизбежны проблемы в виде сбоев и даже порч таблиц.


 
b-Ars   (2002-10-16 12:31) [6]

Уважаемый MsGuns, этот вопросик мой связан с ещё одним, проги у меня конфликтуют, может быть вы знаете из-за чего, но проблема мне кажется именно из за временных файлов:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1034682272&n=1


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

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


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

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


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

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


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

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

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


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

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


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

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


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

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


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

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

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

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

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

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


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

>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:53) [16]

>b-Ars © (16.10.02 17:10)

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

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


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

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


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

>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 23:46) [19]

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


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

С 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-17 11:59) [21]

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


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

>b-Ars © (17.10.02 11:59)

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

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

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


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

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


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

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


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

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


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

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.009 c
1-21556
Whippi
2002-10-29 14:39
2002.11.07
Из FileListBox в Ричедит


3-21448
Kurt
2002-10-21 11:55
2002.11.07
Подскажите, как в QuickReport-е организовать печать двух групп, о


14-21746
Сатир
2002-10-18 13:08
2002.11.07
Разгадайте ребус


1-21555
Demon[DZ]
2002-10-29 16:26
2002.11.07
компонент!


14-21774
Romych
2002-10-17 23:54
2002.11.07
DeDe программа для дизассемблирования





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский