Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / VBS, доступ к БД SQL Server 2005 / 21 сообщений из 21, страница 1 из 1
11.09.2018, 19:37
    #39701075
PUT_2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
здравствуйте
имеется код для доступа к БД SQL Server 2005 в клиент-серверной архитектуре
=
Код: sql
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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
Sub OnClick(Byval Item)                                   

'=====================================================================================
'Определяем значение локального(местного) и системного(UTC) времени
'=====================================================================================
Dim UTC_Time,Local_Time,objDateTime
Local_Time = Now()
Set objDateTime = CreateObject("WbemScripting.SWbemDateTime")  
objDateTime.SetVarDate (Now())
UTC_Time = objDateTime.GetVarDate(False)
 
HMIRuntime.Trace "Определяем значение локального (местного) и системного (UTC) времени"  &vbNewLine
HMIRuntime.Trace "Local Time :  " &Local_Time &vbNewLine
HMIRuntime.Trace "UTC Time   :  " &UTC_Time   &vbNewLine
 
'=====================================================================================
'Вычисляем разницу между локальным(местным) и системным(UTC) временем
'=====================================================================================
Dim Diff
Diff = DateDiff("h",UTC_Time,Local_Time)
HMIRuntime.Trace "Разница между локальным (местным) и системным (UTC) временем составляет " &Diff  
HMIRuntime.Trace " часа" &vbNewLine
 
'=====================================================================================
'Определяем начало и конец даты-времени для выборки значений архивного тэга
'=====================================================================================
Dim StartY,StartM,StartD,StartH,StartMin,StartS
Dim EndY,EndM,EndD,EndH,EndMin,EndS
StartY   = ScreenItems("DateTimePicker").Year
StartM   = ScreenItems("DateTimePicker").Month
StartD   = ScreenItems("DateTimePicker").Day
StartH   = 0
StartMin = 0
StartS   = 0
 
EndY     = StartY
EndM     = StartM
EndD     = StartD
EndH     = 23
EndMin   = 59
EndS     = 59
 
'=====================================================================================
'Формируем начальную и конечную строку типа дата-время для выборки значений архивного тэга
'=====================================================================================
Dim StartDate,EndDate
StartDate = CDate(StartY&"."&StartM&"."&StartD&" "&StartH&":"&StartMin&":"&StartS)
EndDate = CDate(EndY&"."&EndM&"."&EndD&" "&EndH&":"&EndMin&":"&EndS)
 
HMIRuntime.Trace "-----------------------------------------"      &vbNewLine
HMIRuntime.Trace " Определяем диапазон даты и времени для отчета" &vbNewLine
HMIRuntime.Trace " Начало отчета "  &StartDate &vbNewLine
HMIRuntime.Trace " Конец отчета  "  &EndDate   &vbNewLine
HMIRuntime.Trace "-----------------------------------------"      &vbNewLine
 
'Корректируем вышеполученные значения с учетом разницы времен
Dim corStartDate, corEndDate
corStartDate = DateAdd("h",-Diff,StartDate)
corEndDate   = DateAdd("h",-Diff,EndDate)
 
HMIRuntime.Trace "Корректируем вышеполученные значения с учетом разницы локального (местного) и системного (UTC) времени"      &vbNewLine
HMIRuntime.Trace " Начало отчета "  &corStartDate &vbNewLine
HMIRuntime.Trace " Конец отчета  "  &corEndDate   &vbNewLine
HMIRuntime.Trace "-----------------------------------------"      &vbNewLine
 
If corEndDate <= corStartDate Then
ScreenItems("StPleaseWait").Visible = False
HMIRuntime.Trace "Выбран неверный диапазон времени ! ПРОВЕРТЕ !"& vbNewLine
Exit Sub
End If
HMIRuntime.Trace "-----------------------------------------"      &vbNewLine
 
'=====================================================================================
'Читаем имя сервера
'=====================================================================================
Dim objServerName,SrvName 
Set objServerName = HMIRuntime.Tags("@ServerName")
objServerName.Read
SrvName = objServerName.Value
 
