[リストへもどる]
一括表示

投稿時間:2004/01/19(Mon) 20:33
投稿者名:you
Eメール:
URL :
タイトル:
DAOで実行時エラー
いつもお世話になります。
このサイトの「DAO(データアクセスオブジェクト)を使ってExcel 用ファイルをMSFlexGridに表示する」
を参考にさせていただき、プログラムを作成したのですが、
いくつかのPCで「列の値が不正です」の実行時エラーになってしまいます。
jetやmdacをアップデートしてみましたが駄目でした。
原因がわかる方がいらっしゃいましたら教えてください。
よろしくお願いいたします。

投稿時間:2004/01/20(Tue) 09:14
投稿者名:ぽち
Eメール:
URL :
タイトル:
Re: DAOで実行時エラー
> いくつかのPCで「列の値が不正です」の実行時エラーになってしまいます。

これだけでは回答のしようがないと思いますが...

IDE で実行している場合はデバッグすればすぐ分かると思います。
分からなければ、その部分のコードを載せるとか。

EXE で実行していて、どこでエラーが発生しているのか分からない場合は、
メッセージボックスやファイルに出力するなどして、エラーが発生しているコードを
見つけ出しましょう。

投稿時間:2004/01/20(Tue) 10:08
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: DAOで実行時エラー
> このサイトの「DAO(データアクセスオブジェクト)を使ってExcel 用ファイルをMSFlexGridに表示する」
> を参考にさせていただき、プログラムを作成したのですが、
> いくつかのPCで「列の値が不正です」の実行時エラーになってしまいます。
データ型が「数値型と判定された列」に、数値と認識できないデータが入っていた場合、
そのような結果になる事があります。(環境によっては、Nullデータと判定される事もあります)

『DAOを使ってExcel 用ファイルをMSFlexGridに表示する』のページの注釈に記述がありますが、
IMPORT MODEを示す「IMEX=1」を指定しているかどうかを確認してみてください。
http://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&pastlog=0004&no=2318&page=60&act=past
http://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?no=7083&reno=7080&oya=7027&mode=msgview&page=30

投稿時間:2004/01/20(Tue) 15:46
投稿者名:you
Eメール:
URL :
タイトル:
Re^2: DAOで実行時エラー
> データ型が「数値型と判定された列」に、数値と認識できないデータが入っていた場合、
> そのような結果になる事があります。(環境によっては、Nullデータと判定される事もあります)
>
> 『DAOを使ってExcel 用ファイルをMSFlexGridに表示する』のページの注釈に記述がありますが、
> IMPORT MODEを示す「IMEX=1」を指定しているかどうかを確認してみてください。

早速のご回答有難うございます。「IMEX=1」を指定してみましたが駄目でした。
「列の値が不正です」のエラーはMSFlexGridのColWidthを変更している部分で発生しており、
その部分をコメントにするとエラーはでなくなりましたが、データが1行も読み込まれません。
やはりレジストリを変更するしかないのでしょうか・・・。

投稿時間:2004/01/20(Tue) 16:04
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: DAOで実行時エラー
> いくつかのPCで「列の値が不正です」の実行時エラーになってしまいます。
問題点を整理して下さい。
エラーが発生しないPCも有るという事ですが、エラーが発生するPCと発生しない
PCとの違いは何ですか? OS・データーの違い・その他の環境等。
ここのサンプルを使ったとの事ですが、どこか変更(改造)されていますか?
元々のサンプルを使用しても同じですか?
「列の値が不正です」のエラーは、参照している列番号が存在しないモノを指定
した場合に起きるかと思うのですが、その辺はどうなのですか?
データを読込む前にその辺を操作していませんか?
又、単純なExcelファイルを作成してそれを読込んだ場合どうなりますか?
(すべてのセルに同じデータを入れた5列5行位のファイル)

上記の部分について調べて見て下さい。
コードを変更されたのなら、そのコードも投稿して見て下さい。

投稿時間:2004/01/20(Tue) 16:55
投稿者名:you
Eメール:
URL :
タイトル:
Re^2: DAOで実行時エラー
> > いくつかのPCで「列の値が不正です」の実行時エラーになってしまいます。
> 問題点を整理して下さい。
> エラーが発生しないPCも有るという事ですが、エラーが発生するPCと発生しない
> PCとの違いは何ですか? OS・データーの違い・その他の環境等。
> ここのサンプルを使ったとの事ですが、どこか変更(改造)されていますか?
> 元々のサンプルを使用しても同じですか?
> 「列の値が不正です」のエラーは、参照している列番号が存在しないモノを指定
> した場合に起きるかと思うのですが、その辺はどうなのですか?
> データを読込む前にその辺を操作していませんか?
> 又、単純なExcelファイルを作成してそれを読込んだ場合どうなりますか?
> (すべてのセルに同じデータを入れた5列5行位のファイル)
>
> 上記の部分について調べて見て下さい。
> コードを変更されたのなら、そのコードも投稿して見て下さい。

