お風呂の温度、何℃にしてますか?

VB6.0(SP6)から、ADOとODBCでMySQLに接続しました。

'--------------------------------------------
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strCn As String

Set cn = New ADODB.Connection
strCn = "dsn=MySQL;uid=user;pwd="
cn.CursorLocation = adUseClient
cn.Open strCn

Set rs = New ADODB.Recordset
rs.Open "select * from tbl;", cn, adOpenDynamic, adLockPessimistic
Set DataGrid1.DataSource = rs
'--------------------------------------------

データグリッドコントロールにテーブルの内容を表示させようとしているのですが、rs.Openの行でエラーが出てしまいます。エラーメッセージは「複数ステップの操作でエラーが発生しました。各状態の値を確認してください」です。
SQL文を変えて試してみると、何故かデータ型がDECIMALのカラムが含まれているとエラーになります。
DECIMALだといけないかと思うと、挿入は問題なく出来ます。
cn.Execute "insert into tbl (id,decimal_clm) values (10,900);"

ご存知の方がいらっしゃいましたら宜しくお願いします。

A 回答 (1件)

はじめまして


私も前にデータグリッドにテーブルの内容を表示できなくて困ってました。
私の使ってたプログラムを書きますね。

'モジュールレベル変数宣言
Private cn As ADODB.Connection 'Connectionオブジェクト
Private rs As ADODB.Recordset 'Recordsetオブジェクト


'フォームの起動時
Private Sub form_load()

'MySQL4.1データベース接続
Set cn = New ADODB.Connection
cn.Open "Provider=MSDASQL.1;Password=;User ID=root;Data Source=test123"

'SQLステートメント
Dim mySQL As String '表示するテーブルの決定
mySQL = "select * from test123"


'レコードセットを取得
Set rs = New ADODB.Recordset
rs.ActiveConnection = cn
rs.Source = mySQL
rs.CursorLocation = adUseClient '←●ここがポイント
rs.CursorType = adOpenStatic
rs.LockType = adLockOptimistic
rs.Properties("IRowsetIdentity") = True
rs.Open

'データグリッドにコントロールに連結
Set DataGrid1.DataSource = rs
end sub

 
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

jpgifさんのコードをコピペして実行しましたが、残念ながら同じエラーが出てしまいます(rs.Openで「複数ステップの操作で~」)。SELECT文のカラムに、データ型がDECIMAL以外のものを指定するとエラーが出なくなります。

ちなみに私の環境です。

データベース: MySQL-server-5.0.18-0
サーバー: VineLinux3.2
ODBC: MyODBC 3.51
チェックしているODBCのオプション:
Don't Optimize Column Width
Return Matching Rows
Change BIGINT Columns To Int
問題のカラム:
Type = decimal(8,0)
Null = yes
Key =
Default =
Extra =

お礼日時:2006/02/28 22:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報

このQ&Aを見た人がよく見るQ&A