Я пытаюсь создать comobject PowerShell AccessObject для своего приложения MS Access. По сути, я попытаюсь создать сценарий PowerShell, который будет получать запросы в базе данных и таблицах и / или запросах, от которых зависит конкретный запрос. Для этого мне понадобится экземпляр классов MS Access AccessObject и DependencyInfo в моем сценарии PowerShell. Я прикрепил фрагмент функции, которую собираюсь использовать. Обратите внимание: это не полная функция. Все, что я хочу, это знать, как создать экземпляр DependencyInfo и AccessObjects в PowerShell.
function getQueries([string] $database)
{
$dbEng = New-Object -ComObject DAO.DBEngine.120
$AccessApp= New-Object -ComObject Access.Application
$Dependency = $AccessApp.DependencyInfo
$AccessObject=$AccessApp.AccessObjects
...
}
All i want is to know how to create an instance of the DependencyInfo and AccessObjects in powershell.
Следующее создает новый процесс Access, открывает локальный файл accdb и извлекает зависимости для данной формы:
$db = new-object -ComObject 'Access.Application'
$db.OpenCurrentDatabase('C:\temp\deezNutz.accdb')
$dependency_info = $db.Application.CurrentProject().AllForms('frm_person').GetDependencyInfo()
foreach ($dependency in $dependency_info.Dependencies) { $dependency.FullName }
$db.CloseCurrentDatabase()
$db.Application.DoCmd.Quit()
Если вы пытаетесь программно управлять объектами в базе данных Microsoft Access, например формами, отчетами, запросами и т. д., Лучше всего искать решения с помощью VBA, а затем преобразовывать их в Powershell. Для этого примера я сначала написал решение на VBA, а затем преобразовал его в Powershell.
Спасибо, @Lord Adam. Это было действительно полезно. В моем случае пришлось немного изменить логику:
$AccessApp= New-Object -ComObject 'Access.Application'
$AccessApp.OpenCurrentDatabase($database)
$AccessApp.Application.SetOption("Track Name AutoCorrect Info", $true)
$QryDependency = $AccessApp.Application.CurrentData.AllQueries.Item($query.Name).GetDependencyInfo()
ForEach($di in $QryDependency.Dependencies)
{
$QryObjects= $QryObjects + $di.Name +","
}
Спасибо, @Lord Adam. Это было действительно полезно. В моем случае пришлось немного изменить логику. $ AccessApp = New-Object -ComObject 'Access.Application' $ AccessApp.OpenCurrentDatabase ($ database) $ AccessApp.Application.SetOption ("Отслеживать информацию об автозамене имени", $ true) $ QryDependency = $ AccessApp.Application.CurrentData.AllQueries. Элемент ($ query.Na me) .GetDependencyInf o ().