■79853 / inTopicNo.2) |
Re[1]: C#でのDAOの利用 |
□投稿者/ 魔界の仮面弁士 (721回)-(2016/05/23(Mon) 20:38:59)
|
2016/05/23(Mon) 20:51:28 編集(投稿者)
■No79852 (kys31 さん) に返信 > TableDef tDef = db.CreateTalbeDef("table"); スペルミス?
> tDef.Fields.Append(tDef.CreateField("xxxx"), DataTypeEnum.dbInteger); Fields.Append に、引数 は 1 つしかありません。 TableDef.CreateField の引数と混同していませんか?
Fields fields = tDef.Fields; Field field = tDef.CreateField("xxxx", DataTypeEnum.dbInteger); fields.Append(field);
// COM コンポーネントなので、Marshal.ReleaseComObject で解放 if(Marshal.IsComObject(field)) Marshal.ReleaseComObject(field); if(Marshal.IsComObject(fields)) Marshal.ReleaseComObject(fields);
> Index idx = tDef.CreateIndex("aaaa"); > idx.Fields.Append(idx.CreateField("bbbb"); ←★
そもそも、括弧の数が合わないような…?
> ★の箇所で「'Object'に'Append'の定義が含まれておらず、型'Object'の最初の引数を受け付ける拡張メソッド'Append'が見つかりませんでした。」とコンパイルエラーが出ます。 > 確かに、Index.FieldsはObject型なので当然のエラー結果だと思いますが、回避方法ありませんでしょうか?
Index の Files プロパティは Variant 型であるため、C# では Object 型になっています。 C# から利用する場合は、dynamic または IndexFields にキャストする必要があります。
IndexFields fs = (IndexFields)idx.Fields; fs.Append(field);
> そもそも、今の環境ではDAOを使用することは不可能なのでしょうか? DAO で生成するかわりに、"CREATE TABLE" 等の SQL を実行するという手もあります。
> 参照設定には「Microsoft DAO 3.6 Object Librari」を追加しています。
スペルミスはさておき、そのライブラリの利用は望ましくありません。
その場合、Interop.Dao.dll の IA が自動生成され、 それが参照されることになります。 公式にテストされたものではありませんので、 使うのであれば、PIA 版の "DAO.DLL" を採用しましょう。 http://msdn.microsoft.com/ja-jp/library/15s06t57.aspx http://msdn.microsoft.com/ja-jp/library/cc375821.aspx
2015 の参照マネージャーであれば、 [アセンブリ]-[拡張]-[dao] から指定できると思います。
|
|