mysql:4502
From: satou <satou <quick@xxxxxxxxxx>>
Date: Wed, 17 Oct 2001 13:49:08 +0900
Subject: [mysql 04502] レコードセットが不安定
はじめまして、佐藤と申します。
お世話になります。
MySQLは1週間目の初心者です。
VB+Jetでアプリを構築したのですが、処理速度をもう少し上げたいので
MySQLに乗せ替えることにしました。
MySQLのテーブルの構築とデータのコンバートまではスムーズに来たのですが、
アプリ内でのレコードセットを手に入れるときにおかしな動作をするので悩ん
でいます。
フイルド名やテーブル名に日本語を使っているせいかと思ったのですがそれだ
けではなさそうです、いろいろと教えて下さい。
下のソースは
Code SMALLINT NOT NULL, 名称 TEXT, PRIMARY KEY (Code);で作ったテーブル
から読み出す部分です
n2z()はNULLなら0に置き換える関数です。
n2s()はNULLなら空文字に置き換える関数です。
cnMySQLはコネクションオブジェクトで起動時にオープン済みです。
RecExist(rs)は (Not rs.Eof And Not rs.BOF) を返します。
sNm = n2s(rs("名称")) が問題部分でrs("名称")に値が入ってきません。
他で同じような作りをしているところはうまく動いているのもあります。
エラーで止まったソースの『rs("名称")』部分にマウスカーソルを当てると値
が表示されますが、その値が『NULL』だったりします、でももう一度マウスカー
ソルを当てると今度は正しい値が入っていたりとか、プログラムが停止してい
るのにレコードセットの内容が変化します。
ちなみにフイルド名を『名称』から『name』に変えたらこの部分は解決できま
したが、他に同じような問題が発生している部分で『型式0』を『model0』に
代えても解決しませんでした。
--------------
Dim rs As ADODB.Recordset
Dim sSQL As String
Dim iCd As Integer
Dim sNm As String
iCd = n2z(hogehogeCode)
sNm = ""
sSQL = "SELECT * FROM ランク WHERE Code = " & iCd & ";"
Set rs = New ADODB.Recordset
rs.Open sSQL, cnMySQL, , , adCmdText
If RecExist(rs) Then
sNm = n2s(rs("名称"))
End If
rs.Close: Set rs = Nothing
---------------
上記のソースでまずい点やVBでアクセスするときの留意点など教えて下さい。
それとコネクション文字列ですが、
Provider=MSDASQL.1;Persist Security Info=False;Data Source=TEST
で問題ないでしょうか。
開発環境はWin2000+SP2 VB6+SP5 MyODBC2.50.39 MySQL3.23.42 で
localhostです。
-> 4502 2001-10-17 13:49 [satou <quick@xxxxxxx] レコードセットが不安定 4504 2001-10-17 18:36 ┗[Seiji Tateyama <tate] 4518 2001-10-19 09:36 ┗[satou <quick@xxxxxxx]