mysql:13925
From: goungoun <goungoun <gounx2@xxxxxxxxxx>>
Date: Thu, 26 Apr 2007 18:20:58 +0900
Subject: [mysql 13925] Re: Access2002+MyODBCでエラー
こんにちは。 On Thu, 26 Apr 2007 12:18:15 +0900 "T.Hirotsu" <hirotsu@xxxxxxxxxx> wrote: > こんにちは。 広津です。 > > どうも一連のレスポンスを拝見してますと、'\' は MyODBC が付加してるようですね、、、 多分そうです。 prepare.c の SQLPrepare関数 かと思います。 でも、ちゃんとcp932と認識していれば、無用な\エスケープは行わない ロジックになってるようなんですけどね。 > > しかし、リンクテーブルの操作などで Access に生成させた SQL の場合は付加するのに、 > ADO から投げる SQL だと付加しないというのは、この両者でキャラクタ関係の何かが異なると > いうことなのかと。 ん〜、、、??? いろいろやってみた結果、 Access経由で使ったときは(Initial Statement は関係なく) my.cnfのキャラクタセットでエスケープ処理をしてるように見えるんですけど。 > > 逆にADO から '十' を Insert / Update したときに、MyODBC が '\' を付加してサーバーに投げる > ケースが特定できれば面白そうではありますが、テスト環境がありません、、、(汗) ADO経由の場合は、 ・my.cnf ・ODBC設定のInitial Statement ・set names のどれで設定しても正常に動作します。 逆に、誤ったキャラクタセットを設定したときは、エラーやおかしなデータの インサートになってくれます。 で、Accessのときと比較すれば何かわかるかな。と思い ODBCのトレースログ、mysqlサーバのクエリーログ を見たのですが わかりませんでした。 参考までに、ADO経由の検証に使ったスクリプト張っておきます。 select(テーブル参照なし) でプリペアドステートメント ------------------------------------------------------------- var conn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); var cmd = new ActiveXObject("ADODB.Command"); var prm1 = new ActiveXObject("ADODB.Parameter"); conn.Open("Provider=MSDASQL; Data Source=mysql"); //conn.Execute("set names sjis;"); cmd.ActiveConnection = conn; cmd.CommandText = "SELECT ? AS item1"; prm1 = cmd.CreateParameter("Type", 200, 1, 10, "<十>"); cmd.Parameters.Append(prm1); rs = cmd.Execute(); WScript.Echo(rs.Fields("item1").Value); rs.Close(); conn.Close(); ------------------------------------------------------------- insert でプリペアドステートメント ------------------------------------------------------------- conn = new ActiveXObject("ADODB.Connection"); rs = new ActiveXObject("ADODB.Recordset"); cmd = new ActiveXObject("ADODB.Command"); prm1 = new ActiveXObject("ADODB.Parameter"); conn.Open("Provider=MSDASQL; Data Source=mysql"); //conn.Execute("set names sjis;"); cmd.ActiveConnection = conn; cmd.CommandText = "INSERT INTO t_test (item1) values (?)"; prm1 = cmd.CreateParameter("Type", 200, 1, 10, "<十>"); cmd.Parameters.Append(prm1); cmd.Execute(); conn.Close(); ------------------------------------------------------------- select(テーブル参照あり) でプリペアドステートメント ------------------------------------------------------------- conn = new ActiveXObject("ADODB.Connection"); rs = new ActiveXObject("ADODB.Recordset"); cmd = new ActiveXObject("ADODB.Command"); prm1 = new ActiveXObject("ADODB.Parameter"); conn.Open("Provider=MSDASQL; Data Source=mysql"); //conn.Execute("set names sjis;"); cmd.ActiveConnection = conn; cmd.CommandText = "SELECT item1 FROM t_test WHERE item1 = ?"; prm1 = cmd.CreateParameter("Type", 200, 1, 10, "<十>"); cmd.Parameters.Append(prm1); rs = cmd.Execute(); WScript.Echo(rs.Fields("item1").Value); rs.Close(); conn.Close(); ------------------------------------------------------------- > > リンクテーブルの方は、実際に作って試して見ようと思いましたら、ウチの Access からは > リンクテーブルが作成できなくなってました???(汗) > メニューからテーブルのリンクを選択すると表示されるファイル選択ダイアログボックスの、 > ファイルの種類で「ODBCデータベース」を選択すると、以前は、ODBC データソース アドミニストレータ > のウインドウが表示されていたように思うのですが、今は、何もウインドウが表示されず、 > ファイル選択ダイアログボックス自体が閉じてしまいます。 ん〜、、、??? なんか壊れてそうですね(汗 > > goungoun さんがご紹介のページにあります [mysql 11985] も試してみたかったのですが、、、 > > という訳でゴミレスです。(汗) > -- goungoun <gounx2@xxxxxxxxxx> http://goungoun.dip.jp/app/
13906 2007-04-25 11:32 [<t-fujita@xxxxxxxxxx] Re: Access2002+MyODBCでエラー 13919 2007-04-26 00:34 ┗[goungoun <gounx2@xxx] 13920 2007-04-26 08:45 ┣["fujita" <t-fujita@x] 13923 2007-04-26 12:18 ┃┣["T.Hirotsu" <hirotsu] -> 13925 2007-04-26 18:20 ┃┃┗[goungoun <gounx2@xxx] 13924 2007-04-26 17:04 ┃┗[goungoun <gounx2@xxx] 13926 2007-04-27 09:58 ┃ ┣["fujita" <t-fujita@x] 13927 2007-04-27 17:20 ┃ ┗[ezaki <kjc_post@xxxx] 13921 2007-04-26 11:25 ┗[ezaki <kjc_post@xxxx]