tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルADO Data Controlのエラー
記事No14877
投稿日: 2010/08/30(Mon) 11:01
投稿者ひざ男爵
初めて投稿させていただきます。
VB6(SP6)でデータベース(PostgreSQL)からデータを取得して、ADO Data Control 6.0(SP6)(OLEDB)を使ってグレープシティー社のTrueDBGrid7.0に連結してデータを表示するプログラムを作りました。
WindowsXP(Professional)のSP2の環境では正常に動いていたのですが、WindowsUPdateでXPのサービスパックを3に上げたところ
「エラーを特定できません」
というエラーがでてしまうようになりました。
メッセージダイアログのタイトルは「Adodc」です。

以下エラーが出てる箇所のソースです。
※Adodc1はADO Data Control 6.0(SP6)(OLEDB)のオブジェクト名です
※grid1はTrue DBGrid Pro 7.0(OLEDB)のオブジェクト名です

================================================================================
    sql = "select * from XXX"
    
    Adodc1.ConnectionString = "Provider=MSDASQL.1;Password=" & DB_CONNECT_PASS & ";User ID=" & DB_CONNECT_USER & ";Extended Properties=""DRIVER={PostgreSQL};DATABASE=" & DB_CONNECT_DBNAME & ";SERVER=" & DB_CONNECT_SERVER & ";PORT=5432;UID=" & DB_CONNECT_USER & ";PWD=" & DB_CONNECT_PASS & ";READONLY=0;PROTOCOL=6.4;FAKEOIDINDEX=0;SHOWOIDCOLUMN=0;ROWVERSIONING=0;SHOWSYSTEMTABLES=0;CONNSETTINGS="""

    Adodc1.RecordSource = sql    
    Adodc1.Refresh

    Set grid1.DataSource = Adodc1 ←ここで上記のエラーメッセージが出ます
    grid1.Refresh
================================================================================

プロジェクトの参照設定
・Visual Basic for Applications
・Visual Basic runtime objects and procedures
・Visual Basic objects and procedures
・OLE Automation
・Microsoft ActiveX Data Objects 2.8 Library
・Microsoft ActiveX Data Objects Recordset 2.8 Library
・Microsoft ActiveX Ext. 2.8 for DDL and Security
・Microsoft Data Binding Collection VB 6.0(SP4)

これだけの情報で伝わるのか自信はありませんが、どなたか解決策をご存知のかた
おられますでしょうか。

よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: ADO Data Controlのエラー
記事No14878
投稿日: 2010/08/30(Mon) 11:51
投稿者魔界の仮面弁士
まずは問題箇所を切り分けましょう。その内容次第では、
VB 系のコミュニティを頼るのではなく、PostgreSQL 系のコミュニティや、
GrapeCity に問い合わせた方が良いかもしれませんし。
https://www.grapecity.com/japan/support/form/


・ADODC を使わず、ADODB や DataEnvironment 経由で PostgreSQL に接続できるか?
→できないなら TrueDBGrid は無関係です。環境の見直しを行いましょう。
 カーソルタイプを Server カーソル/Client カーソルに変えてみるのも手です。
 Windows ファイアウォール等でポートが閉じられていないかも確認を。

・ADODC 経由で、PostgreSQL 以外の DB を VB 標準の DataGrid に表示できるか。
・ADODC 経由で、PostgreSQL 以外の DB を TrueDBGrid に表示できるか。
→これが失敗するようであれば、ADO 自体に問題があるのかもしれません。
 たとえば、実行ユーザーの権限が不足しているといった事はありませんか?

・ADODC 経由で、PostgreSQL の内容を VB 標準の DataGrid に表示できるか。
→成功するなら、TrueDBGrid の問題として GrapeCity に問い合わせる事をお奨めします。
 失敗するなら、ADO あるいは OLEDB または ODBC で問題が起きている可能性があります。
 その場合には、別の ODBC ドライバーの利用を検討してみてください。あるいは、
 ODBC 用プロバイダー (Provider=MSDASQL;) の代わりに、ネイティブの
 OLE DB プロバイダーをインストールして使うことも検討してみてください。
 ("Provider=PostgreSQL;" や "Provider=PostgreSQL OLE DB Provider;" など)

> 「エラーを特定できません」
ADODC の代わりに、ADODB でのバインドを試してみてください。
ADODB の場合、ADODB.Errors コレクション経由で
追加のエラー情報を得られる可能性があります。