HMIRuntime.Trace "Имя сервера : " &SrvName &vbNewLine
'=====================================================================================
'Читаем имя рантайм базы данных проекта
'=====================================================================================
Dim objDatasourceNameRT,DSN
Set objDatasourceNameRT = HMIRuntime.Tags("@DatasourceNameRT")
objDatasourceNameRT.Read
DSN = objDatasourceNameRT.Value
 
HMIRuntime.Trace "Имя рантайм базы данных проекта : " &DSN &vbNewLine
HMIRuntime.Trace "-----------------------------------------"      &vbNewLine
 
 
'=====================================================================================
'Формируем строку подключения для провайдера WinCCOLEDBProvider
'=====================================================================================
Dim ConnStr
ConnStr = "Provider=WinCCOLEDBProvider.1;Catalog="&DSN&";Data Source="&SrvName&"\WinCC"
 
'=====================================================================================
'Работа с объектом ADODB.Connection
'=====================================================================================
'Устанавливаем соединение с БД SQL Server
Dim objConnection
Set objConnection = CreateObject("ADODB.Connection")
objConnection.ConnectionString = ConnStr 'строка подключения
objConnection.CursorLocation = 3         'положение курсора = 3 (всегда для нашего случая)
objConnection.open
 
If objConnection.state = 1 Then
    HMIRuntime.Trace "Соединение с БД УСТАНОВЛЕННО"      &vbNewLine
Else
    HMIRuntime.Trace "Соединение с БД  НЕ УСТАНОВЛЕННО"   &vbNewLine
    Exit Sub
End If
HMIRuntime.Trace "-----------------------------------------"      &vbNewLine
 
'=====================================================================================
'Выбор ID архивного тега
'=====================================================================================
Dim TagID 
TagID = 3
 
'=====================================================================================
'Формируем строку запроса к БД
'=====================================================================================
'Образец строки запроса: sSql = "Tag:R,1,'0000-00-00 00:01:00.000','0000-00-00 00:00:00.000'"
Dim sSql
sSql = "Tag:R, "&TagID&" , '"&Year(corStartDate)&"-"&Month(corStartDate)&"-"&Day(corStartDate)&_ 
" " & Hour(corStartDate)&":"&Minute(corStartDate)&":"&Second(corStartDate)&".000' , '"&_
Year(corEndDate)&"-"&Month(corEndDate)&"-"&Day(corEndDate)&" "&_
Hour(corEndDate)&":"&Minute(corEndDate)&":"&Second(corEndDate)&".000'" 
 
HMIRuntime.Trace "                         "                      &vbNewLine
HMIRuntime.Trace "ID архивного тега             :    "  &TagID    &vbNewLine
 
If TagID <= 0 Then 
HMIRuntime.Trace "ВНИМАНИЕ ! ОШИБКА ! ID архивного тэга <= 0. Прекращение выполниния программы !"& vbNewLine
Exit Sub
End If
 
HMIRuntime.Trace "Формируем строку запроса к БД :    "  &sSql     &vbNewLine
HMIRuntime.Trace "-----------------------------------------"      &vbNewLine
 
'=====================================================================================
'Работа с объектом ADODB.Command        
'=====================================================================================
Dim objCommand
Set objCommand = CreateObject("ADODB.Command")
objCommand.CommandType = 1                      'тип команды = 1 (текстовый)
Set objCommand.ActiveConnection = objConnection 'активное подключение
objCommand.CommandText = sSQL
 
'=====================================================================================
'Работа с объектом ADODB.RecordSet  
'=====================================================================================
'Объекты RecordSet будут создаваться и удаляться отдельно для каждого тэга
Dim objRecordset
Set objRecordset = CreateObject("ADODB.Recordset")
Set objRecordset = objCommand.Execute ' извлекаем данные тэга из БД
 
 
Dim fields,records
fields  = objRecordset.Fields.Count  'количество полей (столбцов) в таблице
records = objRecordset.RecordCount 'количество записе (строк) в таблице 
 
