PDA

Показать полную графическую версию : [решено] Автоматическое создание папок из полей таблицы c помощью VBS


Страниц : 1 2 [3]

NecroTYN
06-07-2011, 09:10
amel27,
Спасибо, все заработало

NecroTYN
10-07-2011, 20:24
ВСЕМ Привет!!!

P.S. критерий разделения услуг/товара в топике не раскрыт »

Раскрываю критерий разделения услуг/товара:
Все товары и услуги находятся в таблице tblOrdersProducts и делятся на категории - товары и услуги (поле ProductsCategoryCalc), так вот, нужно сделать выборку чтобы папки не создавались на категорию "УСЛУГИ"

amel27
11-07-2011, 07:45
поле ProductsCategoryCalc »Нет такого поля в таблице tblOrdersProducts - откройте базу данных в MS Access и убедитесь в этом, а суффикс CALC говорит о том, что это поле (скорее всего) рассчетное. Тип товара есть в tblProducts и я не вижу никаких идентификаторов для связи с tblOrdersProducts кроме наименования товара, но оно не является уникальным со всеми вытекающими последствиями.

NecroTYN
11-07-2011, 10:19
Нет такого поля в таблице tblOrdersProducts »
а суффикс CALC говорит о том, что это поле (скорее всего) рассчетное »
это то все правильно говорите, я его сам туда назначил из таблицы tblProducts, так не получится ????

NecroTYN
11-07-2011, 10:48
Нет такого поля в таблице tblOrdersProducts »
...Ну а если путем перечисления "услуг" -- их всего то 5...

amel27
11-07-2011, 11:05
я его сам туда назначил из таблицы tblProducts, так не получится ???? »
а если путем перечисления "услуг" -- их всего то 5... »
да мне в общем-то всё равно - вам решать, можно и по наименованию сравнить... только ни один из этих способов не является идеальным, так что сначала взвесьте все "за" и "против", с расчетом "на перспективу"

NecroTYN
11-07-2011, 11:08
только ни один из этих способов не является идеальным »
а какой есть идеальный ???

так что сначала взвесьте все "за" и "против", с расчетом "на перспективу" »
...ну а ВЫ что посоветуете ???

Хотя наверное по категории будет всетаки лучше, потому что услуг может и добавиться

amel27
11-07-2011, 12:34
какой есть идеальный ??? »нормализованный, когда в таблицах стоит ID из справочника (tblProducts), а не имя
а ВЫ что посоветуете ??? »Ваша база данных, вам и решать... ;)
вариант с именем, имя продукта должно быть уникальным и присутствовать в справочнике:Dim sDbPath 'путь к файлу БД
sDbPath = CreateObject("Wscript.Shell").SpecialFolders("MyDocuments") & "\Учет клиентов\DemoDatabase.mdb"

Dim Con 'объект Connection
Set Con = CreateObject("ADODB.Connection") 'создание объекта Connection
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDbPath & ";Persist Security Info=False" 'открываем соединение с базой данных

Dim sSql 'SQL инструкция
sSql = "SELECT Top 1 p.ProductType FROM tblOrdersProducts op,tblProducts p WHERE op.Product=p.ProductName AND op.ID="& Mid(WScript.Arguments(0),2)
Set oRec = Con.Execute(sSql) 'выполняем SQL инструкцию
If oRec.EOF Then WScript.Quit 'если продукта нет в справочнике, то выход

sType = oRec.Fields(0).Value 'тип товара
If Left(sType,6)="Услуга" Then WScript.Quit 'если Услуга, то выход

sSql = "SELECT o.Address,m.Client,op.Product FROM tblOrdersProducts op,tblOrders o,tblMain m WHERE m.ID=o.ClientID AND o.ID=op.OrderID AND op.ID="& Mid(WScript.Arguments(0),2)
Set oRec = Con.Execute(sSql) 'выполняем SQL инструкцию

Dim FSO 'объект FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")

