2016-05-04 4 views
4

マイコード:実行時エラー2465 ALTER列で

Private Sub UpdateTables_Click() 

    DoCmd.SetWarnings False 
    MsgBox "Please Wait for the 'Done' message to appear" 
    DoCmd.RunMacro "Update_Tables" 
    DoCmd.RunSQL "ALTER TABLE " & [tablename] & " ALTER COLUMN StartDateAll DATE;" 
    MsgBox "Done" 
    DoCmd.SetWarnings True 

End Sub 

DoCmd.RunSQLラインは、デバッグウィンドウで強調表示されたものです。私はt_tablenameとして自分のテーブル名で始まり、構文エラーを受け取りました。私が ""が問題になるかもしれないことを読んだ後、私は "t"を落としました。それは私の構文エラーを取り除きましたが、今私はこの2465エラーを受けています。私の列はもともと「Start_Date_All」だったので、「StartDateAll」に名前を変更しました

私は、さまざまな部署の従業員の開始日を組み合わせた複数のメイクテーブルクエリを持っています。上記のコードを実行して、テーブル作成クエリを実行し、正常に動作するマクロを実行するフォーム上のボタンがありますが、この変更されたテーブルパート(テスト用に1つだけを含めたもの)に固執します。

私は列の名前のスペルをチェックして、二重引用符で試してみました。また、 "& StartDateAll &"で試してみました...毎回2465エラーが発生しました。

答えて

4

あなたはアクセスが、それはフィールドを見つけることができません文句を言ったところです:

DoCmd.RunSQL "ALTER TABLE " & [tablename] & " ALTER COLUMN StartDateAll DATE;" 

あり問題が解決しないことがあり、より良いアプローチは、ですが、少なくとも、あなたに良いチャンスを与える必要がありますそれが起こる理由を理解するために:

Dim strTable As String 
Dim strAlter As String 
strTable = "t_tablename" 
DoCmd.SetWarnings True 
strAlter = "ALTER TABLE [" & strTable & "] ALTER COLUMN StartDateAll DATE;" 
Debug.Print strAlter '<- inspect in Immediate window; Ctrl+g will take you there 
CurrentProject.Connection.Execute strAlter 
MsgBox "Done" 

を私はt_tablenameでテキストフィールドとしてStartDateAllとアクセス2010年にそのコードをテストしました。コードがエラーなく実行された後、フィールドがText/Date/Timeデータ型に変更されたことが確認されました。

キーポイントがあります。

  1. 自身にあなたが実行するDBエンジンを求めている完成ALTER TABLE声明検討する機会与える - >Debug.Print strAlterを。 IOW、それがあなたが意図しているものであることを確認してください。
  2. テーブル名はt_tablenameです。ブラケットは不要です。しかし、名前をかっこで囲みたい場合は、それらの括弧を文字列セグメント内に移動します。
  3. オフにすると、SetWarningsは情報を表示しません。トラブルシューティングの際には、最後に得られる情報のほうが得られます。 ALTER TABLEを実行するときは、SetWarningsをオンにしてください。

AccessがまだStartDateAllフィールドを見つけられない場合は、Accessが考えるフィールドの名前を再確認してください。イミディエイトウィンドウセッションの例を次に示します。

set db = currentdb 
for each fld in db.TableDefs("t_tablename").Fields : ? fld.name : next 
id 
StartDateAll 
+0

私はこれを今すぐ試しています。私を助けるために時間をとってくれてありがとう。私はすぐにそれがどのようになったかを教えてあげます。 –

+0

成功!! ...それは私のテーブル作成クエリがまだStart_Date_All(duh)として列名を渡していたことが判明しました。テーブルの列名を変更しましたが、コードを実行すると、それをStart_Date_Allに戻しました。私がmakeテーブルのクエリを修正すると、これは完全にうまくいった。手伝ってくれてありがとう、頭がおかしくなった! –