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`

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 ファイルへの物理パス *