|
Как проверить наличие файла на локальном диске, если приложение запущено из сетевой папки?
|
|||
---|---|---|---|
#18+
Добрый день всем ^^ Обычно сообщения такого типа начинаются (и продолжаются) стандартно, так что не будем нарушать традицию ^__^ Итак. Есть приложение на фоксе 8.0. работает с локальными таблицами. Понадобилось срочно переделать его так, чтобы в нем могли работать сразу несколько пользователей (5 максимум, но скорее всего, не более 3-х будет) по сети. Стандартно - опыта разработки многопользовательских приложений не имею :"-) Как сделали: приложение запускается либо локально на компьютере, где установлено, либо по сети - просто запускаем экзешник из расшаренной папки с приложением. Организована блокировка записей при попытке доступа к ним нескольких пользователей, отслеживание количества пользователей, работающих с приложением. Заблокирован повторный запуск приложения на одном и том же компьютере. Все нормально, работает более-менее стабильно. А вот теперь западла. Программа использует в качестве справочника (если можно так сказать) таблицу из 3+ миллионов записей (паспортные данные). Select из нее не делается, только поиск Seek, видна она пользователю только на форме поиска в гриде, но открыта висит постоянно (это было прописано изначально). Дабы не напрягать сеть переброской почти гига инфы, мне пришла в голову "гениальная" идея - поместить экземпляр этой таблицы на локальный компьютер (собственно, она там уже есть). Локальный путь к этой таблице хранится в ini-файле, на каждом компе разный. Перед открытием я пытаюсь определить, там ли эта таблица, или нет. Использую функцию FILE(). При запуске на локальном компьютере строка типа FILE("C:\ins\ins.dbf") отрабатывает нормально, а вот при запуске из сети выдает False, хотя следующий за ним USE отрабатывает нормально - открывает именно локальный экземпляр таблицы. Каким образом можно все-таки проверить, лежит ли таблица именно в той локальной папке, которая указана в ini-файле? Переписывать заново все приложение уже нет времени ((((. В нагрузку вопрос - насколько "напрягается" сеть, если индексы для этой 3-х миллионной таблицы берутся тоже из расшаренной папки? Или лучше тоже положить их в локальную папку? ------------------------------------------------------ Истинный оргазм можно испытать только после нескольких часов жесткой е*ли с кодом ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2011, 10:39 |
|
Как проверить наличие файла на локальном диске, если приложение запущено из сетевой папки?
|
|||
---|---|---|---|
#18+
Для программы без разницы где лежит файл. Программа обращается к ОС за нужным файлом, остальное задачи ОС. Скорее всего что-то криво написал. Покажи кусок кода который неправильно работает. Если используется только SEEK то целиком таблица не читается клиентом, читается только нужный индекс (не весь CDX) и читается только найденная запись. Если эта таблица обновляется редко, то можешь хранить ее локально и обновлять периодически. Так читать из нее однозначно быстрее. Проблемы только с ее обновлением. Индексы надо хранить там же где и DBF. тут без вариантов. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2011, 12:12 |
|
Как проверить наличие файла на локальном диске, если приложение запущено из сетевой папки?
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
При запуске с локального диска все отрабатывает нормально. При запуске с другого компа по сети отрабатывает бесконечно (то бишь file() каждый раз возвращает .f. ) команда Код: plaintext
Если я буду индекс к этой таблице хранить там же, где и саму таблицу, то опять же надо его найти, как и саму таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2011, 13:43 |
|
Как проверить наличие файла на локальном диске, если приложение запущено из сетевой папки?
|
|||
---|---|---|---|
#18+
Koryuu** ins - переменная пути. На моем компе она, например, C:\INS, на компе коллеги C:\TAL ** считывается из Ini- файла А ini-файл откуда считывается? Для целей проверки, не пробовали вывести то значение, которое было считано из ini-файл? Ну, например, при открытии формы path_ins.scx отобразить в качестве значения по умолчанию тот путь, который был считан из ini-файла ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2011, 14:03 |
|
Как проверить наличие файла на локальном диске, если приложение запущено из сетевой папки?
|
|||
---|---|---|---|
#18+
Сделай вывод переменной Ins во всех местах и посмотри что реально в ней: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2011, 14:46 |
|
Как проверить наличие файла на локальном диске, если приложение запущено из сетевой папки?
|
|||
---|---|---|---|
#18+
вместо alltrim() лучше ADDBS() использовать для путей Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2011, 15:19 |
|
Как проверить наличие файла на локальном диске, если приложение запущено из сетевой папки?
|
|||
---|---|---|---|
#18+
Еще проверь как из Ini читаешь, если с помощью GetPrivateProfileString то так попробуй Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2011, 15:41 |
|
Как проверить наличие файла на локальном диске, если приложение запущено из сетевой папки?
|
|||
---|---|---|---|
#18+
На самом деле все оказалось совсем просто (и глупо, если честно) Параллельно была открыта таблица, в которой было поле ins - старая настройка путей, использовавшаяся при локальной работе приложения. При проверке функцией file() ins брался из поля, а при USE - из переменной. Блин, мне таа-аак стыдно Могла бы и сама додуматься до вывода значений ( Спасибо за советы. С наступающим всех =^_^= ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2011, 16:45 |
|
Как проверить наличие файла на локальном диске, если приложение запущено из сетевой папки?
|
|||
---|---|---|---|
#18+
Почитай про "венгерскую нотацию", это правила именования переменных, полей, объектов. Если их жестко придерживаться, то подобных проблем не будет. Вкратце смысл такой: префикс переменной означает область видимости и тип. Например gcIns g - глобальный с - символьный в именах полей и свойств только тип, например MyTable.cIns Тогда подобных проблем не возникнет и код читать проще, не надо помнить где чего какого типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2011, 17:10 |
|
|
start [/forum/topic.php?fid=41&fpage=75&tid=1584392]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 296ms |
total: | 410ms |
0 / 0 |