powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Доступ к базе из VBS
26 сообщений из 26, показаны все 2 страниц
Доступ к базе из VBS
    #37965385
Igor Mitichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здрасьти :)

Господа, такой вопрос: а как достучаться до файла accdb из VBS?
Система win7 64bit. Оффис 10.

Что-то оно у меня провайдеров не видит...
Ни вот так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQLString = "SELECT Users.Компьютер, Rooms.Номер, Departaments.Название " & _
            "FROM Departaments INNER JOIN " & _
"Rooms INNER JOIN Users ON Rooms.Код = Users.Комната ON Departaments.Код = Users.Отдел " & _
"WHERE Users.Компьютер='BTE-PC124'"

    app_path = "C:\TEMP\USERS.accdb"
    conn_string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & app_path
    Set Conn = CreateObject("ADODB.Connection")
    Conn.Open conn_string
    Conn.Execute SQLString
    Conn.Close
    Set Conn = Nothing


Ни вот так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
strPathApp = "C:\TEMP\USERS.accdb"

Const dbUseJet=2
Set DAO = CreateObject("DAO.DbEngine.36")
DAO.DefaultType=dbUseJet

Set My_Base = Dao.OpenDatabase(strPathApp, True, False)
   For Each tb In My_Base.TableDefs
        If Left(tb.Connect, 9) = ";DATABASE" Then
             wscript.echo tb.name & ": " & Mid(tb.Connect,11)
        End If
   Next
Set db = Nothing



В первом случае:

Код: plaintext
1.
2.
C:\TEMP\234\test.vbs(22, 5) ADODB.Connection: Не удается найти указанный
поставщик. Вероятно, он установлен неправильно.

Во втором случае:

Код: plaintext
1.
C:\TEMP\234\test2.vbs(4, 1) Ошибка выполнения Microsoft VBScript: Невозможно
создание объекта контейнером ActiveX: 'DAO.DbEngine.36'


В какую сторону копать?
Спасибо :)
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37965431
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Mitichev,

провайдер не тот
нужно не - Provider=Microsoft.Jet.OLEDB.4.0;
а Provider=Microsoft.ACE.OLEDB.12.0;

зы
но это только начало :))
щас окажется что такого поставщика нет ...
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37965589
Igor Mitichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112но это только начало :))
щас окажется что такого поставщика нет ...

Чорт! :[*]

Ты знал!

Код: vbnet
1.
2.
3.
    conn_string = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & app_path
    Set Conn = CreateObject("ADODB.Connection")
    Conn.Open conn_string



Код: plaintext
1.
C:\TEMP\234\test.vbs(23, 5) ADODB.Connection: Не удается найти указанный поставщик.
Вероятно, он установлен неправильно.

Чего делать-то?
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37965640
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor MitichevЧорт! :[*]

Ты знал!
ага

тут, один товарищ, намедне, просто "пожрал мозге" делфистам с этим вопросом

значит, само майкрософто, предлагает, в случае 10-го Оффиса, установить такую весщч - Microsoft Access Database Engine 2010 Redistributable
там же и описанна причина, почему это нужно делать ...

НО, по факту, оказуется, что эту фигню нужно ставить ВМЕСТО А2010 (т.е - или то, или то)
(вообщем, там какой-то маразм конкретный, и я не уверен что понял до конца)

ну, а пока спасает наличие в свободном доступе драйвера "от А2007"
ставь это
Download the Microsoft Office 12.0 Access Database Engine OLE DB Provider
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37965678
Igor Mitichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112,

Я правильно понял, что самое просто будет - сделать в БД формочку, нарисовать на ней кнопочку, и на ту кнопку привесить логику скрипта, а от VBS в данном случае и вовсе отказаться?
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37965709
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Mitichevqwerty112,

Я правильно понял, что самое просто будет - сделать в БД формочку, нарисовать на ней кнопочку, и на ту кнопку привесить логику скрипта, а от VBS в данном случае и вовсе отказаться?
нуу, как бы - да, тогда можно ничего не скачивать и не устанавливать ...

но я ж не знаю зачем вам этот скрипт ? если это планировалось сделал какое-то задание в шедулере (через вбс-скрипт), то тогда, всё-таки стоит "заморичится" и скачать драйвер / сделать через вбс (используя БД Акцесса, а НЕ приложение Акцесса),
чем делать задание с использование Акцесса как приложения

имхо
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37965719
Igor Mitichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112,

Да скачал я провайдера от 2007, пишет что установилось. Но скрипт как не работал, так и не работает. Перезагрузиться надо попробовать...

P.S: Ни фига я в этом 2010 найти не могу. А можно эту базу сконвертировать в формат 2003? Где там нужная для этого кнопка находится?
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37965743
Igor Mitichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Mitichev,

Ребутнулся. Ничего не поменялось. Дело ясное, что дело темное...

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
C:\TEMP\234>cscript test3.vbs
Сервер сценариев Windows (Microsoft R) версия 5.8
c Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.

C:\TEMP\234\test3.vbs(5, 5) ADODB.Connection: Не удается найти указанный поставщ
ик. Вероятно, он установлен неправильно.