HMIRuntime.Trace "количество полей (столбцов) в таблице БД для данного архивного тэга    = "  &fields    &vbNewLine
HMIRuntime.Trace "количество записей (строк) в таблице БД для данного архивного тэга за сутки  = "  &records    &vbNewLine
HMIRuntime.Trace "-----------------------------------------"      &vbNewLine
 
 
'данный код демонстрирует строки таблици БД
 
objRecordset.MoveFirst
 
Dim f,s
 
For s=1 To 10
    For f=0 To fields-1
        HMIRuntime.Trace objRecordset.Fields(f) & "    "
Next
    
    HMIRuntime.Trace vbNewLine
    objRecordset.MoveNext
Next
 
HMIRuntime.Trace "-----------------------------------------" 
HMIRuntime.Trace " " &vbNewLine
 
  
End Sub


данный код работает только в том случае когда на клиенте(Windows 7) создать такогоже админа с таким же паролем как на сервере(Windows Server 2008), в протином случае подключение к БД происходит, но поля recordset не читаются.
Пробовал также в строку конекции прописать UID и PWD учетки админа винды или студии БД (пользователь sa) но это тоже не принесло успеха
Код: sql
1.
ConnStr = "Provider=WinCCOLEDBProvider.1;Catalog="&DSN&";Data Source="&SrvName&"\WinCC"


Прошу помощи у сообщества
...
Рейтинг: 0 / 0
12.09.2018, 09:44
    #39701273
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
А в чем необходимость выбора такого экзотического провайдера?
авторProvider=WinCCOLEDBProvider.1
...
Рейтинг: 0 / 0
12.09.2018, 09:47
    #39701278
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
...
Рейтинг: 0 / 0
12.09.2018, 16:21
    #39701616
PUT_2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
SQL2008, выбол обусловлен средой разработки и исполнения WinCC.
...
Рейтинг: 0 / 0
12.09.2018, 18:10
    #39701692
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
PUT_2012 Пробовал также в строку конекции прописать UID и PWD учетки админа винды
А разве пользователь там указывается не как "User ID=" ?
...
Рейтинг: 0 / 0
12.09.2018, 18:53
    #39701713
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
SQL2008PUT_2012 Пробовал также в строку конекции прописать UID и PWD учетки админа винды
А разве пользователь там указывается не как "User ID=" ?
Пользователя Windows безразлично как указывать - один хрен, бесполезно.
...
Рейтинг: 0 / 0
13.09.2018, 10:14
    #39701895
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
PUT_2012 Пробовал также в строку конекции прописать UID и PWD учетки админа ... студии БД (пользователь sa) но это тоже не принесло успеха
aleks222SQL2008пропущено...

А разве пользователь там указывается не как "User ID=" ?
Пользователя Windows безразлично как указывать - один хрен, бесполезно.
PUT_2012 Пробовал также в строку конекции прописать UID и PWD учетки админа ... студии БД (пользователь sa) но это тоже не принесло успеха
Речь шла и о SQL аккаунте в том числе.
...
Рейтинг: 0 / 0
14.09.2018, 15:55
    #39702742
PUT_2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
SQL2008,перепробовал предложенные вами варианты.
Тщетно.
...
Рейтинг: 0 / 0
14.09.2018, 16:34
    #39702771
iShvedsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
Вот тут пишут, что:

The password is only used for database access with the MS OleDB interface. This field is not used for database access with the WinCC-OleDBProvider.

This user name is only used for database access with the MS OleDB interface. This field is not used for database access with the WinCC-OleDBProvider.

Пользователь и пароль только для доступа через MS OLEDB - см. http://support.automation.siemens.com/WW/view/en/27147643
...
Рейтинг: 0 / 0
07.10.2018, 18:30
    #39714085
