

Код: Выделить всё
select at.id as gID,
at.description as gName,
sv.value as gString,
nv.value as gNumeric,
dtv.value as gDataType
from lsdbo.attrib as at left join lsdbo.attrib_value as av on at.id=av.attrib_id left join
lsdbo.value_numeric as nv on nv.id=av.Value_ID left join
lsdbo.value_string as sv on sv.id=av.Value_ID left join
lsdbo.value_datetime as dtv on dtv.id=av.Value_ID
where av.object_id=100000317100048
Код: Выделить всё
select attr.id IdTypeAttr, attr.description descTypeAttr, attr.data_type data_type,
'IdValue' =
case
when attr.data_type = 'S' then vals.id
when attr.data_type = 'T' then vald.id
when attr.data_type = 'N' then valn.id
end,
'Value' =
case
when attr.data_type = 'S' then isNull(vals.value,'')+isNull(vals.value1,'')
when attr.data_type = 'T' then convert(varchar,vald.value,4)
when attr.data_type = 'N' then cast(valn.value as varchar)
end
from (select * from LSDBO.attrib_value attr_val
where attr_val.Object_id=100020644830006) attr_val left join
LSDBO.attrib attr on attr.id = attr_val.Attrib_ID left join
LSDBO.value_string vals on vals.id = attr_val.Value_ID left join
LSDBO.value_datetime vald on vald.id = attr_val.Value_ID left join
LSDBO.value_numeric valn on valn.id = attr_val.Value_id
Код: Выделить всё
select
attr.id as IdTypeAttr,
case when attr.data_type = 'S' then cast(isNull(sv.value,'')+isNull(sv.value1,'') as sql_variant)
when attr.data_type = 'T' then cast(dv.value as sql_variant)
when attr.data_type = 'N' then cast(nv.value as sql_variant) end as aValue
from (select * from LSDBO.attrib_value as av where av.Object_id=100001138400023) as av left join
LSDBO.attrib as attr on attr.id = av.Attrib_ID left join
LSDBO.value_string as sv on sv.id = av.Value_ID left join
LSDBO.value_datetime as dv on dv.id = av.Value_ID left join
LSDBO.value_numeric as nv on nv.id = av.Value_id
order by IdTypeAttr
Код: Выделить всё
Option Explicit
Option Base 0
Dim cn
Function ADODB_Connected()
On Error Resume Next
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=SQLOLEDB;Data Source=xxx;Initial Catalog=xxx;User ID=xxx;Password=xxx;" (логин быстрого юзера без view)
If Err.Number = 0 Then
ADODB_Connected = True
Exit Function
Else
MsgBox Err.Number
ADODB_Connected = False
End If
End Function
Sub sGetDataObjectFromLotsia()
Dim sql, rs, j, tmp, id, Field, i
Dim aRs() As Variant 'массив для хранения результатов recordset'а
If ADODB_Connected Then
On Error Resume Next
Set rs = CreateObject("ADODB.RecordSet")
If Err.Number = 0 Then
id = 100001138400023# 'объект
sql = "select attr.id as IdTypeAttr, case when attr.data_type='S' then cast(isNull(sv.value,'')+isNull(sv.value1,'') as sql_variant) when attr.data_type='T' then cast(dv.value as sql_variant) when attr.data_type='N' then cast(nv.value as sql_variant) end as aValue from (select * from LSDBO.attrib_value as av where av.Object_id=" + CStr(id) + ") as av left join LSDBO.attrib as attr on attr.id=av.Attrib_ID left join LSDBO.value_string as sv on sv.id=av.Value_ID left join LSDBO.value_datetime as dv on dv.id=av.Value_ID left join LSDBO.value_numeric as nv on nv.id=av.Value_id order by IdTypeAttr"
rs.Open sql, cn
aRs = rs.GetRows
rs.Close
MsgBox fGetSingleIDValue(aRs, -33) 'атрибут
' LsJob.SetVarValue "value1", cStr((fGetSingleIDValue(aRs, -33))
id = 100000356100012# 'объект
sql = "select attr.id as IdTypeAttr, case when attr.data_type='S' then cast(isNull(sv.value,'')+isNull(sv.value1,'') as sql_variant) when attr.data_type='T' then cast(dv.value as sql_variant) when attr.data_type='N' then cast(nv.value as sql_variant) end as aValue from (select * from LSDBO.attrib_value as av where av.Object_id=" + CStr(id) + ") as av left join LSDBO.attrib as attr on attr.id=av.Attrib_ID left join LSDBO.value_string as sv on sv.id=av.Value_ID left join LSDBO.value_datetime as dv on dv.id=av.Value_ID left join LSDBO.value_numeric as nv on nv.id=av.Value_id order by IdTypeAttr"
rs.Open sql, cn
aRs = rs.GetRows
MsgBox fGetSingleIDValue(aRs, 100037488300000#) 'атрибут
' LsJob.SetVarValue "value2", cDate((fGetSingleIDValue(aRs, -33))
MsgBox fGetSingleIDValue(aRs, 100037288300000#) 'атрибут
Erase aRs
Set rs = Nothing 'убить recordset
Set cn = Nothing 'убить conncet
Else
MsgBox "Чтение не удалось..."
Set cn = Nothing 'убить conncet
Exit Sub
End If
Else
MsgBox "Подключение не удалось...." & vbCr & ";-)"
End If
End Sub
Function fGetSingleIDValue(f_Arr, f_ID)
Dim i, j, k
i = 0
j = UBound(f_Arr, 2) - 1
While (i < j)
k = Round((i + j) / 2 + 0.5) - 1
If f_ID <= f_Arr(0, k) Then
j = k
Else
i = k + 1
End If
If f_Arr(0, i) = f_ID Then
fGetSingleIDValue = f_Arr(1, i)
Exit Function
End If
Wend
fGetSingleIDValue = ""
End Function