> これだけの情報で伝わるのか自信はありませんが、
# 同じ現象を経験した人で無いと、解決策の提示は難しいかも。

[ツリー表示へ]
タイトルRe^2: ADO Data Controlのエラー
記事No14879
投稿日: 2010/08/30(Mon) 13:25
投稿者ひざ男爵
魔界の仮面弁士様

ご回答ありがとうございます。
ご指摘頂いたことを、一つずつ試していって問題の切り分けを明確にしたいと思います。
結果等また報告させて頂きます。

取り急ぎ御礼まで

[ツリー表示へ]
タイトルRe^2: ADO Data Controlのエラー
記事No14880
投稿日: 2010/08/30(Mon) 16:24
投稿者ひざ男爵
魔界の仮面弁士様

たびたびすいません。

> > 「エラーを特定できません」
> ADODC の代わりに、ADODB でのバインドを試してみてください。

これなんですが、つまりはこういうことでしょうか?
================================================================================
  Dim con As ADODB.Connection
  Dim rs As ADODB.Recordset
    
    Set con = New ADODB.Connection
    Set rs = New ADODB.Recordset

    con.Open conStr, DB_CONNECT_USER, DB_CONNECT_PASS, adConnectUnspecified

    sql = "select * from XXX"
    rs.Open sql , con, adOpenStatic

    Set grid1.DataSource = rs
    grid1.Refresh
================================================================================

もしかしたら、見当違いのことを言ってるかもしれませんが、「ADODB でのバインド」の
意味がわからなかったので投稿致しました。
何度も申し訳ないですが、何卒、ご教授いただけないでしょうか?

よろしくお願い致します。

[ツリー表示へ]
タイトルRe^3: ADO Data Controlのエラー
記事No14881
投稿日: 2010/08/30(Mon) 17:20
投稿者魔界の仮面弁士
> これなんですが、つまりはこういうことでしょうか?

手元に環境が無いので確認できませんが、イメージ的にはそんな感じです。
CursorLocation / CursorType / LockType の組み合わせを変更しながら
動作を確認してみてください。

[ツリー表示へ]
タイトルRe^4: ADO Data Controlのエラー
記事No14882
投稿日: 2010/08/30(Mon) 18:06
投稿者ひざ男爵
魔界の仮面弁士様

> 手元に環境が無いので確認できませんが、イメージ的にはそんな感じです。
> CursorLocation / CursorType / LockType の組み合わせを変更しながら
> 動作を確認してみてください。

以下のソースでADODBでGRIDと連結方法を試しました。

================================================================================
  Dim con As ADODB.Connection
  Dim rs As ADODB.Recordset
    
    Set con = New ADODB.Connection
    Set rs = New ADODB.Recordset

    con.Open conStr, DB_CONNECT_USER, DB_CONNECT_PASS, adConnectUnspecified

    sql = "select * from XXX"
    rs.Open sql , con, adOpenStatic

    Set grid1.DataSource = rs
    grid1.Refresh
================================================================================

データは表示されたのですが、グリッドのスクロールを触ると、メモリ参照のエラーが
でて落ちてしまいました。

rs.CursorLocation = adUseClient
を指定しましたら、上記のエラーが出ることなく、無事グリッドへの表示もできました。

根本解決にはなっていませんが、Adoデータコントロールが使えない原因が今後も判明しないようであれば、ADODBで連結する方法に切り替えることも検討してみます。

魔界の仮面弁士様、アドバイスありがとうございました!

[ツリー表示へ]
タイトルRe^5: ADO Data Controlのエラー
記事No14883
投稿日: 2010/08/30(Mon) 18:12
投稿者魔界の仮面弁士
> グリッドのスクロールを触ると、メモリ参照のエラーがでて落ちてしまいました。
そこまでいくと On Error でも拾えないでしょうし、手の打ちようが無いですね。。。
どこに問題があるのかを突き止めるのも大変そうです。


>> CursorLocation / CursorType / LockType の組み合わせを変更しながら
> rs.CursorLocation = adUseClient
> を指定しましたら、上記のエラーが出ることなく、無事グリッドへの表示もできました。
ADODB だけではなく、ADODC にもそれらのプロパティがありますよ。

[ツリー表示へ]