PUT_2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
ничего не получилось
трабла таже
...
Рейтинг: 0 / 0
07.10.2018, 23:37
    #39714159
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
PUT_2012ничего не получилось
трабла тажеКакая трабла?
PUT_2012в протином случае подключение к БД происходит, но поля recordset не читаются.То есть соединение нормальное, в нём правильно выполняются запросы, ваш запрос тоже успешно выполняется, но выдаёт пустой рекордсет? А поля у рекордсета правильные?
...
Рейтинг: 0 / 0
09.10.2018, 19:09
    #39715109
PUT_2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
alexeyvg, прочитайте самый первый пост в этом топике и поймете в чем дело.
...
Рейтинг: 0 / 0
09.10.2018, 19:28
    #39715120
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
PUT_2012alexeyvg, прочитайте самый первый пост в этом топике и поймете в чем дело.Я процитировал те места из первого поста, которые мне непонятны.

Не читается - это можно понимать как "совесть не позволяет", "сервер возвращает ошибку", "в рекордсете нет данных"

Тут начали сразу обсуждать коннекшкн стринг в WinCC, потому что он бросается в глаза, но непонятно, в чём сама проблема то?
Раз вы написали "в первом посте", что "подключение к БД происходит", значит, соединение, авторизацию, и коннекшен стринг обсуждать уже не надо, подключение корректное?
Вы его проверяли, это соеджинение, или просто выполняете ваш скрипт, и смотрите на него? Выполнили для него, например, SELECT GETDATE()? Что он вернул?
...
Рейтинг: 0 / 0
09.10.2018, 19:33
    #39715126
PUT_2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
alexeyvg, в рекордсете нет данных
...
Рейтинг: 0 / 0
09.10.2018, 19:34
    #39715128
PUT_2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
сторока
n = Rs.RecordCount 'количество записей набора
возвращает пустое значение
...
Рейтинг: 0 / 0
09.10.2018, 21:05
    #39715164
Mind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
PUT_2012SQL2008, выбол обусловлен средой разработки и исполнения WinCC.А чем был обусловлен выбор форума? Последний раз я проверял, SQL Server не умел выполнять запросы вида: "Tag:R,1,'0000-00-00 00:01:00.000','0000-00-00 00:00:00.000'".

Вы можете конечно включить профайлер и посмотреть подключается ли вообще ваш сервер приложений к БД, под каким логином и какие запросы пытается выполнять, но на этом впринципе дебагинг со стороны SQL Server закончится. Что там WinCC делает с вашим запросом и строкой подключения лучше смотреть его в документации. Я не думаю что тут много специалистов по WinCC.
...
Рейтинг: 0 / 0
09.10.2018, 21:11
    #39715168
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
PUT_2012сторока
n = Rs.RecordCount 'количество записей набора
возвращает пустое значениепустое значение - вы имеете в виду 0?
А в Rs.Fields.Count что?

Ещё. может, вы к другой базе подключаетесь, когда другой пользователь?
Выведите select DB_NAME(), @@SERVERNAME
...
Рейтинг: 0 / 0
10.10.2018, 11:33
    #39715462
iShvedsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
PUT_2012, вот тут скачайте Application example. Меняйте провайдера, пользователя и пароль, да смотрите что Вам возвращается. Потом принимайте решении чем ходить в БД. Делов на 30 минут.
...
Рейтинг: 0 / 0
11.10.2018, 18:59
    #39716335
PUT_2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
alexeyvg, я вам неумышленно соврал :)
на этой строке n = Rs.RecordCount 'количество записей набора
скрипт просто зависает
при вставке в начале скрипта строки On Error Resume Next скрипт продолжает выполнятся и с помощью тестового диалогового окна можна увидеть что в переменной n ничего нет,уста тоесть она
...
Рейтинг: 0 / 0
11.10.2018, 19:01
    #39716338
PUT_2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
переменная n пустая
...
Рейтинг: 0 / 0
21.10.2018, 15:01
    #39720461
PUT_2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBS, доступ к БД SQL Server 2005
iShvedsky,можете рассказать по подробней.?
У меня не выходит
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / VBS, доступ к БД SQL Server 2005 / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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