Дата публикации: 03.03.2011

IBProvider v3.6. Новые интерфейсы набора рядов и схема метаданных

Новые интерфейсы набора рядов: IRowsetRefresh, IRowsetResynch

  • Новые интерфейсы предназначены для перезагрузки значений колонок набора рядов.
  • По-умолчанию поддержка интерфейсов IRowsetRefresh и IRowsetResynch отключена. Для включения нужно установить свойства команды или набора рядов IRowsetRefresh, IRowsetResynch равными true.
  • Для настройки процесса перезагрузки значений, добавлены новые свойства: refresh_sql, refresh_trans_type, refresh_trans_level.
  • Обратите внимание, что ADODB.Field.UndelyingValue некорректно работает с IRowsetRefresh. Поэтому, для ADODB рекомендуется включать только интерфейс IRowsetResynch.
option explicit

'--------------------------------------------------------------------------
dim cn
set cn=createobject("ADODB.Connection")

cn.Provider="LCPI.IBProvider.3"

cn.Properties("location")="localhost:d:\database\employee.fdb"
cn.Properties("user id") ="SYSDBA"
cn.Properties("password")="masterkey"

call cn.Open()

call cn.BeginTrans()

dim cmd
set cmd=createobject("ADODB.Command")

cmd.ActiveConnection=cn

cmd.Properties("IRowsetResynch")=true

'Robert Nelson
cmd.CommandText="select * from employee where EMP_NO=2"

dim rs
set rs=cmd.execute()

wscript.echo "[CurrentValue]    FIRST_NAME : "&print_value(rs("first_name").value)
wscript.echo "[UnderlyingValue] FIRST_NAME : "&print_value(rs("first_name").UnderlyingValue)

wscript.echo "--- [update]"

call cn.Execute("update employee set first_name=upper(first_name) where emp_no=2")

wscript.echo "[CurrentValue]    FIRST_NAME : "&print_value(rs("first_name").value)
wscript.echo "[UnderlyingValue] FIRST_NAME : "&print_value(rs("first_name").UnderlyingValue)

wscript.echo "--- [resync]"

call rs.Resync()

wscript.echo "[CurrentValue]    FIRST_NAME : "&print_value(rs("first_name").value)
wscript.echo "[UnderlyingValue] FIRST_NAME : "&print_value(rs("first_name").UnderlyingValue)

call wscript.quit(0)

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
private function print_value(v)
 dim s

 if(IsNull(v))then
  s=s&"#NULL"
 else
  s=s&cstr(v)
 end if

 print_value=s
end function 'print_value

Вывод:

Output from example 01

Новая схема метаданных DBSCHEMA_IBP_FIELD_DIMENSIONS

  • Предназначена для получения размерностей массивов в колонках и параметрах SP.
  • Идентификатор схемы: {769A128E-04BF-11D8-AE8B-00A0C907DB93}.
  • Колонки схемы:
    • RELATION_CATALOG [WSTR]
    • RELATION_SCHEMA [WSTR]
    • RELATION_NAME [WSTR]
    • FIELD_NAME [WSTR]
    • FIELD_GUID [GUID]
    • FIELD_PROPID [UI4]
    • DIMENSION [UI4]. Нумерация с 1
    • LOWER_BOUND [I4]
    • UPPER_BOUND [I4]
  • Ограничения: RELATION_CATALOG, RELATION_SCHEMA, RELATION_NAME, FIELD_NAME.
  • Сортировка: RELATION_CATALOG, RELATION_SCHEMA, RELATION_NAME, FIELD_NAME, DIMENSION.
option explicit

'--------------------------------------------------------------------------
private const adSchemaProviderSpecific=-1

private const guid_DBSCHEMA_IBP_FIELD_DIMENSIONS="{769A128E-04BF-11D8-AE8B-00A0C907DB93}"

'--------------------------------------------------------------------------
dim cn
set cn=createobject("ADODB.Connection")

cn.Provider="LCPI.IBProvider.3"

cn.Properties("location")="localhost:d:\database\employee.fdb"
cn.Properties("user id") ="SYSDBA"
cn.Properties("password")="masterkey"

call cn.Open()

dim restrictions
restrictions=Array(empty,empty,"JOB","LANGUAGE_REQ")

dim rs
set rs=cn.OpenSchema(adSchemaProviderSpecific, _
                     restrictions, _
                     guid_DBSCHEMA_IBP_FIELD_DIMENSIONS)
dim nRec
nRec=0

while not rs.eof
 nRec=nRec+1

 wscript.echo "---------------- ["&nRec&"]"
 wscript.echo "RELATION_CATALOG: "&print_value(rs("RELATION_CATALOG").value)
 wscript.echo "RELATION_SCHEMA : "&print_value(rs("RELATION_SCHEMA").value)
 wscript.echo "RELATION_NAME   : "&print_value(rs("RELATION_NAME").value)
 wscript.echo "FIELD_NAME      : "&print_value(rs("FIELD_NAME").value)
 wscript.echo "FIELD_GUID      : "&print_value(rs("FIELD_GUID").value)
 wscript.echo "FIELD_PROPID    : "&print_value(rs("FIELD_PROPID").value)
 wscript.echo "DIMENSION       : "&print_value(rs("DIMENSION").value)
 wscript.echo "LOWER_BOUND     : "&print_value(rs("LOWER_BOUND").value)
 wscript.echo "UPPER_BOUND     : "&print_value(rs("UPPER_BOUND").value)

 call rs.MoveNext()
wend

wscript.echo ""
wscript.echo "total record count: "&cstr(nRec)

call wscript.quit(0)

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
private function print_value(v)
 dim s

 if(IsNull(v))then
  s=s&"#NULL"
 else
  s=s&cstr(v)
 end if

 print_value=s
end function 'print_value

Вывод:

Output from example 02

Дата публикации: 03.03.2011. Права на материал принадлежат: IBProvider. При перепечатке ссылка на сайт https://www.ibprovider.com/rus обязательна.