Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Доступ к базе из VBS / 25 сообщений из 26, страница 1 из 2
20.09.2012, 12:11
    #37965385
Igor Mitichev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
Здрасьти :)

Господа, такой вопрос: а как достучаться до файла 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
20.09.2012, 12:28
    #37965431
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
Igor Mitichev,

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

зы
но это только начало :))
щас окажется что такого поставщика нет ...
...
Рейтинг: 0 / 0
20.09.2012, 13:27
    #37965589
Igor Mitichev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
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
20.09.2012, 13:45
    #37965640
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
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
20.09.2012, 14:01
    #37965678
Igor Mitichev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
qwerty112,

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

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

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

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

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

P.S: Ни фига я в этом 2010 найти не могу. А можно эту базу сконвертировать в формат 2003? Где там нужная для этого кнопка находится?
...
Рейтинг: 0 / 0
20.09.2012, 14:28
    #37965743
Igor Mitichev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
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
20.09.2012, 15:32
    #37965926
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
Igor Mitichev,

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

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

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

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

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

P.S.
Здесь офис 2010 или 2007 не причём, в обычных mdb файлах А2003 также по умолчанию ADO не подключен.
...
Рейтинг: 0 / 0
20.09.2012, 17:49
    #37966215
?????
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
У меня Офис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
20.09.2012, 22:52
    #37966540
Igor Mitichev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
studierenНу так подключите ADO в референсах.
Ну да. вроде заработало, библиотека эта была не подключена...
...
Рейтинг: 0 / 0
20.09.2012, 22:53
    #37966542
Igor Mitichev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
?????У меня Офис2003. Скачал http://www.microsoft.com/en-us/download/details.aspx?id=23734 из ответа йцукен.
Теперь могу смотреть данные из A2010
:) А вот об этом варианте я как-то не подумал. Вот тут за подсказку действительно спасибо :)
...
Рейтинг: 0 / 0
20.09.2012, 22:54
    #37966543
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
Igor MitichevstudierenНу так подключите ADO в референсах.
Ну да. вроде заработало, библиотека эта была не подключена...
а в скрипте заработало ?
...
Рейтинг: 0 / 0
20.09.2012, 22:56
    #37966544
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
Igor Mitichev?????У меня Офис2003. Скачал http://www.microsoft.com/en-us/download/details.aspx?id=23734 из ответа йцукен.
Теперь могу смотреть данные из A2010
:) А вот об этом варианте я как-то не подумал. Вот тут за подсказку действительно спасибо :)
о каком, нах, варианте ??
ты жж так и делал до этого, в вбс-скрипте !!
...
Рейтинг: 0 / 0
20.09.2012, 23:04
    #37966557
Igor Mitichev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
qwerty112,

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

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

какая ОС, и её битность ?
...
Рейтинг: 0 / 0
20.09.2012, 23:14
    #37966572
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
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
21.09.2012, 08:25
    #37966724
Igor Mitichev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
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
21.09.2012, 11:37
    #37967034
Igor Mitichev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
В общем, все заработало, скрипт написан и отлажен, все путем :))
Всем спасибо за помощь. Для доступа к базе нужно использовать 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
22.11.2012, 23:38
    #38049688
omegastripes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
Всем доброго времени суток. Предлагаю простой костыль избавляющий от "Не удается найти указанный поставщик. Вероятно, он установлен неправильно." и "Невозможно создание объекта контейнером 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
06.12.2012, 18:41
    #38068538
omegastripes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
Тот же костыль, но с устраненным недостатком. Вызывать Sub CheckOSx86x64Args() в начале скрипта.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
23.01.2014, 18:32
    #38535943
omegastripes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к базе из VBS
Убрал все лишнее.
Код: 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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Доступ к базе из VBS / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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