SafeArrayWrapper クラス

インスタンス SafeArrayWrapper は、ユーザによる作成が可能で、SAFEARRAY 値を返す OLE メソッドによって返されます。3ds Max 8 以降 で使用可能です。

   

コンストラクタ:

SafeArrayWrapper ()
SafeArrayWrapper <data array>
SafeArrayWrapper <data array> <lBounds array>

プロパティ:

<SafeArrayWrapper>.dataArray

データ配列。「undefined」の可能性があります。dataArray はネストされた配列のセットです。dataArray は「二乗」でなくてはなりません。つまり、所定の次元における dataArray 内の要素の数は一定です。たとえば、

dataArray[i].count は i = 1 であれば一定で dataArray.count となり、dataArray[i][j].count は j = 1 であれば一定で dataArray[2].count になります。

dataArray に二乗でない配列が設定された場合、ランタイム エラーが発生します。配列の深さは、配列の次元になります。次元 2 の配列では、dataArray[i][j] は配列ではないデータ値になります。dataArray を設定すると、これに一致するように lBoundsArray 内の要素の数が変更され、値が 0 の要素が追加されます。

   

<SafeArrayWrapper>.lBoundsArray

下方境界の配列です。「undefined」の可能性があります。サイズ次元の配列で、ここでは各要素に配列の一次元の下方境界が格納されます。この配列は、SafeArrayWrapper から OLE SAFEARRAY 値を作成するために使用されます。lBoundsArray を設定する場合、サイズは「次元」でなくてはなりません。それ以外ではエラーが発生します。

<SafeArrayWrapper>.dimensions

データと境界配列における次元の数。読み込み専用。

   

メソッド:

copy <SafeArrayWrapper>

新しい SafeArrayWrapper を返します。データおよび境界配列上でディープ コピーが実行されます。

注:

例:

次の例は、GetRows メソッドを使用して SQL データベースからデータを取得する方法を示しています。

-- open sql database and get rows
DogConn = createOLEObject "ADODB.Connection"
DogConn.Open "driver={SQL Server}; server=dsqedb01.autodesk.com; database=MXSTest"
recordSet = createOLEObject "ADODB.Recordset"
recordSet.Open "SELECT * from TestTable" DogConn
a = recordSet.GetRows()
-- display data properties
a.dataArray
a.lBoundsArray
a.dimensions
-- create a new SafeArrayWrapper using data array and lbounds array
b = SafeArrayWrapper #(#(1, 1.2345, "One point two three four five", undefined, undefined, undefined), #(2, undefined, "Float is null", undefined, undefined, undefined), #(3, 0.0, " ", undefined, undefined, undefined), #(4, 123.4, undefined, undefined, undefined, undefined)) #(0, 0)
b.dataArray
b.lBoundsArray
b.dimensions
-- create a new SafeArrayWrapper using data array
d = SafeArrayWrapper a.dataArray
d.dataArray
d.lBoundsArray
d.dimensions
-- create a new SafeArrayWrapper via copy, show it is a deep copy
f = copy a
f.dataArray
f.lBoundsArray
f.dimensions
f.dataArray[1][1] = 999999
f.dataArray
a.dataArray

次の例では、SQL データベースを更新します。ここでの更新メソッドは、渡された配列または SafeArrayWrapper 値です。

