• 締切済み

Accessのメモ型について

お世話になります。 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) 以上、御返答、宜しくお願い致します。

みんなの回答

noname#22222
noname#22222
回答No.4

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

k_gassan
質問者

補足

御返答有難う御座います。 >ODBCで接続してもAccessプロジェクトでリンクしても 現象が発生したのはプロジェクト(adp)ではなく、 データベース(mdb)のODBCリンクテーブルです。 でもODBCでも試して頂いているようですし...。 環境、ドライバのバージョンによる違い何ですかね~。

noname#22222
noname#22222
回答No.3

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

k_gassan
質問者

お礼

御返答有難う御座います。 >通常は、Accessからかなりの桁数を登録してもエラーにはならないと思います。 Text型の項目でエラーが発生しているのではなくVarchar型の項目でバイト数超過のエラーだと考えています。 ・Text型の項目が未入力 →Varchar型の項目は自動的に桁の切捨てを行ってくれる。 ・Text型の項目が正しく入力済み →Varchar型の項目が桁の切捨てを行わず、エラーとなる。 この違いは何なんでしょうね~?

noname#22222
noname#22222
回答No.2

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

k_gassan
質問者

お礼

お早い御返答有難う御座います。 >実は、長さが切り詰められているのではないのでしょうか? 通常、Accessの機能で長さを切り詰めて登録される ようですが、なぜtext型に文字を入力した時は、長 さを切り詰める機能が動作せず、エラーが発生する のでしょうか? 以上、御返答、宜しくお願い致します。

noname#22222
noname#22222
回答No.1

スーツのデザイナでプログラマではありませんが... 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

k_gassan
質問者

補足

ご回答有難う御座います。 説明が足りなかったようで申し訳ないです。 ・補足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でなぜ結果が違うのかが知りたいのです。 以上、ご回答、宜しくお願い致します。

