
希望の位置へフィールドを追加するには?
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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Accessテキストボックス内に2つのフィールドの値を比較して大きい方の値を表示させる方法 1 2022/09/09 10:50
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
このQ&Aを見た人はこんなQ&Aも見ています
-
位置を指定してフィールドを追加する
SQL Server
-
アクセス VBAで列の入れ替え データシートビュー
その他(Microsoft Office)
-
列を移動させるvbaコードを教えてください。
Access(アクセス)
-
-
4
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
5
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
6
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
7
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
8
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
9
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
10
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
11
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
-
12
ACCESSデータベースにVB6(DAO)でフィールドを追加したい
Visual Basic(VBA)
-
13
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
14
ACCESSのフィールドの表示順が変更できない
その他(Microsoft Office)
-
15
ACCESS VBAでテーブル内の特定のフィールドを削除 .Fields.Delete (*")"
その他(プログラミング・Web制作)
-
16
ACCESS クエリで1から順番に番号を表示したい
Access(アクセス)
-
17
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
18
アクセスのfilter、複数条件の記述方法を教えてください。
Access(アクセス)
-
19
AccessのテーブルにVBAでフィールドを追加したい
Access(アクセス)
-
20
ACCESS(VBA)について
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースの変換
-
CGIからのSQLSERVER接続について
-
データベースの最適化をマクロ...
-
VPNでデータベースに接続した時...
-
sqlite2とsqlite3の違いについて
-
詳細な住所データベース
-
データベースの2GBって・・・?
-
DB2で複数DBからSELECT等
-
SQL Server にファイルを登録、...
-
accessって何?
-
ネットで個人情報が公開されて...
-
処理速度
-
データーベースソフトについて
-
MySQL データ ソース (ODBC)接...
-
RBDの反対語は?□DB??
-
Accessの最適化について
-
データベースに接続したままの...
-
Win用CD-RをMacで読み込...
-
SQLとORACLEの違いを教えてくだ...
-
Oracle で文字列からタイムスリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DAO フィルターをかけたい エ...
-
Access2000のVBAでコンパイルエ...
-
希望の位置へフィールドを追加...
-
ACCESS2000でテーブルをVBAから...
-
エクセルからアクセスにADO...
-
列名が無効です
-
FindFirst複数条件
-
データベースの変換
-
accessのvbaでの実行時エラーに...
-
パススルークエリの使い方について
-
三枝夕夏って?
-
sqlite3の動作が?xamppでは問...
-
型 varchar から型 numeric へ...
-
キャッシュとバッファの違いは?
-
エクセルのフォームについて(...
-
AndroidからのAccessデータベー...
-
データベースの最適化をマクロ...
-
クエリをキャンセルしたいので...
-
データベースの2GBって・・・?
-
listener.logが肥大化
おすすめ情報