0

次のクエリを実行すると:

INSERT INTO outRawTbl
SELECT *
FROM (select * from [out|noRFI_BS_noRT]
union all
select * from [out|noRFI_BS_RT])  AS [%$##@_Alias];

次のエラーが表示されます。

Microsoft Access set 3854 field(s) to Null due to a type conversion failure

次のようにクエリを実行すると:

INSERT INTO outRawTbl
SELECT *
FROM (select * from [out|noRFI_BS_noRT]
union
select * from [out|noRFI_BS_RT])  AS [%$##@_Alias];

その後、この型変換エラーは発生せず、すべてのデータが正常に挿入されます。UNION ALLクエリのフィールドの一部はメモ フィールドであり、使用すると 255 文字に切り捨てられるため、使用する必要がありますUNION

クエリから一度に 1 つずつフィールドを挿入しようとすることはできると思いますが、各クエリには約 50 のフィールドがあり、それには多くの時間がかかります。で問題を引き起こしているフィールドをすばやく見つける方法はありUNION ALLますか?

編集:別の問題を解決して発見しました。INSERTを使用する代わりに 、クエリを個別の操作として実行するというゴードンのアイデアを採用しUNION ALLました。次に、次のコードを使用して、クエリの各フィールドを反復処理し、個別の挿入を行って、変換エラーの原因となったフィールドを見つけました。

Sub findProblemField()

Dim qdf As QueryDef
Dim sql As String
Dim fld As Field   

For Each qdf In CurrentDb.QueryDefs
    If InStr(qdf.Name, "out|") Then
        For Each fld In qdf.Fields
            sql = "insert into outrawtbl select top 1 " & _
                    "[" & qdf.Name & "].[" & fld.Name & "] from [" & qdf.Name & "]"
            CurrentDb.Execute sql, dbFailOnError
        Next
    End If
Next

End Sub

これにより、SELECTクエリの文字列であるフィールドの1つが宛先フィールドの日付/時刻であり、空の文字列値がエラーをスローしていることがわかった. 現在、この問題の解決に取り組んでいます...

4

1 に答える 1