こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ADO+ODBCでテーブルに接続する時のエラー

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);"

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

投稿日時 - 2006-02-24 21:33:19

QNo.1989208

困ってます

質問者が選んだベストアンサー

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

'モジュールレベル変数宣言
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

 

投稿日時 - 2006-02-28 10:57:54

お礼

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

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:18

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問