Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 VBS, доступ к БД SQL Server 2005  [new]
PUT_2012
Member

Откуда: Ukraine
Сообщений: 35
здравствуйте
имеется код для доступа к БД SQL Server 2005 в клиент-серверной архитектуре
+=
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) но это тоже не принесло успеха
ConnStr = "Provider=WinCCOLEDBProvider.1;Catalog="&DSN&";Data Source="&SrvName&"\WinCC"

Прошу помощи у сообщества
11 сен 18, 19:37    [21671400]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4176
А в чем необходимость выбора такого экзотического провайдера?
автор
Provider=WinCCOLEDBProvider.1
12 сен 18, 09:44    [21671762]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4176
Тут есть масса работающих и проверенных вариантов.
12 сен 18, 09:47    [21671767]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
PUT_2012
Member

Откуда: Ukraine
Сообщений: 35
SQL2008, выбол обусловлен средой разработки и исполнения WinCC.
12 сен 18, 16:21    [21672446]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4176
PUT_2012
Пробовал также в строку конекции прописать UID и PWD учетки админа винды

А разве пользователь там указывается не как "User ID=" ?
12 сен 18, 18:10    [21672586]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
aleks222
Member

Откуда:
Сообщений: 920
SQL2008
PUT_2012
Пробовал также в строку конекции прописать UID и PWD учетки админа винды

А разве пользователь там указывается не как "User ID=" ?

Пользователя Windows безразлично как указывать - один хрен, бесполезно.
12 сен 18, 18:53    [21672678]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4176
PUT_2012
Пробовал также в строку конекции прописать UID и PWD учетки админа ... студии БД (пользователь sa) но это тоже не принесло успеха

aleks222
SQL2008
пропущено...

А разве пользователь там указывается не как "User ID=" ?

Пользователя Windows безразлично как указывать - один хрен, бесполезно.

PUT_2012
Пробовал также в строку конекции прописать UID и PWD учетки админа ... студии БД (пользователь sa) но это тоже не принесло успеха

Речь шла и о SQL аккаунте в том числе.
13 сен 18, 10:14    [21673150]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
PUT_2012
Member

Откуда: Ukraine
Сообщений: 35
SQL2008,перепробовал предложенные вами варианты.
Тщетно.
14 сен 18, 15:55    [21674872]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
iShvedsky
Member

Откуда:
Сообщений: 43
Вот тут пишут, что:

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
14 сен 18, 16:34    [21674917]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
PUT_2012
Member

Откуда: Ukraine
Сообщений: 35
ничего не получилось
трабла таже
7 окт 18, 18:30    [21697423]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31328
PUT_2012
ничего не получилось
трабла таже
Какая трабла?
PUT_2012
в протином случае подключение к БД происходит, но поля recordset не читаются.
То есть соединение нормальное, в нём правильно выполняются запросы, ваш запрос тоже успешно выполняется, но выдаёт пустой рекордсет? А поля у рекордсета правильные?
7 окт 18, 23:37    [21697594]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
PUT_2012
Member

Откуда: Ukraine
Сообщений: 35
alexeyvg, прочитайте самый первый пост в этом топике и поймете в чем дело.
9 окт 18, 19:09    [21699641]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31328
PUT_2012
alexeyvg, прочитайте самый первый пост в этом топике и поймете в чем дело.
Я процитировал те места из первого поста, которые мне непонятны.

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

Тут начали сразу обсуждать коннекшкн стринг в WinCC, потому что он бросается в глаза, но непонятно, в чём сама проблема то?
Раз вы написали "в первом посте", что "подключение к БД происходит", значит, соединение, авторизацию, и коннекшен стринг обсуждать уже не надо, подключение корректное?
Вы его проверяли, это соеджинение, или просто выполняете ваш скрипт, и смотрите на него? Выполнили для него, например, SELECT GETDATE()? Что он вернул?
9 окт 18, 19:28    [21699661]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
PUT_2012
Member

Откуда: Ukraine
Сообщений: 35
alexeyvg, в рекордсете нет данных
9 окт 18, 19:33    [21699667]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
PUT_2012
Member

Откуда: Ukraine
Сообщений: 35
сторока
n = Rs.RecordCount 'количество записей набора
возвращает пустое значение
9 окт 18, 19:34    [21699669]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
PUT_2012
SQL2008, выбол обусловлен средой разработки и исполнения WinCC.
А чем был обусловлен выбор форума? Последний раз я проверял, SQL Server не умел выполнять запросы вида: "Tag:R,1,'0000-00-00 00:01:00.000','0000-00-00 00:00:00.000'".

Вы можете конечно включить профайлер и посмотреть подключается ли вообще ваш сервер приложений к БД, под каким логином и какие запросы пытается выполнять, но на этом впринципе дебагинг со стороны SQL Server закончится. Что там WinCC делает с вашим запросом и строкой подключения лучше смотреть его в документации. Я не думаю что тут много специалистов по WinCC.
9 окт 18, 21:05    [21699736]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31328
PUT_2012
сторока
n = Rs.RecordCount 'количество записей набора
возвращает пустое значение
пустое значение - вы имеете в виду 0?
А в Rs.Fields.Count что?

Ещё. может, вы к другой базе подключаетесь, когда другой пользователь?
Выведите select DB_NAME(), @@SERVERNAME
9 окт 18, 21:11    [21699746]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
iShvedsky
Member

Откуда:
Сообщений: 43
PUT_2012, вот тут скачайте Application example. Меняйте провайдера, пользователя и пароль, да смотрите что Вам возвращается. Потом принимайте решении чем ходить в БД. Делов на 30 минут.
10 окт 18, 11:33    [21700225]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
PUT_2012
Member

Откуда: Ukraine
Сообщений: 35
alexeyvg, я вам неумышленно соврал :)
на этой строке n = Rs.RecordCount 'количество записей набора
скрипт просто зависает
при вставке в начале скрипта строки On Error Resume Next скрипт продолжает выполнятся и с помощью тестового диалогового окна можна увидеть что в переменной n ничего нет,уста тоесть она
11 окт 18, 18:59    [21701918]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
PUT_2012
Member

Откуда: Ukraine
Сообщений: 35
переменная n пустая
11 окт 18, 19:01    [21701921]     Ответить | Цитировать Сообщить модератору
 Re: VBS, доступ к БД SQL Server 2005  [new]
PUT_2012
Member

Откуда: Ukraine
Сообщений: 35
iShvedsky,можете рассказать по подробней.?
У меня не выходит
21 окт 18, 15:01    [21710235]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить