2

データの一部を保存して完全なレコードを作成する一時テーブルがあります。ボタンをクリックすると、一時テーブルからデータを取得し、それをメインテーブルに入れ、一時テーブルの古いレコードを削除するように設定しようとしています。

このコードを使用しようとしましたが、VBA エディターに十分なスペースがないようです (すべての列名が長すぎて、列名が多すぎるようです)。

strSQL = "Insert Into ProjectsT (CustomerName, ProjectName, ProjectDesc, DateOfPurchase, ProjectDueDate, EngineerDueDate, CutplanDueDate, HardwareDueDate, ProjectComplete, EngineerComplete, CutplanComplete, HardwareComplete, WorkOrder, MaterialSpecs, CutplanPattern, Milestones, HardwareSpecs, SupplierName, ProjFilePath, DrawFilePath, DetailFilePath, CostFilePath, ProjectStartDate, EngineerStartDate, CutplanStartDate, HardwareStartDate, PackageReleasedToShop, EstAssemblyHours, CuttingDueDAte, TrakwareNumber) Select CustomerName, ProjectName, ProjectDesc, DateOfPurchase, ProjectDueDate, EngineerDueDate, CutplanDueDate, HardwareDueDate, ProjectComplete, EngineerComplete, CutplanComplete, HardwareComplete, WorkOrder, MaterialSpecs, CutplanPattern, Milestones, HardwareSpecs, SupplierName, ProjFilePath, DrawFilePath, DetailFilePath, CostFilePath, ProjectStartDate, EngineerStartDate, CutplanStartDate, HardwareStartDate, PackageReleasedToShop, EstAssemblyHours, CuttingDueDAte, TrakwareNumber From ProjectsTempT Where ID=" & Me.txtID & ";"

すべての列の名前が同じで、これだけ多く/長い名前がある場合、一時テーブルからメインテーブルにデータをコピーできるように設定するにはどうすればよいですか?

4

2 に答える 2

2

「すべての列に同じ名前が付けられ、これほど多く/長い名前がある場合、一時テーブルからメインテーブルにデータをコピーできるように設定するにはどうすればよいですか?」

INSERTターゲット テーブルのすべてのフィールドに値を指定する場合は、テーブル名に続くフィールド リストを省略できます。

INSERT INTO ProjectsT
SELECT *
FROM ProjectsTempT;

シンプルにするために、このWHERE節は省略しました。

しかし、最初の試み (フィールド名のリストを使用) が失敗した理由がわかりません。(エラー メッセージはありましたか?) SELECTAccess のクエリ デザイナーでクエリを作成しProjectsTempT、グリッドの下部にフィールドを追加します。次に、クエリ タイプを「追加」に変更します。グリッドで、ソース テーブルの各フィールドに一致するターゲット テーブル フィールドを選択します。この方法でクエリが機能すると仮定して、SQL ビューに切り替えてステートメント テキストを調べます。VBA コードを修正して、同じステートメントを生成します。または、クエリ デザイナー バージョンをパラメーター クエリにして保存し、その名前付きクエリを VBA から呼び出します。

于 2013-11-12T15:15:19.077 に答える
1

これを試しましたか?

strSQL = "Insert Into ProjectsT (CustomerName, ProjectName, ProjectDesc, DateOfPurchase, ProjectDueDate, EngineerDueDate, CutplanDueDate, HardwareDueDate, ProjectComplete, EngineerComplete, CutplanComplete, HardwareComplete, WorkOrder, MaterialSpecs, CutplanPattern, Milestones, " & _
strSQL = strSQL & "HardwareSpecs, SupplierName, ProjFilePath, DrawFilePath, DetailFilePath, CostFilePath, ProjectStartDate, EngineerStartDate, CutplanStartDate, HardwareStartDate, PackageReleasedToShop, EstAssemblyHours, CuttingDueDAte, TrakwareNumber) " & _
strSQL = strSQL & "Select CustomerName, ProjectName, ProjectDesc, DateOfPurchase, ProjectDueDate, EngineerDueDate, CutplanDueDate, HardwareDueDate, ProjectComplete, EngineerComplete, CutplanComplete, HardwareComplete, WorkOrder, MaterialSpecs, CutplanPattern, Milestones, " & _
strSQL = strSQL & "HardwareSpecs, SupplierName, ProjFilePath, DrawFilePath, DetailFilePath, CostFilePath, ProjectStartDate, EngineerStartDate, CutplanStartDate, HardwareStartDate, PackageReleasedToShop, EstAssemblyHours, CuttingDueDAte, TrakwareNumber " & _
strSQL = strSQL & "From ProjectsTempT Where ID=" & Me.txtID & ";"

チャンク全体を一度に処理できない場合があるため、分割する必要があります。それが機能しない場合は、いつでも追加クエリを作成し、DoCmd.OpenQuery を使用してコードで実行できます。

于 2013-11-12T15:16:23.123 に答える