Dim strPath 'путь к папке
strPath="C:\Documents"
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath & "\Заказы"
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& Replace(oRec.Fields(0).Value,"""","")
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& Replace(oRec.Fields(1).Value,"""","")
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& Replace(oRec.Fields(2).Value,"""","")
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)

Con.Close 'закрываем Connection
Set Con = Nothing 'очищаем переменную
P.S. Сравнение идет с учетом регистра: "Услуга"<>"УСЛУГА"

Iska
11-07-2011, 16:52
а какой есть идеальный ??? »
Идеальных не бывает. На практике обычно считается достаточным, если таблицы базы нормализованы в соответствии с нормальной форме Бойса — Кодда (http://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0_%D0%91%D 0%BE%D0%B9%D1%81%D0%B0%E2%80%94%D0%9A%D0%BE%D0%B4%D0%B4%D0%B0).
нормализованный, »
Поставил бы три благодарности, кабы можно было.

NecroTYN
11-07-2011, 18:32
---------------------------
Windows Script Host
---------------------------
Сценарий: C:\Program Files (x86)\ClientsCount\makedir.vbs
Строка: 9
Символ: 1
Ошибка: Индекс выходит за пределы допустимого диапазона
Код: 800A0009
Источник: Ошибка выполнения Microsoft VBScript

---------------------------
ОК
---------------------------

NecroTYN
11-07-2011, 23:11
......... вот блин, перепробовал все до чего смог додуматься, так ниче и не получилось больше, даже тест.вбс не запустился.... :help:

amel27
12-07-2011, 04:55
Ошибка: Индекс выходит за пределы допустимого диапазона »
1. Убедитесь, что параметр (ID) передаётся в скрипт через слэш (пост #38 (http://forum.oszone.net/post-1707168-38.html));
2. Проверить работу скрипта можно, передав ID реальной записи из tblOrdersProducts:C:\TEST\Script.vbs /37
3. Триггер должен запускать скрипт ПОСЛЕ создания/изменения записи.

NecroTYN
12-07-2011, 19:11
1. Убедитесь, что параметр (ID) передаётся в скрипт через слэш (пост #38);
2. Проверить работу скрипта можно, передав ID реальной записи из tblOrdersProducts »

Вот мои действия:
1.создал bat файл -- c:\Program Files (x86)\ClientsCount\makedir.vbs / [5]
2.создал makedir.vbs c с указанным вами кодом по пути c:\Program Files (x86)\ClientsCount
3.в программе в "триггерах" указал запуск bat -- после добавления/изменения
4.в программе в "триггерах" указал запуск makedir.vbs -- после добавления/изменения

результат тот же:


---------------------------
Windows Script Host
---------------------------
Сценарий: C:\Program Files (x86)\ClientsCount\makedir.vbs
Строка: 9
Символ: 1
Ошибка: Индекс выходит за пределы допустимого диапазона
Код: 800A0009
Источник: Ошибка выполнения Microsoft VBScript

---------------------------
ОК
---------------------------

поправил bat на makedir.vbs / [5]

результат следующий:

1.
---------------------------
Windows Script Host
---------------------------
Сценарий: C:\Program Files (x86)\ClientsCount\makedir.vbs
Строка: 9
Символ: 1
Ошибка: Индекс выходит за пределы допустимого диапазона
Код: 800A0009
Источник: Ошибка выполнения Microsoft VBScript

---------------------------
ОК
---------------------------
2.
---------------------------
Windows Script Host
---------------------------
Сценарий: C:\Program Files (x86)\ClientsCount\makedir.vbs
Строка: 10
Символ: 1
Ошибка: Отсутствует значение для одного или нескольких требуемых параметров.
Код: 80040E10
Источник: Microsoft JET Database Engine

---------------------------
ОК
---------------------------


Если убрать квадратные скобки в батнике -- выскакивает первая ошибка

NecroTYN
12-07-2011, 23:33
.......... НННННда !!!!!!!!!! Не прошло и ШЕСТИ страниц как до меня дошло, что сам VBS запускать не надо
Простите уж тупицу :sorry:

Вопрос о передаче параметров скрипту тоже решился, В триггерах при запуске файла надо указать так: C:\Program Files (x86)\ClientsCount\makedir.vbs /[ID] и все работает нормано
По поводу скрипта еще пара вопросов,

как сделать проверку создаваемых папок ?
как в папке с адресом клиента создать папку документы ?
как в папке с именем товара создать папки Замер Модель Раскрой Эскизы ?
как правильно прописать путь создания папок (возможно к серверу) ?

...и еще такой момент, я писал: имя 1ой папки-берется из таблицы qdfOrders - Address
имя 2ой папки-берется из таблицы qdfMain - Client
имя 3ей папки-берется из таблицы tblOrdersProducts - Product »

а как сделать чтоб имя первой папки --Клиент, а второй --Адресс ???

amel27
13-07-2011, 11:42
как сделать проверку создаваемых папок ? »какую проверку?
как правильно прописать путь создания папок (возможно к серверу) ? »давайте конкретные примеры расположения папок
как в папке с адресом клиента создать папку документы ?
как в папке с именем товара создать папки Замер Модель Раскрой Эскизы ?
...и еще такой момент, я писал:
Цитата NecroTYN:
имя 1ой папки-берется из таблицы qdfOrders - Address
имя 2ой папки-берется из таблицы qdfMain - Client
имя 3ей папки-берется из таблицы tblOrdersProducts - Product »
а как сделать чтоб имя первой папки --Клиент, а второй --Адресс ??? »заменить блок, отвечающий за создание каталогов на код:Dim strPath 'путь к папке
strPath="C:\Documents"
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\Заказы"
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& Replace(oRec.Fields(1).Value,"""","")
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& Replace(oRec.Fields(0).Value,"""","")
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strTemp=strPath &"\Документы"
If Not FSO.FolderExists(strTemp) Then FSO.CreateFolder(strTemp)
strPath=strPath &"\"& Replace(oRec.Fields(2).Value,"""","")
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strTemp=strPath &"\Замер"
If Not FSO.FolderExists(strTemp) Then FSO.CreateFolder(strTemp)
strTemp=strPath &"\Модель"
If Not FSO.FolderExists(strTemp) Then FSO.CreateFolder(strTemp)
strTemp=strPath &"\Раскрой"
If Not FSO.FolderExists(strTemp) Then FSO.CreateFolder(strTemp)
strTemp=strPath &"\Эскизы"
If Not FSO.FolderExists(strTemp) Then FSO.CreateFolder(strTemp)

NecroTYN
13-07-2011, 22:10
какую проверку? »
Снимаю вопрос
давайте конкретные примеры расположения папок »
Да в том то и дело что их пока нет, вот решаем, на сервер выложить или сетевой диск поставить, пока наверное как есть останется....

NecroTYN
14-07-2011, 00:28
заменить блок, отвечающий за создание каталогов на код: »
Пока все работает !!!! СПАСИБО !!!

P.S. А еще можно будет обратиться за помощью ???

amel27
14-07-2011, 09:29
можно будет обратиться за помощью ? »с чего вдруг возник такой вопрос?.. вроде для этого форум и существует

вот решаем, на сервер выложить или сетевой диск поставить, пока наверное как есть останется.... »учитывая, что в ACCESS-варианте скрипт запускается с клиента, желательно держать эту папку на одном сервере с базой данных (из соображений целостности данных), идеальный вариант - терминальный доступ (если поддерживается программой).

NecroTYN
14-07-2011, 20:13
с чего вдруг возник такой вопрос?.. вроде для этого форум и существует »
Боюсь показаться назойливым....
учитывая, что в ACCESS-варианте... »
За совет спасибо огромное


:up :oszone:




© OSzone.net 2001-2012