出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

無題   KAZUさん [2004/12/16 21:15:51] [4855]
  Re:無題   KAZUさん [2004/12/16 21:19:50] [4856]
    Re:無題   KAZUさん [2004/12/16 21:21:01] [4857]
      Re:無題   暇人さん [2004/12/17 11:56:00] [4860]
        Re:無題   KAZUさん [2004/12/17 21:02:17] [4868]
          Re:無題   暇人さん [2004/12/20 9:46:49] [4869]
            Re:無題   KAZUさん [2004/12/20 22:37:17] [4870]
              Re:無題   暇人さん [2004/12/24 14:08:23] [4874]
                Re:無題   KAZUさん [2004/12/24 15:55:43] [4875]

[4855] 無題
投稿者:KAZUさん 2004/12/16 21:15:51
ASPに関して質問させて下さい。

あるテーブルに対して、以下のように更新処理(update)を実施
しています。

@Server.CreateObject("ADODB.Connection")
AConnection.Open
BServer.CreateObject("ADODB.Command")
CServer.CreateObject("ADODB.Recordset")
DCommandTextにSQL文を設定する←更新対象を検索
ECommandTypeに1を設定
Fレコードセットに値を設定する
Gテーブルに対しての更新で”レコードセット.update”にて実施する

この時、Fでレコードセットに値をセットする際に、その値が
unicode文字の場合(例えばU+9B16 など)、以下のエラーが
発生します。

”複数ステップのOLEDBの操作で・・・”(80040E21)のエラー
が発生します。

これらの対応策を探ってはいるのですが解決に至っていません。

入力時にこれらの入力値をチェックする方策も考えておりますが、
こちら現時点では分からない状態です。

どなたかご教授願えますか?

[4856] Re:無題
投稿者:KAZUさん 2004/12/16 21:19:50
> ASPに関して質問させて下さい。
>
> あるテーブルに対して、以下のように更新処理(update)を実施
> しています。
>
> @Server.CreateObject("ADODB.Connection")
> AConnection.Open
> BServer.CreateObject("ADODB.Command")
> CServer.CreateObject("ADODB.Recordset")
> DCommandTextにSQL文を設定する←更新対象を検索
> ECommandTypeに1を設定
> Fレコードセットに値を設定する
> Gテーブルに対しての更新で”レコードセット.update”にて実施する
>
> この時、Fでレコードセットに値をセットする際に、その値が
> unicode文字の場合(例えばU+9B16 など)、以下のエラーが
> 発生します。
>
> ”複数ステップのOLEDBの操作で・・・”(80040E21)のエラー
> が発生します。
>
> これらの対応策を探ってはいるのですが解決に至っていません。
>
> 入力時にこれらの入力値をチェックする方策も考えておりますが、
> こちら現時点では分からない状態です。
>
> どなたかご教授願えますか?

[4857] Re:無題
投稿者:KAZUさん 2004/12/16 21:21:01
スミマセン、補足します。

プラットフォームは
Windows2000 SP3
SQLServer2000 StandardEdition
になります。

宜しく御願い致します。

> > ASPに関して質問させて下さい。
> >
> > あるテーブルに対して、以下のように更新処理(update)を実施
> > しています。
> >
> > @Server.CreateObject("ADODB.Connection")
> > AConnection.Open
> > BServer.CreateObject("ADODB.Command")
> > CServer.CreateObject("ADODB.Recordset")
> > DCommandTextにSQL文を設定する←更新対象を検索
> > ECommandTypeに1を設定
> > Fレコードセットに値を設定する
> > Gテーブルに対しての更新で”レコードセット.update”にて実施する
> >
> > この時、Fでレコードセットに値をセットする際に、その値が
> > unicode文字の場合(例えばU+9B16 など)、以下のエラーが
> > 発生します。
> >
> > ”複数ステップのOLEDBの操作で・・・”(80040E21)のエラー
> > が発生します。
> >
> > これらの対応策を探ってはいるのですが解決に至っていません。
> >
> > 入力時にこれらの入力値をチェックする方策も考えておりますが、
> > こちら現時点では分からない状態です。
> >
> > どなたかご教授願えますか?

