- PR -

Access2000

1
投稿者投稿内容
るふぃ
常連さん
会議室デビュー日: 2004/06/10
投稿数: 23
投稿日時: 2004-06-28 23:36
VB6でアクセスから取得したデータ(A,B,C,D)を別のテーブルにINSERTしたいのですが。
INSERT INTO table SELECT a,b,c,d, FROM table_b でBは、数値型でbは、日付型です。
Cdate(b)とやるとオーバーフローします。データ型を変換してINSERT INTO 〜 SELECTの使い方のヒントなど頂けたらと思います。
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2004-06-29 03:29
こんにちは

> VB6でアクセスから取得したデータ(A,B,C,D)を別のテーブルに
> INSERTしたいのですが。
> INSERT INTO table SELECT a,b,c,d, FROM table_b でBは、
> 数値型でbは、日付型です。

おしゃられていることが矛盾しているように思えます。
INSERT INTO SELECT はデータを直接テーブルからテーブルへ
挿入する機能です。
1データずつ処理をするのであればINSERT INTO VALUES を
使うことになります。

提示されているINSERT文ではtable_bのa,b,c,d列の("d,"で
終わっているのは単なるタイプミスですよね)データをすべて
tableに挿入します。
このとき各列の順番とtableの挿入先の列の順番が一致している
必要があります。列名をみて挿入しているのではなく
列の順番どおりに挿入するからです。

さて、オーバーフローの件ですが実際に確認したわけではないので
確かではないですが
・table_bのbにNullが混ざっている
・値が大きすぎて日付変換の範囲を超えているとか
・INSERT INTO table のあとに挿入先の列を指定していないため
 違う型の列に挿入しようとしている
などの原因が考えられませんか。


[ メッセージ編集済み 編集者: べーちゃん 編集日時 2004-06-29 03:31 ]


[ メッセージ編集済み 編集者: べーちゃん 編集日時 2004-06-29 03:35 ]
るふぃ
常連さん
会議室デビュー日: 2004/06/10
投稿数: 23
投稿日時: 2004-06-29 23:43
こんばんわ、返信ありがとうございます。説明が足りなかったです。すいません。フィールドの1つがデータ型が異なるだけで、他は同じです。それをINSERT INTO 〜 SELECT 〜で
一致するデータを一括でINSERTしようとしています。INSERT INTO table SELEDT a,FORMAT(b,"yyyy/mm/dd"),c,d FROM table_b WHERE 〜 で b は、数値型のフィールドです。これで実行しても、オーバーフローします。
カニ
ベテラン
会議室デビュー日: 2004/06/24
投稿数: 53
お住まい・勤務地: 横浜・川崎
投稿日時: 2004-06-30 09:14
日付型に変換しようとしている数値 b には具体的にどのような値が入っているのですか?
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2004-07-01 03:18
具体的な解決策として次の方法をとってみたらどうですか。

1.INSERT INTO table SELEDT a,FORMAT(b,"yyyy/mm/dd"),c,d FROM table_b WHERE 〜 
 とあるうちのSelect以下のクエリを実行してみる。
 もしエラーがでれば、列bの値お確認してみる。
 Null、マイナスの値、やたら大きな値は要注意です。
2.もしエラーがでなければ、tableに挿入するときにエラーになっているので
 テーブルの列順が正しいかなどを確認してみる。

ぷさいくろう
ぬし
会議室デビュー日: 2006/08/30
投稿数: 1034
投稿日時: 2006-10-11 15:27
型変換
1

スキルアップ/キャリアアップ(JOB@IT)