DogConn=createOLEObject "ADODB.Connection"
DogConn.Open "driver={SQL Server}; server=dsqedb01.autodesk.com; database=MXSTest"
recordSet = createOLEObject "ADODB.Recordset"
recordSet.Open "SELECT * from TestTable" DogConn 1 3 -- adOpenKeyset adLockOptimistic
fields=recordSet.Fields -- print out column names
count = fields.count
for i = 1 to count do (local item = fields.item (i-1); print item.name)
recordSet.GetRows() -- display current contents
recordSet.AddNew #("arbitraryFloat", "arbitraryChar", "boolean", "arbitraryInt") #(pi,"Hello World",true,42) -- add via array
recordSet.AddNew (SafeArrayWrapper #("arbitraryFloat", "arbitraryChar", "arbitraryInt")) (SafeArrayWrapper #(e/pi,"Merry xmas!", 54321)) -- add via SafeArrayWrapper
recordSet.close()
recordSet.Open "SELECT * from TestTable" DogConn
recordSet.GetRows() -- display current contents

次の例では、SafeArrayWrapper を使用して ActiveX コントロールのプロパティを取得/設定します。

rollout controlR86 "Microsoft Chart Control 6.0 (SP4) (OLEDB)"
(
activeXControl ax "{3A2B370C-BA0A-11D1-B137-0000F8753F5D}" height:200 width:300 align:#left setupEvents:false
)
createdialog ControlR86 height:250 width:350
data = ControlR86.ax.chartdata -- returns SafeArrayWrapper
ControlR86.ax.chartdata = SafeArrayWrapper #(#(undefined, "R1", "R2", "R3", "R4", "R5"), #("C1", 1, 2, 3, 4, 5), #("C2", 1, 2, 3, 4, 5), #("C3", 5, 4, 3, 2, 1), #("C4", -1, 2, 3, 2, 1))

MAXScript 値と OLE バリアント値との変換表

OLE -> MAXScript:

VT_EMPTY
VT_NULL
undefined
VT_VOID
OK
VT_UI1
VT_UI2
VT_UI4
VT_I2
VT_I4
VT_INT
Integer
VT_R4
VT_R8
VT_CY
Float
VT_BSTR
String
VT_BOOL
Boolean
VT_DISPATCH
OLEObject
VT_ARRAY | VT_VARIANT
SafeArrayWrapper

MAXScript -> OLE:

SafeArrayWrapper
Array
VT_ARRAY | VT_VARIANT
Integer
VT_I4
Float
VT_R4
Boolean
VT_BOOL
Color
VT_I4
String
VT_BSTR
Undefined
VT_EMPTY
OLEObject
VT_DISPATCH

次の情報は、MSDN にあるドキュメント「Accessing Data with ADO」(ms-help://MS.MSDNQTR.2003OCT.1033/iisref/htm/AccessingDatawithADO.htm)から取得できます。

次の表は、いくつかの一般的なデータ ソース用の OLE DB 接続文字列を示しています。

データ ソース

OLE DB 接続文字列

Microsoft Access

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.mdb ファイルへの物理パス

Microsoft SQL Server

Provider=SQLOLEDB.1;Data Source= サーバ上のデータベースへのパス

Oracle

Provider=MSDAORA.1;Data Source= サーバ上のデータベースへのパス

Microsoft Indexing Service

Provider=MSIDXS.1;Data Source= ファイルへのパス

後方互換性を提供するために、OLE DB Provider for ODBC は ODBC 接続文字列の構文をサポートしています。次の表は、一般的に使用される ODBC 接続文字列を示したものです。

データ ソース ドライバ

ODBC 接続文字列

Microsoft Access

Driver={Microsoft Access Driver (*.mdb)};DBQ=.mdb ファイルへの物理パス

SQL Server

DRIVER={SQL Server};SERVER= サーバへのパス

Oracle

DRIVER={Microsoft ODBC for Oracle};SERVER= サーバへのパス

Microsoft Excel

Driver={Microsoft Excel Driver (*.xls)};DBQ=xls ファイルへの物理パス; DriverID=278

Microsoft Excel 97

Driver={Microsoft Excel Driver (*.xls)};DBQ=.xls ファイルへの物理パス;DriverID=790

Paradox

Driver={Microsoft Paradox Driver (*.db)};DBQ=.db ファイルへの物理パス;DriverID=26

Text

Driver={Microsoft Text Driver (*.txt;*.csv)};DBQ=.txt ファイルへの物理パス

Microsoft Visual FoxPro (データベース コンテナ付き)

Driver= {MicrosoftVisualFoxProDriver};SourceType=DBC;SourceDb=.dbc ファイルへの物理パス

Microsoft Visual FoxPro (データベース コンテナなし)

Driver= {MicrosoftVisualFoxProDriver};SourceType=DBF;SourceDb=.dbf ファイルへの物理パス