[4860] Re:無題
投稿者:暇人さん 2004/12/17 11:56:00
挿入するフィールドのバイト数が足りてないという事はないでしょうか?
Unicodeは一文字2Byte固定です。
charやvarcharのフィールドの場合、nvarcharやncharに変更してしまうのも手です。

[4868] Re:無題
投稿者:KAZUさん 2004/12/17 21:02:17
> 挿入するフィールドのバイト数が足りてないという事はないでしょうか?
こちらでフィールドのバイト数を大きくして検証しましたが、
おっしゃるとおりエラーにはなりませんでした!

ただし何故フィールドのバイト数を超えてしまったのかというと、
画面から第3もしくは第4水準の文字が入力された場合
HTMLユニコード(&#nnnnというような)に変換されてしまい、
変換後の文字でDBに登録しようとした為でした。

入力された値を確認画面に1度表示しているのですが
その際はきちんと表示されています。
どこで文字が変換されてしまうのかをこれから調査してみます。。

ご存知でしたら、この辺りについてもご教授いただけますでしょうか?
どうぞよろしくおねがいします。

[4869] Re:無題
投稿者:暇人さん 2004/12/20 9:46:49
> ただし何故フィールドのバイト数を超えてしまったのかというと、
> 画面から第3もしくは第4水準の文字が入力された場合
> HTMLユニコード(&#nnnnというような)に変換されてしまい、
> 変換後の文字でDBに登録しようとした為でした。

URL、HTMLエンコードのトラブルでしたか。
原因がわかって幸いです

> 入力された値を確認画面に1度表示しているのですが
> その際はきちんと表示されています。
> どこで文字が変換されてしまうのかをこれから調査してみます。。

画面に表示した際、ソースの表示を行ってみてください。
当然ですがHTMLエンコードされた文はブラウザでみても&hoge等の表示にはなりません。(そのためのHTMLエンコードですから)
しかし、画面のソースを見てみれば
 <td>&hoge</td>
などと書かれていますので確認できます。
後、関係ないかもしれませんが。get渡し、URLのリンクからの遷移にも注意してみてください。URLエンコードされている事もあります

[4870] Re:無題
投稿者:KAZUさん 2004/12/20 22:37:17
> 後、関係ないかもしれませんが。get渡し、URLのリンクからの遷移にも注意してみてください。URLエンコードされている事もあります

画面から第3もしくは第4水準の文字をFORMで送信した際に、
エンコードされてしまいます。
送られるデータの形式はapplication/x-www-form-urlencodedを
指定しています。
エンコードされた文字を、デコードするなどはできるのでしょうか?

何かご存知の事がありましたら、ご教授ください。

[4874] Re:無題
投稿者:暇人さん 2004/12/24 14:08:23
インフルエンザってつらいですね
全身筋肉痛のような痛みが寝ても座ってもたっても襲ってきて
熱は40度、のどは痛いし。シヌカトオモッタヨ
・・・月曜からのた打ち回ってました(いや体は動かないですが精神的に)

一応自分なりの回答を下に書きます

> 送られるデータの形式はapplication/x-www-form-urlencodedを
> 指定しています。
> エンコードされた文字を、デコードするなどはできるのでしょうか?

ASPは基本的にRequest、Responseオブジェクトに文字列を入れるときに自動で変更しますが。それでも変わらない例外もやっぱり有るわけで
自作した関数を使うしかないです。
 でも1から作るのは面倒なので、Vectorとかでフリーソフトとして配布されているdecodeプログラムを頂いて見たらどうでしょう。
そのままではやっぱり使えませんが、1から作るより手間がかからなくていいです。
 自分でも作ってみたのですが。果たしてKAZUさんの環境でもOKなのか極めて疑問な上に、数百行いっちゃうのでちょっとここに乗せられません
 後はがんばってください。グッドラック


[4875] Re:無題
投稿者:KAZUさん 2004/12/24 15:55:43
インフルエンザですか!
元気になって何よりです!!!

色々、お勉強させて頂きました。
どうも、ありがとうございます。
良いお年を。



TreeBBS For ASP V.0.1.3
Program By YasNet