Спасибо.
Пришел пока к такому выводу, что без RecordSet пока никак. Правда у Вас он как то необычно рализован
makesstr писал(а): ↑23 янв 2020, 08:01
strCon = "Provider=SQLNCLI11.1;Server=" + Srvname + ";Database=TankVolume;Trusted_Connection=Yes;"
Set cn = CreateObject("ADODB.Connection")
cn.Open strCon
Set res = cn.Execute(query)
Vsm = res.Fields(0).Value
Vsm.Read
Видимо работает и так. Может дело в провайдере (драйвере). Я открываю драйвером provider = SQLOLEDB.1
У меня более "классически"
Код: Выделить всё
Set rst = CreateObject("ADODB.RecordSet")
rst.ActiveConnection = objConnection
strSQL = "SELECT DATA FROM TAB WHERE ID = 1"
rst.Open strSQL
HMIRuntime.Trace rst.fields("DATA") & vbCrLf 'Выводим в окно дебагера
Мало опыта у меня с SQL, и подумалось, может есть что то попроще. Сделать запрос и присвоить полученное значение переменной. Обычной. Может и есть такой способ.
А скрипт написан, немного допилю - скину
Отправлено спустя 25 минут 29 секунд:
На самом деле запись в БД конечно не одна, но я точно знаю, что их неизменно 30.
Создал в WinCC 30 внутренних тегов Opt_1 - Opt_30
Код: Выделить всё
Dim objConnection
Set objConnection = CreateObject("ADODB.Connection")
Dim strConnectionString
Dim msqlserver
Dim msqldatabase
Dim userlogin
Dim userpassword
Dim strSQL
Dim rst
Dim i
Dim group
Set group = HMIRuntime.Tags.CreateTagSet
msqlserver = "SQL_Server"
msqldatabase = "DB"
userlogin = "log"
userpassword = "pass"
' MS SQL Server, SQL authorization
strConnectionString = "provider=SQLOLEDB.1; Data Source=" + msqlserver + ";User ID=" + userlogin + ";Password=" + userpassword + ";Initial Catalog=" + msqldatabase
objConnection.ConnectionTimeout = 60
objConnection.Open strConnectionString
Set rst = CreateObject("ADODB.RecordSet")
rst.ActiveConnection = objConnection
strSQL = "SELECT DATA FROM TAB"
rst.Open strSQL
For i = 1 To 30
group.Add "Opt_" & i
group("Opt_" & i).Value = rst.fields("DATA").Value
rst.MoveNext
Next
rst.Close 'Надеюсь, что этим я освобождаю память от полученных данных RecordSet )
group.Write
И еще вопросик назрел. Вот открыли мы сессию
Ее не надо закрывать в конце, как нибудь вроде objConnection.Close? В примерах такого нигде не наблюдаю. А закрыть что нибудь после использования - очень хочется )