C:\TEMP\234>type test3.vbs
    SQLString = "select * from Users"
    app_path = "C:\TEMP\USERS.accdb"
    conn_string = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & app_path
    Set Conn = CreateObject("ADODB.Connection")
    Conn.Open conn_string
    Conn.Execute SQLString
    Conn.Close
    Set Conn = Nothing
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37965926
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Mitichev,

А через DSN не пробовали? В смысле создаёте DSN для подключения к БД в MS Access и как я понимаю, Вы хотите достучаться к этой базе, НЕ находясь в MS Access. А значит возможно прокатит.
Не уверен конечно, но а вдруг ... !
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37965999
Igor Mitichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,

Вообще, с каждой версией оффиса продукт становится все веселее и веселее :))

Таки можно как-то базу пересохранить в формате access 2003?

И еще. Тут библиотек каких-то не хватает, или сам метод доступа к даннымм изменился?
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37966009
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Mitichev,

Ну так подключите ADO в референсах.
Например вот этот: Microsoft ActiveX Data Objects 2.5 Library

P.S.
Здесь офис 2010 или 2007 не причём, в обычных mdb файлах А2003 также по умолчанию ADO не подключен.
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37966215
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня Офис2003. Скачал http://www.microsoft.com/en-us/download/details.aspx?id=23734 из ответа йцукен.
Теперь могу смотреть данные из A2010
vbs
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    db = "D:\Мои документы\пустографка.accdb"
    s = "select * from qwe"
    Set con = CreateObject("ADODB.Connection")
    con.CursorLocation = 3
    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & db
    con.Open
    Set r = CreateObject("ADODB.Recordset")
    r.Open s, con, 1, 4
    Set xlA = CreateObject("Excel.Application")
    xlA.visible=true  
    Set xlW = xlA.Workbooks.add
    Set xlSheet = xlW.Sheets(1)
    For i = 0 To r.Fields.count - 1
       xlSheet.Cells(1, i + 1).Value = r.Fields(i).name
    Next 
   xlSheet.Range("A2").CopyFromRecordset r
   r.Close: Set r = Nothing
   con.Close: Set con = Nothing
   set xlSheet=nothing
   set xlW=nothing
   set xlA=nothing	

...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37966540
Igor Mitichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenНу так подключите ADO в референсах.
Ну да. вроде заработало, библиотека эта была не подключена...
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37966542
Igor Mitichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?????У меня Офис2003. Скачал http://www.microsoft.com/en-us/download/details.aspx?id=23734 из ответа йцукен.
Теперь могу смотреть данные из A2010
:) А вот об этом варианте я как-то не подумал. Вот тут за подсказку действительно спасибо :)
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37966543
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor MitichevstudierenНу так подключите ADO в референсах.
Ну да. вроде заработало, библиотека эта была не подключена...
а в скрипте заработало ?
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37966544
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Mitichev?????У меня Офис2003. Скачал http://www.microsoft.com/en-us/download/details.aspx?id=23734 из ответа йцукен.
Теперь могу смотреть данные из A2010
:) А вот об этом варианте я как-то не подумал. Вот тут за подсказку действительно спасибо :)
о каком, нах, варианте ??
ты жж так и делал до этого, в вбс-скрипте !!
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37966557
Igor Mitichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112,

Нет, в скрипте все по прежнему. На сколько я понимаю, то, что я в референсах редактора VBA поставил галочку напротив "Microsoft ActiveX Data Objects 6.1 Library", повлияло только на данный конкретный проект. А сценарий выполняется в среде WSH и там ничего не изменилось...
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37966562
Igor Mitichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112о каком, нах, варианте ??
ты жж так и делал до этого, в вбс-скрипте !!

То, что в win 7 64bit c office 10 каши не сваришь - я понял. Потому и спрашивал, как сконвертировать базу в формат office 2003. Чтобы обработка данных проходила в нормальных приличных условиях: winXP + Office 2003. Судя по тому, что мне никто не ответил, задача нетривиальна. А так - получается что я могу на машине с ХП юзать эту базу и без всякого конвертирования...
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37966570
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Mitichev,

какая ОС, и её битность ?
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37966572
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor MitichevТо, что в win 7 64bit ...
угу, не посмотрел
http://social.msdn.microsoft.com/Forums/ru-RU/fordataru/thread/a22ff616-62b8-42f6-870d-9777692e39e4 Попытаться запускать через явно указанную версию cscript.exe(system32 или syswow64).
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37966724
Igor Mitichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112,

Опа! А ошибку-то как раз 32-битная версия выдает...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
C:\Windows\System32>cscript.exe C:\TEMP\234\test3.vbs
Сервер сценариев Windows (Microsoft R) версия 5.8
c Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.

C:\TEMP\234\test3.vbs(5, 5) ADODB.Connection: Не удается найти указанный поставщ
ик. Вероятно, он установлен неправильно.


C:\Windows\SysWOW64>cscript.exe C:\TEMP\234\test3.vbs
Сервер сценариев Windows (Microsoft R) версия 5.8
c Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.


C:\Windows\SysWOW64>
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #37967034
Igor Mitichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, все заработало, скрипт написан и отлажен, все путем :))
Всем спасибо за помощь. Для доступа к базе нужно использовать cscript из 64-битной папки.
На всякий случай привожу код (строки, относящиеся к обсуждаемому вопросу), чтобы людям потом не изобретать велосипед:

авторC:\TEMP\234>C:\Windows\SysWOW64\cscript.exe test3.vbs
Сервер сценариев Windows (Microsoft R) версия 5.8
c Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.

Код
Фамилия
Имя
Отчество
Комната
Отдел
Компьютер

C:\TEMP\234>type test3.vbs
app_path = "C:\TEMP\USERS.accdb"
Set Conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & app_path
Conn.Open
SQLString = "select * from Users"
rs.Open SQLString, Conn, 1, 4

For i = 0 To rs.Fields.count - 1
wscript.echo rs.Fields(i).name
Next

rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing

C:\TEMP\234>


P.S: Кстати, перемещение пути к папке SysWOW64 перед папкой System32 в переменной PATH результата не дало. Cscript все равно надо запускать именно посредством указания полного пути к файлу почему-то... Но это уже мелочи.
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #38049688
omegastripes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток. Предлагаю простой костыль избавляющий от "Не удается найти указанный поставщик. Вероятно, он установлен неправильно." и "Невозможно создание объекта контейнером ActiveX". Он при запуске скрипта проверяет соответствие сервера сценариев архитектуре ОС, и при необходимости перезапускает скрипт с нужным сервером. Единственный недостаток - костыль при перезапуске не передаст в скрипт параметры (например, из ярлыка или dragndrop).
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
'Check WScript.exe comply with System
CheckOSx86x64

'main body here
'Set Conn = CreateObject("ADODB.Connection")
'...

Sub CheckOSx86x64()
    Dim WSS, WSPath, WSPath32, WSPath64, VBSpath, WinPath, OSx64
    Set WSS = WScript.CreateObject("WScript.Shell")
    WSPath = LCase(WScript.Path) ' WScript.exe path
    VBSpath = LCase(WSS.CurrentDirectory) ' *.vbs path
    WinPath = LCase(WSS.ExpandEnvironmentStrings("%windir%\"))
    strKeyOs = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE"
    sRazr = WSS.RegRead(strKeyOs)
    If InStr(1, sRazr, "64") > 0 Then
        OSx64 = True
    Else
        OSx64 = False
    End If
    If WSPath = WinPath & "system32" Then
        WSPath32 = True
    Else
        WSPath32 = False
    End If
    If WSPath = WinPath & "syswow64" Then
        WSPath64 = True
    Else
        WSPath64 = False
    End If
    If (WSPath32 And Not OSx64) Or (WSPath64 And OSx64) Then
        MsgBox "WScript.exe comply with System", 64
    Else
        If WSPath32 And OSx64 Then
            MsgBox "ReRun Script via SysWOW64\WScript.exe", 48
            WSS.Run Chr(34) & WinPath & "SysWOW64\WScript.exe" & Chr(34) & " " & Chr(34) & WScript.ScriptFullName & Chr(34)
            WScript.Quit
        End If
        If WSPath64 And Not OSx64 Then
            MsgBox "ReRun Script via System32\WScript.exe", 48
            WSS.Run Chr(34) & WinPath & "System32\WScript.exe" & Chr(34) & " " & Chr(34) & WScript.ScriptFullName & Chr(34)
            WScript.Quit
        End If
        MsgBox "WScript.exe not comply with System", 48
    End If
End Sub
...
Рейтинг: 0 / 0
Доступ к базе из VBS
    #38068538
omegastripes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тот же костыль, но с устраненным недостатком. Вызывать Sub CheckOSx86x64Args() в начале скрипта.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Доступ к базе из VBS
    #38535943
omegastripes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Убрал все лишнее.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
checkosx86x64args()

' разместите свой код здесь


sub checkosx86x64args()
	' если скрипт запущен из %windir%\system32\ под win x64 - перезапуск из %windir%\syswow64\
	dim cmdln, arg
	with createobject("WScript.Shell")
		if replace(lcase(wscript.path), lcase(.expandenvironmentstrings("%windir%\")), "") = "system32" then
			cmdln = replace(lcase(wscript.fullname), "system32", "syswow64")
			if createobject("scripting.filesystemobject").fileexists(cmdln) then
				cmdln = cmdln & " """ & wscript.scriptfullname & """"
				for each arg in wscript.arguments
					cmdln = cmdln & " """ & arg & """"
				next
				.run cmdln
				wscript.quit
				end if
		end if
	end with
end sub
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Доступ к базе из VBS
    #40115962
paul597368
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо всем!
Голову сломал пока не нашел этот пост.
Проблема была с работой скрипта, который запускался из bat файла.

А всего лишь нужно было указать полный путь к запуску WScript.exe
Вместо
start /w WScript.exe "restart_00.vbs" -1 %cd%

нужно было указать
start /w C:\Windows\SysWOW64\WScript.exe "restart_00.vbs" -1 %cd%
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Доступ к базе из VBS
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]