powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / VBS, доступ к БД SQL Server 2005
21 сообщений из 21, страница 1 из 1
VBS, доступ к БД SQL Server 2005
    #39701075
PUT_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
здравствуйте
имеется код для доступа к БД 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
VBS, доступ к БД SQL Server 2005
    #39701273
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем необходимость выбора такого экзотического провайдера?
авторProvider=WinCCOLEDBProvider.1
...
Рейтинг: 0 / 0
VBS, доступ к БД SQL Server 2005
    #39701278
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
VBS, доступ к БД SQL Server 2005
    #39701616
PUT_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008, выбол обусловлен средой разработки и исполнения WinCC.
...
Рейтинг: 0 / 0
VBS, доступ к БД SQL Server 2005
    #39701692
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PUT_2012 Пробовал также в строку конекции прописать UID и PWD учетки админа винды
А разве пользователь там указывается не как "User ID=" ?
...
Рейтинг: 0 / 0
VBS, доступ к БД SQL Server 2005
    #39701713
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008PUT_2012 Пробовал также в строку конекции прописать UID и PWD учетки админа винды
А разве пользователь там указывается не как "User ID=" ?
Пользователя Windows безразлично как указывать - один хрен, бесполезно.
...
Рейтинг: 0 / 0
VBS, доступ к БД SQL Server 2005
    #39701895
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PUT_2012 Пробовал также в строку конекции прописать UID и PWD учетки админа ... студии БД (пользователь sa) но это тоже не принесло успеха
aleks222SQL2008пропущено...

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

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
VBS, доступ к БД SQL Server 2005
    #39714085
PUT_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ничего не получилось
трабла таже
...
Рейтинг: 0 / 0
VBS, доступ к БД SQL Server 2005
    #39714159
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PUT_2012ничего не получилось
трабла тажеКакая трабла?
PUT_2012в протином случае подключение к БД происходит, но поля recordset не читаются.То есть соединение нормальное, в нём правильно выполняются запросы, ваш запрос тоже успешно выполняется, но выдаёт пустой рекордсет? А поля у рекордсета правильные?
...
Рейтинг: 0 / 0
VBS, доступ к БД SQL Server 2005
    #39715109
PUT_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg, прочитайте самый первый пост в этом топике и поймете в чем дело.
...
Рейтинг: 0 / 0
VBS, доступ к БД SQL Server 2005
    #39715120
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PUT_2012alexeyvg, прочитайте самый первый пост в этом топике и поймете в чем дело.Я процитировал те места из первого поста, которые мне непонятны.

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

Тут начали сразу обсуждать коннекшкн стринг в WinCC, потому что он бросается в глаза, но непонятно, в чём сама проблема то?
Раз вы написали "в первом посте", что "подключение к БД происходит", значит, соединение, авторизацию, и коннекшен стринг обсуждать уже не надо, подключение корректное?
Вы его проверяли, это соеджинение, или просто выполняете ваш скрипт, и смотрите на него? Выполнили для него, например, SELECT GETDATE()? Что он вернул?
...
Рейтинг: 0 / 0
VBS, доступ к БД SQL Server 2005
    #39715126
PUT_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg, в рекордсете нет данных
...
Рейтинг: 0 / 0
VBS, доступ к БД SQL Server 2005
    #39715128
PUT_2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сторока
n = Rs.RecordCount 'количество записей набора
возвращает пустое значение
...
Рейтинг: 0 / 0
VBS, доступ к БД SQL Server 2005
    #39715164
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
VBS, доступ к БД SQL Server 2005
    #39715168
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PUT_2012сторока
n = Rs.RecordCount 'количество записей набора
возвращает пустое значениепустое значение - вы имеете в виду 0?
А в Rs.Fields.Count что?

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


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