インスタンス SafeArrayWrapper は、ユーザによる作成が可能で、SAFEARRAY 値を返す OLE メソッドによって返されます。3ds Max 8 以降 で使用可能です。
データ配列。「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 の要素が追加されます。
下方境界の配列です。「undefined」の可能性があります。サイズ次元の配列で、ここでは各要素に配列の一次元の下方境界が格納されます。この配列は、SafeArrayWrapper から OLE SAFEARRAY 値を作成するために使用されます。lBoundsArray を設定する場合、サイズは「次元」でなくてはなりません。それ以外ではエラーが発生します。
新しい SafeArrayWrapper を返します。データおよび境界配列上でディープ コピーが実行されます。
SafeArrayWrapper の値は OLE メソッドに引数として渡すことができるので、ActiveX コントロール メソッドとやり取りすることができます。OLE または ActiveX メソッドに渡された配列は、中間の SafeArrayWrapper 値に自動的に変換されます。
OLE オブジェクトによって返される値の追加のバリアント タイプで、MAXScript 値に変換することができるものは次のとおりです。VT_UI2、VT_UI4、VT_INT、VT_NULL、VT_VOID
次の例は、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))
次の情報は、MSDN にあるドキュメント「Accessing Data with ADO」(ms-help://MS.MSDNQTR.2003OCT.1033/iisref/htm/AccessingDatawithADO.htm)から取得できます。
次の表は、いくつかの一般的なデータ ソース用の OLE DB 接続文字列を示しています。
後方互換性を提供するために、OLE DB Provider for ODBC は ODBC 接続文字列の構文をサポートしています。次の表は、一般的に使用される ODBC 接続文字列を示したものです。