dポイントプレゼントキャンペーン実施中!

お世話になります。

SQLServer2000のvarchar型とtext型が混在する
テーブルをACCESS2002のODBCリンクテーブルを
使用して登録 or 更新を行う際、varchar型に
わざと指定バイト数を超える文字列を入力した後
text型に任意の文字列を入力し、レコードの更新
を行うと以下のエラーが発生します。

[Microsoft][ODBC SQL Server Driver][SQL Server]STRING または BINARY データは切り詰められました。 (#8152)

上記エラーは指定バイト数を超える文字列を入力した
時に発生することは理解しているのですが上記条件で
text型に値を入力しなかった場合はエラーが発生せず
varchar型には指定バイト数までの文字列が登録され
ます。

text型に値を入力したときとしない時、チェック方法が
違うのでしょうか?

以下は上記現象が発生した環境です。
OS:WinXP(SP2)
DB:SQLServer2000(08.00.0194)
使用ACCESS:2002(SP3)

以上、御返答、宜しくお願い致します。

A 回答 (4件)

s_husky です。



ODBCで接続してもAccessプロジェクトでリンクしても、varchar型はAccess側で切り捨てます。
Text型の入力の有無によって動作が変わる現象は確認されませんでした。
フォームの幾つかの形式、テーブルを開いての直接入力の全てにおいてです。

よって、ウーンと言う以外にありません。

この回答への補足

御返答有難う御座います。

>ODBCで接続してもAccessプロジェクトでリンクしても

現象が発生したのはプロジェクト(adp)ではなく、
データベース(mdb)のODBCリンクテーブルです。

でもODBCでも試して頂いているようですし...。

環境、ドライバのバージョンによる違い何ですかね~。

補足日時:2006/07/11 13:25
    • good
    • 0

s_husky です。



私の回答は、Varchar型に限定してのことです。
Text型ですと、SQL Server はデータアドレスを参照しているのではないでしょうか?
ですから、通常は、Accessからかなりの桁数を登録してもエラーにはならないと思います。
Access側で桁の切捨てを行わない理由かと思います。

※Text型でエラーが理解できません!素人の限界です。すみません!
    • good
    • 0
この回答へのお礼

御返答有難う御座います。

>通常は、Accessからかなりの桁数を登録してもエラーにはならないと思います。

Text型の項目でエラーが発生しているのではなくVarchar型の項目でバイト数超過のエラーだと考えています。

・Text型の項目が未入力
→Varchar型の項目は自動的に桁の切捨てを行ってくれる。

・Text型の項目が正しく入力済み
→Varchar型の項目が桁の切捨てを行わず、エラーとなる。

この違いは何なんでしょうね~?

お礼日時:2006/07/11 12:14

s_husky です。



「<文字列を入力し>が気になります。」と書いていますが、少し、補足します。
つまり、Accessのフォーム等で入力した場合、その結果をレコード移動時に確認すれば、実は、長さが切り詰められているのではないのでしょうか?
私は、このAccessの機能を利用してvarchar型の長さチェックをしていません。
この現象を示唆したつもりでした。
まあ、同様の環境で確認していないので曖昧に表現しました。

※外していれば、すみません!
    • good
    • 0
この回答へのお礼

お早い御返答有難う御座います。

>実は、長さが切り詰められているのではないのでしょうか?

通常、Accessの機能で長さを切り詰めて登録される
ようですが、なぜtext型に文字を入力した時は、長
さを切り詰める機能が動作せず、エラーが発生する
のでしょうか?

以上、御返答、宜しくお願い致します。

お礼日時:2006/07/11 10:55

スーツのデザイナでプログラマではありませんが...



Test=varchar(10)

以下のように11文字を送出した結果です!

・Err.Description=STRING または BINARY データは切り詰められました。
・Err.Number=-2147217833
・SQL State=22001
・SQL TEXT=INSRT INTO TABLE1 (ID,TEST) VALUES (10, '----+----1-')

ウーン!varchar もエラーになりましたね!

※<文字列を入力し>が気になります。
※直接にSQL文を書いてテストされた方が良いかも知れませんね!
※実際には、文字列がカットされて送出されていませんか?

SQL Server 2000/Access2002

この回答への補足

ご回答有難う御座います。

説明が足りなかったようで申し訳ないです。

・補足1
VB等でSQLを発行したのではなくAccess2002のODBC
リンクテーブルのデータシートビューでレコードの
編集を行った時の現象です。

・補足2
検証テーブルの構成(SQLServer2000)
テーブル名:TEST
項目1:[ID] [int] (PRIMARY)
項目2:[TEXT] [varchar] (6)
項目3:[MEMO] [text]

上記環境で

・現象1
TESTテーブルのデータシートビューで
1.IDカラム(int型)に適当な数値を入力
2.TEXTカラム(varchar型)に設定バイト数を超える文字列を入力。
3.MEMOカラム(text型)は未入力(空白)
でレコード移動等のレコードの保存を行う。

→TEXTカラムに設定バイト数でカットされた文字列が
入力された状態のレコードが登録される。

・現象2
TESTテーブルのデータシートビューで
1.IDカラム(int型)に適当な数値を入力
2.TEXTカラム(varchar型)に設定バイト数を超える文字列を入力。
3.MEMOカラム(text型)に適当な文字列を入力
でレコード移動等のレコードの保存を行う。

→以下のエラーメッセージが表示され、レコード保存ができない。
STRING または BINARY データは切り詰められました。

現象1と現象2でなぜ結果が違うのかが知りたいのです。

以上、ご回答、宜しくお願い致します。

補足日時:2006/07/11 09:41
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!