• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:希望の位置へフィールドを追加するには?)

希望の位置へフィールドを追加する方法

このQ&Aのポイント
  • Access2003を使用している場合、テーブルに希望の位置へフィールドを追加する方法についてのヒントをご紹介します。
  • メモ型をテキスト型へ変更する目的で、既存のフィールド名の最後に「2」を追記します。
  • 新たに名称と取扱品目のテキスト型のフィールドを追加するコード例を提供します。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

【つづき】 Private Function GetPositions(tdf As DAO.TableDef, sName As String) As String   Const sColumnOrder As String = "ColumnOrder"   On Error Resume Next   GetPositions = sName   GetPositions = GetPositions & " : " & tdf(sName).OrdinalPosition   GetPositions = GetPositions & " : " & tdf(sName).Properties(sColumnOrder) End Function Private Sub Sample2()   Dim db As DAO.Database   Dim tdf As DAO.TableDef   Dim sTmp As String   Set db = CurrentDb   Set tdf = db.TableDefs("顧客データ")   sTmp = ""   sTmp = sTmp & GetPositions(tdf, "名称2") & vbCrLf   sTmp = sTmp & GetPositions(tdf, "名称") & vbCrLf   sTmp = sTmp & GetPositions(tdf, "住所") & vbCrLf   sTmp = sTmp & GetPositions(tdf, "担当営業") & vbCrLf   sTmp = sTmp & GetPositions(tdf, "取扱品目2") & vbCrLf   sTmp = sTmp & GetPositions(tdf, "取扱品目") & vbCrLf   sTmp = sTmp & GetPositions(tdf, "備考") & vbCrLf   Set tdf = Nothing   Set db = Nothing   MsgBox sTmp End Sub Private Sub Sample3()   Dim db As DAO.Database   Dim tdf As DAO.TableDef   Set db = CurrentDb   Set tdf = db.TableDefs("顧客データ")   Call SetPosAndOrder(tdf, "名称2", 1)   Call SetPosAndOrder(tdf, "名称", 2)   Call SetPosAndOrder(tdf, "住所", 3)   Call SetPosAndOrder(tdf, "担当営業", 4)   Call SetPosAndOrder(tdf, "取扱品目2", 5)   Call SetPosAndOrder(tdf, "取扱品目", 6)   Call SetPosAndOrder(tdf, "備考", 7)   Set tdf = Nothing   Set db = Nothing   MsgBox "終了" End Sub ※ 確認される時には、 Sample2 で設定内容を随時確認しながら、いろいろいじってみてください。 (テスト用の環境で) ※ 2000文字って少ないですね。 (ご迷惑かと思いますが、3つにわかれてしまいました)

saiwai
質問者

お礼

お礼が遅くなり、申し訳ありませんでした。 実際には50フィールド近く処理をしないといけなかったので…希望通りの処理が出来、大変助かりました! あきらめかけていた所へズバリな回答、誠にありがとうございました!

その他の回答 (2)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

【つづき】 以下、標準モジュールへ記述------ Private Sub SetPosAndOrder(tdf As DAO.TableDef, sName As String, iPos As Integer)   Const sColumnOrder As String = "ColumnOrder"   On Error Resume Next   tdf(sName).OrdinalPosition = iPos - 1   tdf(sName).Properties(sColumnOrder) = 0   If (Err <> 0) Then     tdf(sName).Properties.Append _       tdf(sName).CreateProperty(sColumnOrder, dbInteger, 0)   End If End Sub Private Sub Sample1()   Dim db As DAO.Database   Dim tdf As DAO.TableDef   Set db = CurrentDb   Set tdf = db.TableDefs("顧客データ")   tdf("名称").Name = "名称2"   tdf("取扱品目").Name = "取扱品目2"   tdf.Fields.Append tdf.CreateField("名称", dbText, 255)   tdf.Fields.Append tdf.CreateField("取扱品目", dbText, 255) ' ★   tdf.Fields.Refresh   Set tdf = Nothing   db.TableDefs.Refresh   Set tdf = db.TableDefs("顧客データ")   Call SetPosAndOrder(tdf, "名称2", 1)   Call SetPosAndOrder(tdf, "名称", 2)   Call SetPosAndOrder(tdf, "住所", 3)   Call SetPosAndOrder(tdf, "担当営業", 4)   Call SetPosAndOrder(tdf, "取扱品目2", 5)   Call SetPosAndOrder(tdf, "取扱品目", 6)   Call SetPosAndOrder(tdf, "備考", 7)   Set tdf = Nothing   Set db = Nothing   MsgBox "終了" End Sub 【つづく】

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

解決されていましたでしょうか。 不要ならスルーしてください。 テーブルを直に開いた時の表示順とかになるのでしょうか。 興味もあったので実機で確認してみましたが、正解なのかは???です。 データシートでの表示順は 1)OrdinalPosition で 2)表示した状態で移動等した場合は、ColumnOrder が、使われているようです。 テーブルのデザインビューで順を変更した時には、 ColumnOrder は 0 となり、OrdinalPosition で順を決めているようです。 データシート表示で列(項目)順を変更した時には、 OrdinalPosition はそのままで、ColumnOrder で順を決めているようです。 なので、項目の追加時には、ColumnOrder を 0 にして OrdinalPosition を設定すればよいように思います。 以下を標準モジュールに記述し、 Sample1 内をクリック後「F5」で名変更/追加するものとなります。 Sample2 内をクリック後「F5」で OrdinalPosition / ColumnOrder を表示します。 Sample3 内をクリック後「F5」で再設定(初期化)するものになります。 2007の場合は、★以下4行は不要でしたが、 2003では名前を変更したフィールド2つへ設定ができていませんでした。 タイミングをずらす(?)意味で tdf を再取得してみました。 なお、   db.Execute "ALTER TABLE 顧客データ ADD COLUMN 名称 TEXT(255)" を   tdf.Fields.Append tdf.CreateField("名称", dbText, 255) に変更していますが、デフォルトで作成されるプロパティが同じなのかは 確認してません。(プロパティ数は同じみたいですが・・・) また、クエリ等で SELECT * とした時の順は、 OrdinalPosition が使われるようなことがヘルプに書いてあった様な・・・ 【つづく】

関連するQ&A

専門家に質問してみよう