1

VBA スクリプトを使用してデータベースを .dbf としてエクスポートしようとしていますが、dbf では、データベースの列サイズに特定の値が必要です。

Access にある列をそのままにしておくと、次のエラーが表示されます。

field will not fit in record

各列の列サイズを個別に設定するにはどうすればよいですか? できればテーブルの生成中に、クエリを使用して新しいテーブルを生成するたびに手動で行う必要はありません

どこに設定すればよいですか?(クエリまたは SQL で?)

前もって感謝します!


編集:

エラーが発生しているフィールドサイズの値であることを確認しました。デザイン ビューでテーブルを開いて、すべてのフィールド サイズの値を手動で変更しました。

ですから、私の質問の 2 番目の部分がより重要になってきています。テーブルの生成中にフィールド サイズを設定できるかどうか。


編集2:

現在、クエリで SQL を使用して、次のようにテーブルを作成しています。

SELECT * INTO DB_Total
FROM Tags_AI_DB;

イニシャルDB_Totalが作成された後、いくつかのInsert intoクエリを使用して他の行を追加します。

INSERT INTO DB_TOTAL
SELECT a.*
FROM Tags_STS_ENA_DB AS a 
LEFT JOIN DB_TOTAL AS b 
ON a.NAME = b.NAME
WHERE b.NAME IS NULL;

DB_Totalクエリで生成中にテーブルに列の値を設定した場合、クエリを使用してさらに行を挿入Select intoした後も、それらの値は保持されますか?Insert Into


編集3:

私は(あなたのいくつかの提案と同僚からのいくつかの指摘の後、最初にテーブルを作成し、その後このテーブルをクエリで更新する方がよいと判断しました。

ただし、Access で行き止まりに陥ったようです。これは私が使用しているコードです。

CREATE TABLE DB_Total ("NAME" char(79),"TYPE" char(16), "UNIT" char(31), 
"ADDR" char(254), "RAW_ZERO" char(11), "RAW_FULL" char(11), "ENG_ZERO" char(11), 
"ENG_FULL" char(11), "ENG_UNIT" char(8), "FORMAT" char(11), "COMMENT" char(254), 
"EDITCODE" char(8), "LINKED" char(1), "OID" char(10), "REF1" char(11), "REF2" char(11),
"DEADBAND" char(11), "CUSTOM" char(128), "TAGGENLINK" char(32), "CLUSTER" char(16), 
"EQUIP" char(254), "ITEM" char(63), "HISTORIAN" char(6), 
"CUSTOM1" char(254), "CUSTOM2" char(254), "CUSTOM3" char(254), "CUSTOM4" char(254), 
"CUSTOM5" char(254), "CUSTOM6" char(254), "CUSTOM7" char(254), "CUSTOM8" char(254))

これらは、使用しているアプリケーションで受け入れられる DBF ファイルを作成するために必要なすべての列です。

これが次のエラーを生成したときの私の悲しみを理解するでしょう:

Record is too large

このテーブルを機能させるためにできることはありますか?

4

2 に答える 2

1

Edit2では、プロセスがからデータを作成してロードする「テーブルの作成」( SELECT INTO) クエリで始まることを示しました。次に、一連の「追加」( ) クエリを実行して、他のテーブルからデータを追加します。DB_TotalTags_AI_DBINSERT

ここでの問題は、 の特定のフィールド サイズ設定が必要なことですがDB_Total、「テーブルの作成」クエリでそれらのサイズを定義することは不可能です。

DB_Total一度作成して、必要に応じてフィールドサイズを設定する必要があると思います。デザイン ビューのテーブルで手動で行うか、必要にCREATE TABLE応じてステートメントを実行します。

次に、「テーブルの作成」クエリを忘れて、「追加」クエリのみを使用してデータを追加します。

これが繰り返しの操作であり、新しいデータをインポートする前に以前のデータを破棄することが問題である場合は、DELETE FROM DB_Total代わりに を実行しDROP TABLE DB_Totalます。これにより、(現在は空の)DB_Totalテーブルの構造を保持できるため、フィールド サイズを再度設定する必要はありません。

唯一の潜在的な問題は、ソース テーブルの構造が変更された場合に発生する可能性があるようです。その場合は、 の構造を修正して、DB_Total再度互換性を持たせてください。

于 2013-02-26T18:59:37.637 に答える
1

アップデート

Access 2007 の最大レコード サイズは約 2kB です (だれかが間違いなくその値を修正するでしょう)。CHAR(255) を作成すると、フィールドの内容に関係なく 255 バイトのスペースが使用されます。
対照的に、VARCHAR は、フィールドに何かを入れるまでスペースを使い果たしません (それらを定義するのに十分なだけです)。動的に大きくなります。

CHAR(x)s をs に変更するVARCHAR(x)と、テーブルの長さが許容値内に縮小されます。挿入しようとしている行が 2kB の制限を超えると、問題が発生する可能性があることに注意してください。


テーブルを生成するときに列の長さを指定する方法は、 のCREATE TABLE代わりにステートメントを使用することSELECT * INTOです。

CREATE TABLE DB_Total
(
 Column1Name NVARCHAR(255) --Use whatever datatype and length you need
,Column2Name NUMERIC(18,0) --Use whatever datatype and length you need
,...
) ;

INSERT INTO DB_Total
....

ステートメントを使用する場合SELECT * INTO、SQL は、既存のデータで見つかったフィールドの長さと型を使用します。

また、挿入ステートメントに列名をリストすることをお勧めします。

INSERT INTO DB_TOTAL
SELECT a.*

あなたは置くべきです:

INSERT INTO DB_Total
       (
        Column1Name
       ,Column2Name
       ,...
       )
SELECT  a.Column1Name
       ,a.Column2Name
       ,...
FROM   ...
WHERE  ... ;
于 2013-02-26T11:49:20.583 に答える