Показать полную графическую версию : [решено] Автоматическое создание папок из полей таблицы c помощью VBS
NecroTYN
02-07-2011, 19:41
Здравствуйте Господа программисты!!!
Очень нужна ваша помощь в следующем вопросе:
Есть программа работающая с базой данных Access, включающая в себя следующие таблицы: ... Заказы,клиенты,продукты....
Нужно создать скрипт VBS чтобы при создании ЗАКАЗА автоматически создавалась группа папок в определенном месте диска (D:\Documents\Заказы\...), а имена этих папок создавались бы из определенных полей таблиц. Например:
после создания заказа должны появится папки по указанному пути с таким вот именем:
D:\Documents\Заказы\ул.Красная\Сергеев\
где ул.Красная это адрес клиента, Сергеев это Фамилия клиента,
В папке "Сергеев" в свою очередь создаются папки (Стойка компьютерная,Стол письменный,Шкаф купе), имена которых берутся из подтаблицы "продукты" (в которой мы собственно и составляем заказ), каждая из которых содержит в себе еще 4 папки с неизменными названиями(Замер,Модель,Раскрой,Эскизы,Документы)....
имя 1ой папки-берется из таблицы qdfOrders - Address
имя 2ой папки-берется из таблицы qdfMain - Client
имя 3ей папки-берется из таблицы tblOrdersProducts - Product
"третьих" папок должно создаваться столько, сколько заказано продуктов, за исключением услуг(которые кстати тоже находятся в таблице tblOrdersProducts), в каждой из них создаются следующие папки:
Замер
Модель
Раскрой
Эскизы
Документы
С нетерпением жду ответа
Нужно создать скрипт VBS чтобы при создании ЗАКАЗА автоматически создавалась группа папок »Вы что-то путаете - написать VBS и обеспечить его автоматический запуск - две разные задачи, причем без решения второй первая не имеет смысла. AFAIK в базах данных подобный функционал реализуется триггерами, поэтому советую для начала погуглить (http://www.google.ru/search?hl=ru&q=%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C+%D1%82%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80+microsoft+ac cess&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=) на эту тему или задать вопрос в соответствующей (http://forum.oszone.net/forum-81.html) ветке форума.
NecroTYN
03-07-2011, 10:27
amel27,
обеспечить его автоматический запуск »
С этим то как раз все понятно, мне просто нужен скрипт,
поэтому советую для начала погуглить на эту тему »
Уже неделю гуглю, ничего не нашлось, потому и прошу помощи
подобный функционал реализуется триггерами »
Возможность такая есть
Возможность такая есть »Реализация скрипта как раз зависит от механизма этой возможности, т.е. скрипт должен КАК-ТО подключаться к БД и КАК-ТО отличать вновь введённые записи от введенных ранее - в триггерах эта инфа передаётся скриптам в качестве параметров.
NecroTYN
03-07-2011, 11:20
Вот скрины свойств полей (http://img6.imageshack.us/slideshow/webplayer.php?id=65822889.jpg) , рис 4 триггеры
В поле триггер указываю файл скрипта,в поле"когда срабатывает"-- при добавлении записи, в поле "Тип операции"-- Запуск файла
В поле триггер указываю файл скрипта »в таком случае должна быть возможность передачи требуемых значений полей (вновь введенных записей) средствами триггера в качестве параметров скрипта (я не знаток SQL, возможно потребуются дополнительные запросы к связанным таблицам, но должно быть достаточно одного триггера на таблицу продуктов), типа: MakeDir.VBS qdfOrders.Address qdfMain.Client tblOrdersProducts.Product MakeDir.VBS:Set FSO = CreateObject("Scripting.FileSystemObject")
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 &"\"& WScript.Arguments(0)
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& WScript.Arguments(1)
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& WScript.Arguments(2)
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
NecroTYN
03-07-2011, 12:32
Сделал файл VBS, скопировал туда вышеприведенные коды, выдает такую http://img801.imageshack.us/img801/9384/53301592.th.jpg (http://imageshack.us/photo/my-images/801/53301592.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
вот это надо в bat-файл
MakeDir.VBS qdfOrders.Address qdfMain.Client tblOrdersProducts.Product
NecroTYN
03-07-2011, 14:55
вот это надо в bat-файл »
Всеравно пишет ошибку:
Строка 6
Символ 1
Индекс выходит за пределы допустимого диапазона
Код 800А0009
Папки C:\Documents\аказы --создаются
странно
выложите bat и vbs файлы
NecroTYN
03-07-2011, 15:12
выложите bat и vbs файлы »
Вот выкладываю (http://forum.oszone.net/attachment.php?attachmentid=66310&stc=1&d=1309691565)
запускать нужно bat-файл
название vbs-файла должно быть makedir
или измените bat
CreatFolders.VBS tblOrders.Address tblMain.Client tblOrdersProducts.Product
NecroTYN
03-07-2011, 15:30
Изменил название VBS получились следующие результаты
гм... а при чем тут BAT?.. запуск должен производиться средствами СУБД
хотя, если движок сервера БД MSSQL, для запуска скриптов из SQL можно использовать xp_cmdshell (http://msdn.microsoft.com/ru-ru/library/ms175046.aspx)
NecroTYN
03-07-2011, 15:43
гм... а при чем тут BAT?.. запуск должен производиться средствами СУБД
хотя, если движок сервера БД MSSQL, для запуска скриптов из SQL можно использовать xp_cmdshell »
:o :dont-know
вот я и прошу помощи у знающих
прошу помощи у знающих »знатоки SQL в другой ветке (см.пост #2)
тем более, что движок БД до сих пор неизвестен
NecroTYN
03-07-2011, 16:30
тем более, что движок БД до сих пор неизвестен »
(СУБД MS Access или MS SQL Server)
'данный код предназначен для демонстрационных целей
'вы можете писать на языке VBScript любые скрипты
'выполнение данного файла можно связать с нажатием пользовательской кнопки,
'которую можно добавить на панель инструментов любой таблицы или с помощью триггеров
Dim sDbPath 'путь к файлу БД
Dim sDateFrom 'дата от
Dim sDateTo 'дата до
Dim sMark 'метка, чтобы пометить записи для каких-то последующих целей
sDbPath = InputBox("Укажите путь к файлу .mdb", "Выбор файла", "DemoDatabase.mdb")
If sDbPath > "" Then
sDateFrom = InputBox("Введите дату от, пример 31.12.2005", "Дата от")
If Trim(sDateFrom) > "" then
sDateTo = InputBox("Введите дату до, пример 31.12.2006", "Дата до")
If Trim(sDateTo) > "" then
sMark = InputBox("Введите метку", "Метка")
If Trim(sMark) > "" Then
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 sAbsDateFrom, sAbsDateTo 'даты в абсолютном формате
'sAbsDateFrom = Mid(sDateFrom, 7, 4) & "-" & Mid(sDateFrom, 4, 2) & "-" & Left(sDateFrom, 2) '"31.12.2005" -> "20051231"
'sAbsDateTo = Mid(sDateTo, 7, 4) & "-" & Mid(sDateTo, 4, 2) & "-" & Left(sDateTo, 2) '"31.12.2006" -> "20061231"
sAbsDateFrom = Mid(sDateFrom, 4, 2) & "/" & Left(sDateFrom, 2) & "/" & MID(sDateFrom, 7) '"31.12.2005" -> "20051231"
sAbsDateTo = Mid(sDateTo, 4, 2) & "/" & Left(sDateTo, 2) & "/" & MID(sDateTo, 7) '"31.12.2005" -> "20051231"
Dim sSql 'SQL инструкция
sSql = "UPDATE tblMain SET Notes='" & sMark & "' WHERE AddTime > #" & sAbsDateFrom & "# AND AddTime < #" & sAbsDateTo & "#" 'формируем SQL инструкцию
If MsgBox("Будет выполнена следующая SQL инструкция:" & vbCr & vbCr & sSql & vbCr & vbCr & "Продолжить?", vbYesNo+vbQuestion, "Подтверждение") = vbYes Then 'подтверждение
Con.Execute sSql 'выполняем SQL инструкцию, которая изменяет данные в таблице
If Err.Number = 0 Then
MsgBox "Обновление таблицы прошло успешно.", vbInformation, "Ура!!!"
End If
End If
Con.Close 'закрываем Connection
Set Con = Nothing 'очищаем переменную
End If
End If
End If
End if
NecroTYN
03-07-2011, 18:07
Блин парни, дак вы мне тоже не поможете ???
СУБД MS Access или MS SQL Server »триггеры будут работать только на MS SQL Server
вот родной скрипт для примера:»за скрипт спасибо (пусть будет)
но пользы от него мало - по описанным выше причинам
дак вы мне тоже не поможете ??? »а чего не хотите писать в профильную ветку?..
навскидку привести код триггера на SQL не готов - смогу скопипастить с сервера только завтра
если есть установленный MS SQL Server - смотрите BOL (SQL Server Books Online)
NecroTYN
03-07-2011, 20:15
навскидку привести код триггера на SQL не готов »
да в том то и дело что триггер писать не надо,нужно написать файл-скрипт .VBS, который будет создавать папки в файловой системе, основываясь на переданные в него параметры.
Далее нужно задать "триггер"(имеется ввиду не сам тригер,а форма через которую он задается) на добавление на таблицу "Заказы", но в качестве команды указать не SQL-инструкцию, а запуск данного файла.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.