mysql:9587
From: bon <bon <bon@xxxxxxxxxx>>
Date: Thu, 10 Jun 2004 16:54:21 +0900
Subject: [mysql 09587] 更新する行が見つからない。
bonです。 OS:Windows 2000 Server MySQL:mysql-4.0.18-win.zip ODBC:MyODBC-3.51.06.exe を使用しています。 ODBCのオプションは Don't optimize column width Return matching rows にチェックしています。 以下のテーブルとデータを使用し、 −−−−−ここから−−−−− DROP TABLE IF EXISTS testtbl; CREATE TABLE testtbl ( did varchar(16) NOT NULL default '', dt datetime default NULL, PRIMARY KEY (did) ) TYPE=MyISAM; INSERT INTO testtbl VALUES ('1',''); INSERT INTO testtbl VALUES ('2',NULL); −−−−−ここまで−−−−− データを放り込んだ結果は mysql> desc testtbl; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | did | varchar(16) | | PRI | | | | dt | datetime | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> select * from testtbl; +-----+---------------------+ | did | dt | +-----+---------------------+ | 1 | 0000-00-00 00:00:00 | | 2 | NULL | +-----+---------------------+ 2 rows in set (0.00 sec) です。 そして、以下を拡張子vbsで保存し −−−−−ここから−−−−− Const C_ActConn = "dsn=hoge;uid=hogeuser;pwd=hogepass" MsgBox ChgData(1),,"1" MsgBox ChgData(2),,"2" Function ChgData(a_did) On Error Resume Next Set rs = CreateObject("ADODB.Recordset") strSql = "select * from testtbl where did='" & a_did & "'" rs.CursorType = 2 rs.LockType = 3 rs.Open strSql, C_ActConn If rs.EOF <> True Then rs.Fields("dt") = Date & " " & Time rs.Update If Err Then ChgData = "ERR" Else ChgData = "OK" End If End If rs.Close Set rs = Nothing End Function −−−−−ここまで−−−−− 実行すると、 最初はERRを表示され、次はOKと表示されます。 エラーの内容は 「更新する行が見つからなかったため、クエリ_ベースの更新に失敗しました。」 です。 更新する行があるにもかかわらずです。 これは、 datetimeに、''を挿入した場合、'0000-00-00 00:00:00'になる MySQLのバグでしょうか? SQL Serverでは、'1900-01-01 00:00:00.000'になり select * from testtbl where isnull(dt,0)=0; select * from testtbl where dt='1900-01-01'; で、2つのSQL文ともdid=2が返りますが、 MySQLでは、 mysql> select * from testtbl where isnull(dt)=1; +-----+------+ | did | dt | +-----+------+ | 2 | NULL | +-----+------+ 1 row in set (0.00 sec) mysql> select * from testtbl where dt='0000-00-00'; +-----+---------------------+ | did | dt | +-----+---------------------+ | 1 | 0000-00-00 00:00:00 | +-----+---------------------+ 1 row in set (0.00 sec) NULLと'0000-00-00'は別扱いでした。 それとも、 ODBCのバグでしょうか? それとも 日付にnullか正当な値以外を挿入したら動作は保証できない ということでしょうか? よろしくお願いします。 ----------------- bon@xxxxxxxxxx
-> 9587 2004-06-10 16:54 [bon <bon@xxxxxxxxxx>] 更新する行が見つからない。 9594 2004-06-11 07:13 ┗[Kenji Irie <kenji@xx] 9595 2004-06-11 10:12 ┗[bon <bon@xxxxxxxxxx>]