Хранение информации о нахождении базы в таблице.

Автор adi_den2013, 11 февраля 2014, 10:55

0 Пользователи и 1 гость просматривают эту тему.

adi_den2013

Хочется реализовать следующее: таблица install , форма изменения в ней данных.

Объявить пути через глобальные переменные и потом в макросах использовать их для хранения архивов (копий) БД, отчетов и т.д.
Интересует вопрос об способе объявления глобальных переменных в ООBase. Поделитесь знаниями, пожалста.

[вложение удалено Администратором]
Яна (in real)

adi_den2013

Нашла, что

Global Path_prg As String

Этого достаточно?
Яна (in real)

JohnSUN

Увы, нет, не достаточно. Переменная будет доступна из любого модуля, её значение всё время будет правильным... Уже чуешь, что я приближаюсь к этому противному слову "НО!"? Так вот - НО! ...но она будет хранить значение только пока активна твоя форма install - закроешь форму и переменная обнулится. И опять таки "НО!" - но если форму не закрывать, а просто скрыть, то до конца сеанса работы переменная будет активна и её значение доступно.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

М-дааа.... :roll:
Понятно. Т.е., если открывать форму в скрытом виде при выполнении макроса архивации и при выполнении макроса сохранения отчета, все будет?
Яна (in real)

JohnSUN

Нет, не так... Открывать форму при начале работы, по кнопке прятать (скрывать), при завершении работы с офисом - закрывать... Правда утомительно?
Опять же, между запусками этот путь желательно где-то сохранить, да? Заводить ini-файл, что ли?

Как насчет воспользоваться стандартным пунктом Сервис-Параметры-Пути-Резервные копии и получать этот путь с помощью готовых функций GetOfficeSubPath и/или GetPathSettings из стандартной библиотеки Tools?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

#5
Цитата: adi_den2013 от 11 февраля 2014, 08:55Хочется реализовать следующее: таблица install , форма изменения в ней данных.

Цитата: JohnSUN от 11 февраля 2014, 11:05Заводить ini-файл, что ли?

Пути у меня в таблице install хранятся. Вот.

И архивы специфицеские:    arc_ddmmyy_hhmm.arj
arc_110214_0757.arj
arc_110214_0807.arj
arc_110214_0816.arj
arc_110214_1119.arj

И попадают они в папку YYYY\ММ\, где YYYY - год, ММ - месяц

Спасибо, о резервных копиях через настройки почитаю.
Яна (in real)

JohnSUN

Цитата: adi_den2013 от 11 февраля 2014, 13:31
Цитата: adi_den2013 от 11 февраля 2014, 08:55Хочется реализовать следующее: таблица install , форма изменения в ней данных.
Пути у меня в таблице install хранятся. Вот.
Ох, извини, не внимательно читал... Решил, что речь идёт не о таблице данных, а о таблице-элементе управления в форме (Grid).
Если в таблице хранятся, то и глобальная переменная, вроде, ни к чему - просто перед каждой операцией с файлами дёргай нужное значение оттуда да и дело с концом. Отдельная маленькая функция, которая просто возвращает сохраненную строку из install с дописанным годом-месяцем-днем.
Цитата: adi_den2013 от 11 февраля 2014, 13:31
И архивы специфицеские:    arc_ddmmyy_hhmm.arj
arc_110214_0757.arj
arc_110214_0807.arj
arc_110214_0816.arj
arc_110214_1119.arj
Слушай, я сейчас одну глупую вещь спрошу, только ты не обижайся...  ;)

Почему arj? Ты его как внешний екзешник с параметрами вызываешь?

Тут ведь какая штуковина, если верить Питоньяку (и Laurent Godard), то встроенный ZIP вызывается из офиса в одно касание.
Глянь листинги в 5.31. Extracting a Zip File и две следующих главы. Врать не буду, сам не пробовал. Но обычно его образцы работают безукоризненно.

И мой тебе совет: измени формат даты в именах архивов - не ДДММГГ, а наоборот, ГГММДД. Тогда они хорошо сортируются по имени.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

 Да не, я не обижаюсь. Разве можно обижаться на гуру  ;)

Вызываю shell'ом bat-ник (arc.bat) . В котором прописаны параметры для имени архива.

