[前][次][番号順一覧][スレッド一覧]

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 &amp; text                       
      8874 2004-02-26 01:49 ┗[bon <bon@xxxxxxxxxx>]                                       
      8875 2004-02-26 04:59  ┗[bon <bon@xxxxxxxxxx>]