ADOについて


三田  2004-05-27 17:56:01  No: 83597  IP: [192.*.*.*]

お世話になります。
DBはSQLServer2000で
VB6.0を使用し、RDOからADOに変換してるんですが、
RDOの場合、
rs![name] = "文字列"
として、[name]がvarchar(2)だったとしても、
エラーにならず、余分な文字はカットされて
"文"だけが登録されるのですが、
ADOの場合だと、ここでエラーになってしまいます。
本来はそうあるべきなのでしょうが、
数が多すぎて対処しきれない状態です。
ADOでもRDOと同じようにエラーにならず登録はできないものでしょうか?

編集 削除
岡田 之仁  2004-05-29 22:32:19  No: 83598  IP: [192.*.*.*]

そもそもRDOでエラーしないからと言って、それが正しいとは
言えないと思います。

格納先のサイズが、最大2バイトで、それより長い文字列を
格納しようとして、エラーとなる・・・正しい動作です。

データベース側やプログラムの変更を最小限度にして、それ
らを実施したいということであれば・・・何をもって最小限
度にするかと言う判断もありますが・・・

1.  その関数部分で、On Local Error Goto ... で、該当の
    箇所のエラーの場合、文字列変数を2バイトに切り詰め
    る。

2.  データベース側のフィールドサイズを、格納可能な程度
    の長さに拡張し、INSERT や、UPDATE でトリガを儲け、
    2バイトに着ろ詰める。
    跡で、フィールドサイズも2バイトに戻す・・・

と言うことくらいしか思いつきません。

最大は・・・やはり、各代入文の部分で、2バイトを超える
文字列かどうかを判定し、超えていた場合、切り詰めるよう
変更されるのがよいと思いますが・・・

※  格納先のフィールドサイズが、最大2バイトの場合、
    それより長いデータを格納させる意味があるのでしょう
    か?

    そのデータの切り詰めで、切り捨てられたデータが発生
    した場合、そのデータはどうなるのでしょうか?

    ただ単に切り詰めるだけではなく、切り捨てられる可能
    性のあるデータを先に抽出して、逆に適切なフィールド
    サイズに変更しないといけないのではないでしょうか?

以上。

編集 削除