rem дата в имени архива ДДММГГ
set name1=%DATE:~0,2%%DATE:~3,2%%DATE:~8,2%

rem вычисление времени (до 10:00 и после)
IF "%time:~0,1%" LSS "1" (
   set name2="0"%TIME:~1,1%%TIME:~3,2%
) ELSE (
   set name2=%TIME:~0,2%%TIME:~3,2%
)

rem путь нахождения базы
SET put1=e:\balans\

rem создать папку месяца
md e:\balans\arc\%DATE:~3,2%

rem создать папку дня
md e:\balans\arc\%DATE:~3,2%\%DATE:~0,2%%DATE:~3,2%

arj.exe a -e e:\balans\arc\%DATE:~3,2%\%DATE:~0,2%%DATE:~3,2%\arc_%name1%_%name2%.arj %put1%balans.odb



Как пользоваться встроенным ZIP с параметрами, честно говоря не знаю  :(. Листинг гляну. СПС  :)
Яна (in real)

JohnSUN

То есть, в install ты хранишь эти два пути, которые в bat'нике сейчас прописаны наглухо (e:\balans\ и e:\balans\arc\) и хочешь архивацию перенастроить именно на пути из install?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

Яна (in real)

JohnSUN

Можно и это... В bat'ник можно передать параметры и использовать их в виде "процент-номер по порядку".
То есть внутри bat'ника %0 - имя самого bat-файла с полным путем к нему, %1 - первый параметр, %2 - второй и т.д.
То есть можно было бы в shell кинуть что-то вроде
arc.bat e:\balans\ arc\
и в тексте вместо %put1% использовать %1, а вместо e:\balans\arc\ везде написать %1%2

Вот только беда с виндоватыми путями... А вдруг у тебя в путь в install'е попадёт какая-то лажа типа "D:\Temp\Тестовая база 2"? Из-за этих пробелов всю строку надо брать в кавычки, чтобы она воспринималась одним параметром... Или преобразовывать полный путь к "классическому короткому имени 8.3" - в какой-нибудь нелепый 8AF8~1, по которому догадаться об исходном имени вообще невозможно...

Так что я бы все-таки встроил архивацию прямо в модуль, а не отдавал бы её наружу
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

Цитата: JohnSUN от 11 февраля 2014, 13:59А вдруг у тебя в путь в install'е попадёт какая-то лажа типа "D:\Temp\Тестовая база 2"? Из-за этих пробелов всю строку надо брать в кавычки, чтобы она воспринималась одним параметром...

Можно перестраховаться и поставить проверку в поле на наличие пробелов. Но... думаю, все-таки правильнее будет фиксировано забить пути в макрос. И не париться. Не давать пользователю "игрушку" в руки.

Одна морока, при переносе базы на другой диск - только правка макроса вручную. Да ладно. Все равно базу нужно будет заново регистрировать а ООBase.
Яна (in real)

JohnSUN

#12
Подожди, до меня, кажется, только сейчас начало доходить (перечитал команду для arj'а)...
Поправь, если ошибаюсь - e:\balans\ это папка с базой, той самой базой, которая и будет сохраняться в этой же папке в подкаталог arc\<номер месяца из двух цифр>? И процесс сохранения запускается из макроса из этой самой базы?

А попробуй-ка повесить на какую-то кнопку в форме вот такую ерунду:
Sub tstCurPath
Dim oParent As Variant
Dim sURL As String
GlobalScope.BasicLibraries.LoadLibrary("Tools")
oParent = ThisComponent.getParent()
sURL = oParent.getURL()
print "Каталог = '" + DirectoryNameoutofPath(ConvertFromURL(sURL), "\") + "'"
End Sub
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

Иерархия расположения такая

E:\BALANS
E:\BALANS\balans.odb
E:\BALANS\arc.bat

архивы
E:\BALANS\ARC
E:\BALANS\ARC\01\...(по дням)
E:\BALANS\ARC\02\...(по дням)
...
отчеты
E:\BALANS\Otchet
E:\BALANS\Otchet\01\
E:\BALANS\Otchet\02\
....


Макрос изнутри balans.odb

Sub Archiv()
shell("E:\BALANS\ARC.BAT",1)
End Sub
Яна (in real)

adi_den2013

#14
Дает путь  :D

[вложение удалено Администратором]
Яна (in real)