ご回答有難うございます。

試してみた環境は
@2000・VBがインストールされている…○
A2000・VBがインストールされていない…○
BNT・VBがインストールされている…○
CNT・VBがインストールされていない…×
の4つです。
データの違いはありません。
@とCのPCのレジストリ「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel」
の内容を比較してみましたが、全く一緒でした。

コードは以下の通りです。
    
    Dim daoDB As DAO.Database
    Dim daoRs As DAO.Recordset
    Dim strXLSName As String
    Dim strSQL As String
    Dim i As Long
    
    strXLSName = "C:\マスタ.xls"
    Set daoDB = DBEngine.Workspaces(0).OpenDatabase(strXLSName, _
        False, False, "EXCEL 8.0; HDR=YES;IMEX=1;")

    strSQL = "SELECT a.●名," & _
                    "a.○1," & _
                    "b.■," & _
                    "c.▲区分名称," & _
                    "d.▼区分名称," & _
                    "a.4桁●コード," & _
                    "a.○2," & _
                    "a.▲区分," & _
                    "a.▼区分" & _
            " FROM ((([●マスタ$] a " & _
            " LEFT JOIN [■マスタ$] b on a.4桁●コード = b.4桁●コード) " & _
            " LEFT JOIN [▲区分マスタ$] c on a.▲区分 = c.▲区分)  " & _
            " LEFT JOIN [▼区分マスタ$] d on a.▼区分 = d.▼区分) " & _
            " RIGHT JOIN [略語マスタ$] e on a.4桁●コード = e.4桁●コード" & _
            " WHERE e.●カナ LIKE '*" & TextKana & "*' "
    Set daoRs = daoDB.OpenRecordset(strSQL, dbOpenDynaset)

    If daoRs.EOF Then
        MsgBox "該当データがありません。"
    Else

        'MSFlexGridと連結
        Set Data1.Recordset = daoRs
    
        MSFlexGrid1.Visible = True
        With MSFlexGrid1
            For i = 1 To .Rows - 1
                .TextMatrix(i, 0) = i
            Next i
        End With
        
        MSFlexGrid1.ColWidth(0) = 0
        MSFlexGrid1.ColWidth(1) = 2400
        MSFlexGrid1.ColWidth(2) = 1400
        MSFlexGrid1.ColWidth(3) = 1400
        MSFlexGrid1.ColWidth(4) = 1000
        MSFlexGrid1.ColWidth(5) = 700
        MSFlexGrid1.ColWidth(6) = 0
        MSFlexGrid1.ColWidth(7) = 0
        MSFlexGrid1.ColWidth(8) = 0
        MSFlexGrid1.ColWidth(9) = 0
        MSFlexGrid1.Visible = True
        
    End If

    Data1.Refresh
    daoRs.Close
    Set daoRs = Nothing
    daoDB.Close
    Set daoDB = Nothing
    

投稿時間:2004/01/20(Tue) 20:12
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: DAOで実行時エラー
> コードは以下の通りです。

まずは、このコードの「どの行」を実行した時に
『列の値が不正です』が表示されるのかを突き止めてください。

投稿時間:2004/01/20(Tue) 18:54
投稿者名:you
Eメール:
URL :
タイトル:
Re^2: DAOで実行時エラー
> 元々のサンプルを使用しても同じですか?

同じでした。

データアクセス自体はできており、msflexgridとの連携がうまくいっていないようです。
また、windowsのサービスパック・エクセルのバージョンは関係なさそうだということを確認しました。
(エクセルがインストールされていないパソコンでも動作しました)

他のソフトとの競合かもしれません。
もう少し調べてみます。

投稿時間:2004/01/20(Tue) 19:31
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: DAOで実行時エラー
>データアクセス自体はできており・・・・
テキストボックスになら表示できますか?
ここの「DAO(データアクセスオブジェクト)を使ってExcelデータを読み込みテキストボックスに表示」
では、表示できますか?

関係ないかもしれませんが、DAOのバージョン(Dao360.dll or dao350.dll)は同じでしょうか?

4. NT・VBがインストールされていない…×   だけが古いような気がするので

投稿時間:2004/01/21(Wed) 15:48
投稿者名:you
Eメール:
URL :
タイトル:
別の方法を選択しました
環境については、mosaixというソフトがインストールされているPCで
実行エラーがおきているということしか見出せませんでした。
納期の関係で、調査をストップせざるをえない状況になってしまいましたので、
別の方法を選択することにしました。
「Set Data1.Recordset = daoRs」がうまくいっていない様子なので、
「.TextMatrix」で1カラムずつ設定する方法に変えました。
スピードは大分遅くなってしまいましたが・・・。
皆さん、ありがとうございました。