- - PR -
プロパティ 'Item' は 'ReadOnly' です。
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-01-19 14:31
件名のようなエラーメッセージに悩まされております。
ADOXを使用して、MDBを作成しているのですが、 下記のソースをどのように修正すべきなんでしょうか? With tbl .Name = strTable .ParentCatalog = cat With cat.Tables(strTable).Columns .Append("DataStorage_Id", ADOX.DataTypeEnum.adInteger) .Item("DataStorage_Id").Properties("Nullable") = True .Append("Filename", ADOX.DataTypeEnum.adWChar, 255) .Append("DefaultOrder_Id", ADOX.DataTypeEnum.adInteger) .Append("Category_Id", ADOX.DataTypeEnum.adSmallInt) .Append("SubCategory_Id", ADOX.DataTypeEnum.adSmallInt) .Append("Search_Keys", ADOX.DataTypeEnum.adLongVarWChar) |
|
投稿日時: 2004-01-19 14:40
With tbl
.Name = strTable .ParentCatalog = cat With cat.Tables(strTable).Columns .Append("DataStorage_Id", ADOX.DataTypeEnum.adInteger) ★.Item("DataStorage_Id").Properties("Nullable") = True .Append("Filename", ADOX.DataTypeEnum.adWChar, 255) .Append("DefaultOrder_Id", ADOX.DataTypeEnum.adInteger) .Append("Category_Id", ADOX.DataTypeEnum.adSmallInt) .Append("SubCategory_Id", ADOX.DataTypeEnum.adSmallInt) .Append("Search_Keys", ADOX.DataTypeEnum.adLongVarWChar) ★の箇所が問題だと思います。 MDB側でNullを許すかどうか調べた上で、 .Append("DataStorage_Id", ADOX.DataTypeEnum.adInteger) の ADOX.DataTypeEnum.adIntegerの値が Nullになるかどうか調べてみてはいかがでしょう? |
|
投稿日時: 2004-01-19 15:00
>ADOX.DataTypeEnum.adIntegerの値が
>Nullになるかどうか調べてみてはいかがでしょう? なります。 ACCESSで作ったMDBでは、大丈夫でした。 .Item("DataStorage_Id").Properties("AutoIncrement") = True ともダメです。 プロパティの設定自体できないみたいです。 ネットで調べても、同様の現象の記事は皆無なので途方にくれてます。。。 |
|
投稿日時: 2004-01-19 15:37
僕の認識とずれてますのでコメントさせていただきます。
★.Item("DataStorage_Id").Properties("Nullable") = True のコードで記述している内容は、 .Item("DataStorage_Id"という項目の).Properties("Nullable"を許すかどうかを) True (可能)にしている。 と言う意味です。 データベースのスキーマ(データ格納方法)をプログラムから後決めで指定する。 のは原則的に反則です。 具体例) 1.テーブルがあります。 2.2行のテーブルです。 3.最初に文字列だけ格納できる!と宣言している 以上の状況で、「やっぱり数字だけ入れたい!」ってしたら、 格納されているデータの「文字列」はどうしましょう? そうならない為に、「データベースの格納方法」は原則的にいじらないようにするのが 良いと考えます。 そのコードの行の指定が無いといけないのでしょうか? 指定しなくていいことをワザワザ指定していると言う認識です。 僕は ★.Item("DataStorage_Id").Properties("Nullable") = True の行が必要ないと考えているわけですが、 必要ですか? もし必要だとしたら、 「何故必要なのか」を教えて頂けますか? 宜しくお願いします。 |
|
投稿日時: 2004-01-19 15:38
こんにちは
>.Item("DataStorage_Id").Properties("Nullable") = True この部分をはずしてみたらどうなりますか? ItemプロパティがReadOnlyなのに値を設定しているからエラーになっているのでは ないでしょうか? |
|
投稿日時: 2004-01-19 15:47
>もし必要だとしたら、
>「何故必要なのか」を教えて頂けますか? VB .NET でMDBファイル(データベース)を作成して、それから、レコード等を挿入するツールを作っております。 前もって、ACCESSのMDBがあるわけではないです。 よって、テーブル作成、テーブル定義等もプログラムでやっています。 その過程で、↓を参考にしながら作ってみたのですが。。。 http://homepage2.nifty.com/inform/vbdb/adox_column.htm |
|
投稿日時: 2004-01-19 16:06
サンプルは項目定義をしてから追加していますが
かつやさんは追加してから項目定義を「変更」しているからだめだと思います 理由はるぱんさんが書いている通りと思います。 |
|
投稿日時: 2004-01-19 16:14
>サンプルは項目定義をしてから追加していますが
>かつやさんは追加してから項目定義を「変更」しているからだめだと思います その辺りも↓のように試してみたんですが。。。 なんでダメなんだろう。。。 With cat.Tables(strTable).Columns .Item("DataStorage_Id").Properties("AutoIncrement") = True .Append("DataStorage_Id", ADOX.DataTypeEnum.adInteger) .Append("Filename", ADOX.DataTypeEnum.adWChar, 255) .Append("DefaultOrder_Id", ADOX.DataTypeEnum.adInteger) .Append("Category_Id", ADOX.DataTypeEnum.adSmallInt) .Append("SubCategory_Id", ADOX.DataTypeEnum.adSmallInt) .Append("Search_Keys", ADOX.DataTypeEnum.adLongVarWChar) End With |