関連するQ&A

  • AccessからOrcleのODBCリンクテーブルへの挿入

    OS:XPpro Access:97,2000 Oracle:7 AccessからOracleのODBCリンクテーブルに対して追加クエリを実行すると、 ODBC--リンクテーブル'テーブル名'への挿入に失敗しました。 [Oracle][ODBC Oracle Driver][Oracle OCI]ORA-01461: can bind a LONG value only for insert into a LONG column.(#1461) というエラーが発生します。 メモ型のフィールド'A'をvarchar2(4000)のフィールド'B'に追加する部分で、LeftB(A,4000)としている部分がうまく行かないようようなので、LeftB(A,3000)と丸めてあげると通ります。 質問を纏めますと、 1.varchar2(4000)となっていても、4000Byteのデータを挿入することはできないのでしょうか。 2.発生しているエラーは、私の考えとは別の問題なのでしょうか。 ご回答よろしくお願いします。

  • ODBCからSQLServerに接続するには?

    SQLドシロウトです。力をお貸しください。 SQLを勉強しようと本を購入しました。実際パソコンで入力しながら勉強しようと思い、本の説明にしたがって、 「コントロールパネル」の「ODBCデータベース(32ビット)」から「追加」で新しいデータソース名とユーザが入力するSQLServer用のログインIDを入力してSQLServerへつなげようとしますが、「指定されたSQLServerが見つかりません」とエラーになります。いろいろ調べてみましたが分からず、ただ私の考えになかった知らない事があるようだと感じました。 そこで、教えてください。 Win98でJava環境とイクリプスとトムキャットが入ってます。「コントロールパネル」の「ODBCデータベース(32ビット)」の「システムDSN」には何も表示されません。 ・同パソコン内にSQLサーバーを設定できるのか。 ・SQLServerというソフトを別途インストールしないとODBCから設定できないのか。もしそうならバージョンはどれか。 ・SQLServerを設定後、オラクル設定はできるのか。 ●ODBCからSQLServerへ接続するのに必要な作業を教えてください。よろしくお願いします。

  • bcpインサートでのフォーマットファイルの書き方

    bcpコマンドでインサートをしたいと考えています。 テーブルの形式は 1 datetime 日時 2 filed_1 varchar(10) 3 filed_2 varchar(10) 4 filed_3 varchar(10) です。 フォーマットファイルに 8.0 4 1 SQLDATETIME 0 8 "," 1 日時 "" 2 SQLCHAR 0 3 "," 2 filed_1 "" 3 SQLCHAR 0 3 "," 3 filed_2 "" 4 SQLCHAR 0 3 "\r\n" 4 filed_3 "" 書きました。 データは、 2009/04/01 0:00:00,11.0,11.0,11.0 2009/04/01 0:01:00,11.0,11.0,11.0 です。 SQLServerは2005のExpressです。 実行すると コピーを開始中です... SQLState = 37000, NativeError = 7339 Error = [Microsoft][ODBC SQL Server Driver][SQL Server]リンク サーバー '(null)' の OLE DB プロバイダ 'STREAM' から、列 '[!BulkInsert].日時' に無効なデータが返さ れました。 BCP コピー in が失敗しました が返されます。 成功させるにはどこを直せばよいでしょうか。 よろしくお願いします。

  • Access 97 2K:テキスト型フィールドサイズ

    お世話になっております。 Access2K、Access97の テーブルのフィールドのサイズを、文字列の5 とし、 固定文字"あいうえお" を入力使用としたところ、 Access2Kでは"あいうえお" Access97では"あい" としか入力できません。 固定文字"aiueo" を入力使用としたところ、 どちらも全て入力できました。 おそらく、バイト長と文字数の違いだと思うのですが、 2Kのヘルプではバイト単位で入力するように 載っているのになぜ指定した長さの全角文字列が 入力できるのでしょうか。 ご教授のほど、よろしくお願いいたします。

  • VBからのDAOでメモ型へのアクセス

    Access2000でメモ型を含むテーブルを作成し、VBからアクセスします。 テーブルへの書込みはサイズに関係なく(257バイト以上も)問題なく出来ます。257バイト以上の文字列を書き込んだ後Accessで直接テーブルの内容を確認すると、正常に書き込まれています。 が、257バイト以上の文字列の読み込みを行うと255バイトで切れてしまいます。 テキスト型は255バイトまでで、メモ型は65534バイトまでと思っていたのですが違いますか? 違っているとしたら、60000バイトは必要ありませんが1000文字(2000バイト)くらいは使いたいと思っていますので、フィールドの型と、VBからのアクセスの方法を教えてください。

  • SQLserver2000でプライマリーキーの設定でのエラー

    こんばんわ。 現在SQLの勉強をSQLserver2000でしているのですが、 SQL Enterprise Managerを使って、ある列に主キーを定義しようとして、鍵マークをつけて、保存しようとすると 以下のようなエラーがでて設定できません。 テーブル 'xxxxx' - インデックス 'PK_xxxxx' を作成できません。 ODBC エラー : [Microsoft][ODBC SQL Server Driver][SQL Server]インデックス ID 1 で重複したキーが見つかったので、CREATE UNIQUE INDEX は終了しました。もっとも重要な主キーは 'yyyyy ' です。 [Microsoft][ODBC SQL Server Driver][SQL Server]制約を作成できませんでした。以前のエラーを調べてください。 [Microsoft][ODBC SQL Server Driver][SQL Server]ステートメントは終了されました。 初心者なので、このエラーの意味するところが理解できません。 なにが間違っているのでしょうか。 よろしくお願いします。

  • datetime型でNULL値を入れたい。

    現在SQLserver上で、、CSVを一時テーブルに保管し、ある条件に合致する行のみTBLに追加するというストアドを書いています。そのTBLには「datetime型」の列があります。 この作業で、2点問題が発生しています。 (1)CSVファイルから一時テーブルにデータを入れようとすると、datetime列がNULLの場合、型の不一致でエラーが発生します。 (2)上記において、一時テーブルの型をとりあえずvarcharにしておくと入れれるのですが、TBLに追加しようとする際、「convert(datetime,変数)」としているのですが、上手くキャストしてくれません。(「文字列から日付への変換に失敗しました」のような文がでます) どのようにすれば、NULLでもdatetimeに入れられるのでしょうか?教えてください。

  • ACCESSのODBCリンクテーブルに接続できなくなる

    ACCESSでSQLserverのテーブルとODBCリンクテーブルで連携したアプリケーションの開発を行っているのですが、ときどきテーブルとのリンクが切れてしまい、「実行時エラーです。リンクするテーブルが見つからないので、クエリを実行できませんでした。」というエラーが発生してしまいます。外的要因以外でACCESSではこのようなことはよく起こりうることなのでしょうか。またこの問題を回避できそうな方法をしている方いらっしゃいましたらよろしくお願いいたします。

  • AccessでMySQLを表示 改行が表示されない

    以下等のページを参考にしてMySQLのテーブルをAccessで表示することを試みました。 http://mysqlweb.net/category/4062977-1.html が、しかし、改行の入っている文字列はAccessでは表示されません。 (文字列はMySQLで、VARCHARで指定しています) これは致し方ないものなのでしょうか。

    • ベストアンサー
    • MySQL
  • ODBCタイムアウトエラー

    WindowsXP環境でACCESS2003を使用して、ODBCリンクでSQL SERVER2005に接続し、データーを取得後ローカルテーブルにデーターを置く処理を作って運用していたのですが、 Windows7でACCESS2003に移行し、システム内容は変更していないのですが Windows7になってリンクテーブルを開くと「ODBC タイムアウトエラー」が発生します。 WindowsXPのときはタイムアウトが出ずに1分くらいで結果が返ってきます。 多分、SQL SERVER ドライバーの影響と思うのですが分かりません。 どなたか教えてください。 Windows7 SQLSERVER(ODBC)ドライバー バージョン:6.01.7601.17514 windowsXP ドライバー バージョン:200.85.1132.00