- ベストアンサー
【Access】異なるTBLへの登録方法について
- access2010を使用してツールを作成しています。テキストファイルを一時格納TBLに登録し、それを正規TBLに登録する方法を考えています。
- 一時格納TBLの型はすべてテキスト型を指定していますが、正規TBLの型を正しく指定することができません。
- ALTER TABLEを使用して正規TBLの型を修正する方法も考えましたが、都度型指定をやり直す必要があります。より良い方法を教えていただけないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>一時格納TBLの型は仕様上、全てテキスト型を指定。 テキストファイルをインポートする、一時格納TBLは、すべてのフィールドがテキスト型「でなければ」ならない、と言う仕様で、変更が出来ないのであれば「テキストフィールドを、正規の型に変換するクエリ」を用いることになります。 例えば、 変換前 T1フィールド:文字列型 T2フィールド:文字列型 T3フィールド:文字列型 T4フィールド:文字列型 変換後 T1フィールド:文字列型 T2Vフィールド:数値型 T3Vフィールド:日付/時刻型 T4フィールド:文字列型 となっている場合、以下のクエリ SELECT TABLE1.T1, Val([T2]) AS T2V, DateValue([T3]) AS T3V, TABLE1.T4 FROM TABLE1; で型変換されたフィールドが出力されます(循環参照を防ぐ為、型変換するフィールドは「T2→T2V」のように、フィールド名を変更する必要があります) この変換クエリを元に、正規テーブルに対し、以下のようにinsertやupdateを行なえば良いです(上記の変換クエリを「QUERY1」とし、正規テーブルを「TABLE2」とした場合) SELECT QUERY1.*, * INTO TABLE2 FROM QUERY1; なお「Val関数により数値に変換できないフィールドは0に、DateValue関数により日付/時刻型に変換できないフィールドはブランクになる」ので、注意して下さい。 蛇足ですが、本来なら、ANo1の回答のように「テキストファイルをインポートする時に、保存してあるインポート定義を利用してインポートするべき」なのですが「仕様上、そうする事ができない」なら、上記のように「型変換クエリ」を用いるしかありません。
その他の回答 (2)
- chie65536(@chie65535)
- ベストアンサー率44% (8803/19962)
因みに、日付/時刻型に変換するフィールドの内容により 日付のみを現す文字列の場合:DateValue(T3) 時刻のみを現す文字列の場合:TimeValue(T3) 日付と時刻を表す文字列の場合:DateValue(T3)+TimeValue(T3) のように、式を使い分けして下さい。 また「おおもとの日付データ」が「20170728」のように、区切り記号が無い場合は変換出来ませんから、RIGHT、MID、LEFT関数を用いて「2017/07/28」のような、区切り文字を含んだ文字列を作ってから、DateValue、TimeValue関数を用いて下さい。
- panacon
- ベストアンサー率31% (214/679)
一時格納テーブルがすべてテキスト型になってしまうというのが違います。 外部データでテキストインポートを選択して固定長やタブ区切りでフィールド分けをした際に、それぞれのフィールドのデータ型を設定できます。この設定を行ってからあと一手でインポートできるところでインポート定義を保存します。 実運用では、マクロボタンに削除とインポートを設定してその際の定義に保存したインポート定義を設定すればOKです。
補足
ありがとうございます。 全てテキスト型なのは意図的です。ツールの仕様上まずは全てテキスト型で登録し、確定する際に型・桁指定のTBLに登録するというのが流れになります。 上記が仕様上良いものでないことは理解していますが、やむを得ずです。PL/SQLであれば実現できているのですが、accessの場合は難しいのかなとも思っています。
お礼
ご丁寧にありがとうございました。 やはりTBL設計の段階で本来の形から逸脱しているのでそれが悪いですよね。 ご教示頂いた方法で進めてみます。