tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルADOでエクセルに書き込みできない
記事No6850
投稿日: 2008/01/18(Fri) 09:56
投稿者cc

ADOでエクセルファイルのデータを更新したいのですが、
「データベースまたはオブジェクトは読み取り専用なので、更新できません。」
というエラーが出てしまいます。
webで色々調べましたが解決できませんでした。
以下がそのコードですが、なにがいけないのでしょうか?
となたかご教授願います。


    Private Sub sr_excelADOup_2()

        Dim cn As New ADODB.Connection
        Dim rs As New ADODB.Recordset
        Dim mPath As String = "C:\Documents and Settings\Administrator\デスクトップ\cstest.xls"

        cn.Provider = "Microsoft.Jet.OLEDB.4.0"
        cn.Properties("Extended Properties").Value = "Excel 8.0;HDR=NO;IMEX=1"
        cn.Open(mPath)

        Dim strSQL As String = "Select * From [" & "Sheet1" & "$]"
        With rs
            .Open(strSQL, cn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic, ADODB.CommandTypeEnum.adCmdText)
            .MoveFirst()
            .Update(3, "テストテスト")
        End With

        rs.Close()
        cn.Close()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(rs)
        rs = Nothing
        System.Runtime.InteropServices.Marshal.ReleaseComObject(cn)
        cn = Nothing

        MsgBox("完了")
    End Sub

[ツリー表示へ]
タイトルRe: ADOでエクセルに書き込みできない
記事No6851
投稿日: 2008/01/18(Fri) 11:00
投稿者花ちゃん
> webで色々調べましたが解決できませんでした。

下記及び下記のページのリンクはご覧になりましたか?
http://support.microsoft.com/kb/316934/

[ツリー表示へ]
タイトルRe^2: ADOでエクセルに書き込みできない
記事No6852
投稿日: 2008/01/18(Fri) 11:26
投稿者cc
> > webで色々調べましたが解決できませんでした。
>
> 下記及び下記のページのリンクはご覧になりましたか?
> http://support.microsoft.com/kb/316934/

返信ありがとうございます。
参考にさせていただきます。

ひとつヒントをいただきたいのですが、
上記のコードでは更新できないでしょうか?
それともコード以外の可能性でしょうか?

[ツリー表示へ]
タイトルRe: ADOでエクセルに書き込みできない
記事No6854
投稿日: 2008/01/18(Fri) 13:08
投稿者魔界の仮面弁士
> cn.Properties("Extended Properties").Value = "Excel 8.0;HDR=NO;IMEX=1"

単純に、IMEX モードが 1 だからでは?

0 は Export mode
1 は Import mode
2 は Linked mode

「インポート」した結果を編集したところで、元データは変更されませんよね。
だから読取専用扱いになるわけで。

[ツリー表示へ]
タイトルRe^2: ADOでエクセルに書き込みできない
記事No6861
投稿日: 2008/01/18(Fri) 18:44
投稿者cc
> > cn.Properties("Extended Properties").Value = "Excel 8.0;HDR=NO;IMEX=1"
>
> 単純に、IMEX モードが 1 だからでは?
>
> 0 は Export mode
> 1 は Import mode
> 2 は Linked mode
>
> 「インポート」した結果を編集したところで、元データは変更されませんよね。
> だから読取専用扱いになるわけで。

その通りでした。
解決しました。
どうもありがとうございました!

[ツリー表示へ]
タイトルRe: ADOでエクセルに書き込みできない
記事No6863
投稿日: 2008/01/18(Fri) 19:30
投稿者魔界の仮面弁士
参照設定しているのが、ADO の PIA なのか IA なのかも要確認。

PIA (Adodb.dll)の場合、Fileds コレクション等は COM オブジェクトではありませんが、
IA (msado15.dll 等)の場合は COM なので、ReleaseComObject が必要です。

> cn.Properties("Extended Properties").Value = "Excel 8.0;HDR=NO;IMEX=1"
これもそう。
cn.Properties 等が COM かどうか、チェックしておいた方が良いかと。

[ツリー表示へ]