0

次の列を持つテーブル[Emp]があります。

EmpID、
EmpName、
EmpLastName、
EmpSalary、
Month、
Year、
ModDate

前月の約300レコードを使用して、挿入ステートメント中に変更する月属性を除いて、同じ値で同じテーブルに300の新しいレコードを作成したいと思います。

この目的のためにMSAccess+vb6を使用したいと思います。

この問題の解決にご協力いただければ幸いです。

私が実行しようとしているクエリは次のとおりです。

INSERT INTO Emp ( EmpID, EmpName, EmpLastName, EmpSalary, [Month], [Year], ModDate)
SELECT Emp.EmpID, Emp.EmpName, Emp.EmpLastName, Emp.EmpSalary, 4 AS Expr1, Emp.[Year], Now() AS Expr2
FROM Emp
WHERE (((Emp.[Year])=2013) AND ((Emp.[Month])=3))
4

1 に答える 1

0

達成したいことの本質は、次のようなクエリです。これは、2013年3月のレコードを選択し、2013年4月の同じテーブルにそれらを挿入します。

INSERT INTO Emp ( EmpID, EmpName, EmpLastName, EmpSalary, [Month], [Year], ModDate )
SELECT Emp.EmpID, Emp.EmpName, Emp.EmpLastName, Emp.EmpSalary, 4 AS Expr1, Emp.[Year], Now() AS Expr2
FROM Emp
WHERE (((Emp.[Year])=2013) AND ((Emp.[Month])=3))

[編集]

上記のクエリは、[Month]が数値列であると想定しています。[Month]がText列の場合、対応するクエリは次のようになります。

INSERT INTO Emp ( EmpID, EmpName, EmpLastName, EmpSalary, [Month], [Year], ModDate )
SELECT Emp.EmpID, Emp.EmpName, Emp.EmpLastName, Emp.EmpSalary, 'April' AS Expr1, Emp.[Year], Now() AS Expr2
FROM Emp
WHERE (((Emp.[Year])=2013) AND ((Emp.[Month])='March'))

ただし、月の名前を保存するよりも、月の番号を保存する方がはるかに好ましいことに注意してください。その列をテキストとして保持すると、将来的に不要な問題が発生する可能性があります。

[/編集]

VB6コードは、このような文字列を作成し、ハードコードされた値を、などのVB関数の結果に置き換えることができますYear()Month()12月-> 1月の年をインクリメントします)。SQL文字列を作成したら、確立したデータベース接続を使用して実行できます(ほとんどの場合、のようなメソッドを使用します.Execute)。

于 2013-03-26T09:35:56.107 に答える