mysql:8873
From: bon <bon <bon@xxxxxxxxxx>>
Date: Thu, 26 Feb 2004 00:34:59 +0900
Subject: [mysql 08873] MyODBC & text
bonです。 今まで Linux(apache) & Perl & MySQL Linux(apache) & PHP & MySQL Windows(IIS) & ActivePerl & MySQL の環境でMySQLを使用していたのですが、今回初めて OSはWindows 2000 Serverで IIS(asp) & SQL Server 2000 で開発してたものを IIS(asp) & MyODBC3.51.06 & MySQL4.0.18(SJIS) (MySQLは5.0.0-alphaを使用しようとしてたのですが、 ODBCの設定で、プロトコルがどうだらこうだらのエラーメッセージが出たので、 時間がないので即断念しました) に移行することになりました。(というか、既に移行しました) MyODBCを使用するのは初めてということになります。 ODBCのオプションの設定はデフォルトのままで Don't Optimize Column Width Return Matching Row にチェックされています。 修正した主な点は、 1;text型のデータを取得する場合、 ActualSizeでデータサイズをとってきて、 そのサイズが0より大きい場合GetChunkで取得するようにしたこと。 2:テーブル内にtext型が含まれる場合、データの更新ができないので、 update文に変更したこと。 です。 2の内容は、 create table tbla ( id1 int, id2 int, info varchar(16), msg text, primary key(id1) ); strSql = "select * from tbla where id1=1" Set rs = CreateObject("ADODB.Recordset") rs.CursorType = C_adOpenDynamic rs.LockType = C_adLockOptimistic rs.Open strSql, cn '接続文字列にoptionの設定はしていません。 Do While Not rs.EOF rs("info") = strInfo rs("msg") = strMsg '(A) rs.Update '(B) rs.MoveNext Loop rs.Close というような処理をupdate文に変更しました。 (上記だけの処理だとupdate文だけでいいのですが、 実際の処理はいろいろと複雑で書くと長くなるので、 簡単に書いています。) テーブル内にtextが含まれない場合、上記処理で問題ないのですが、 含まれる場合、 (A)の時点で、rs.EditModeの値が、adEditInProgress (カレント レコードのデータが変更されましたが、 保存されていないことを示します。 ) であるにもかかわらず、 (B)で、 更新する行が見つからなかったため、クエリ_ベースの更新に失敗しました。 というエラーになります。(C) これはODBCの設定でどうにかなるものなのでしょうか? (C)のところを見るとMyODBCのバグのような気もするのですが。。。 また、text型のフィールドの値が、 Nullか空文字かの判別はどうやってするのでしょうか? SQL ServerだとValueがNullかどうかチェックすればいいだけなのですが。。。 上記内容は、mysqld-nt,mysqld-max-ntの両方試しました。 テーブルもmysqld-max-ntの場合、type=InnoDBにしています。 よろしくお願いします。 ----------------- bon@xxxxxxxxxx
-> 8873 2004-02-26 00:34 [bon <bon@xxxxxxxxxx>] MyODBC & text 8874 2004-02-26 01:49 ┗[bon <bon@xxxxxxxxxx>] 8875 2004-02-26 04:59 ┗[bon <bon@xxxxxxxxxx>]