
希望の位置へフィールドを追加するには?
WinXP、Access2003を使っております。
テーブルに希望の位置へフィールドを新たに追加する為にはどうすれば良いでしょうか?
テーブル名:顧客データ
フィールド:
名称(メモ型)
住所(テキスト型)
担当営業(テキスト型)
取扱品目(メモ型)
備考(テキスト型)
1.メモ型をテキスト型へ変更するのが目的の為、
既存の「名称」、「取扱品目」のフィールド名の最後に「2」を追記します。
2.名称と取扱品目のテキスト型のフィールドを新たに追加します。
Private Subコマンド1_Click()
Application.CurrentDb.TableDefs("顧客データ").Fileds("名称").Name="名称2"
Application.CurrentDb.TableDefs("顧客データ").Fileds("取扱品目").Name="取扱品目2"
Dim db As Database
Set db = CurrentDb
db.Execute "ALTER TABLE 顧客データ ADD COLUMN 名称 TEXT(255)"
db.Execute "ALTER TABLE 顧客データ ADD COLUMN 取扱品目 TEXT(255)"
db.close
Set db = Nothing
MsgBox "終了"
End Sub
上記だと新しいフィールドが最後(一番下)に出来てしまします…希望の形は
名称2(メモ型)
名称(テキスト型)
住所(テキスト型)
担当営業(テキスト型)
取扱品目2(メモ型)
取扱品目(テキスト型)
備考(テキスト型)
以上、ヒント等ご指南よろしくお願いいたします。
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つにわかれてしまいました)
お礼が遅くなり、申し訳ありませんでした。
実際には50フィールド近く処理をしないといけなかったので…希望通りの処理が出来、大変助かりました!
あきらめかけていた所へズバリな回答、誠にありがとうございました!
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
【つづく】
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が見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
位置を指定してフィールドを追加する
SQL Server
-
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
-
4
アクセス VBAで列の入れ替え データシートビュー
その他(Microsoft Office)
-
5
クエリのデータをテーブルに入れたい
Access(アクセス)
-
6
Access コンボボックスの値をクリアしたい。
PowerPoint(パワーポイント)
-
7
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
8
列を移動させるvbaコードを教えてください。
Access(アクセス)
-
9
アクセスのfilter、複数条件の記述方法を教えてください。
Access(アクセス)
-
10
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
11
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
12
AccessのテーブルにVBAでフィールドを追加したい
Access(アクセス)
-
13
アクセスからエクセルのシートを追加して、名前をつける方法
Excel(エクセル)
-
14
INSERT INTO ステートメントに認識できないフィールド
その他(データベース)
-
15
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
16
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
17
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
18
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
19
VBとアクセスでSQL文に変数を使いたいのですが
Visual Basic(VBA)
-
20
リストボックス(複数選択しない)の場合の選択解除について
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
希望の位置へフィールドを追加...
-
初心者です。Accessを使って、...
-
別のACCESSデータベースのテー...
-
どういう専門学校へいくべきで...
-
SQLって何のためにあるのでしょ...
-
Access 外部データ インポー...
-
AndroidからのAccessデータベー...
-
OracleからSQLServer参照時の不...
-
型 varchar から型 numeric へ...
-
エクセルのフォームについて(...
-
データベースの最適化をマクロ...
-
スタライズとは、どういう意味...
-
マクロでデータベースの最適化...
-
CSVファイルの重複チェック
-
クラリスワークスみたいなDBって
-
Developer2000って何?(^^;
-
エクセルから、パワーポイント...
-
データベースの2GBって・・・?
-
sqlite2とsqlite3の違いについて
-
IPアドレスを数値に変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FindFirst複数条件
-
パススルークエリの使い方について
-
Access2000のVBAでコンパイルエ...
-
Access 余分な件数分データ削除...
-
DAO フィルターをかけたい エ...
-
[ACCESS/VBA]動的にSQL文を...
-
型 varchar から型 numeric へ...
-
JavaとOracle Javaって何が違う...
-
AndroidからのAccessデータベー...
-
データベースの最適化をマクロ...
-
データベースの2GBって・・・?
-
オラクルのLONG RAW型のテーブ...
-
ハイフン無しの電話番号データ...
-
スタライズとは、どういう意味...
-
クエリをキャンセルしたいので...
-
ODBC経由の処理が遅い
-
DB2 UDBって?
-
エクセルのフォームについて(...
-
listener.logが肥大化
-
ACCESSで条件付き書式の設定方法
おすすめ情報