希望の位置へフィールドを追加するには?
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
falseとtrue 0,1,-1 の意味が知りたいです
PowerPoint(パワーポイント)
-
6
ACCESS VBAでテーブル内の特定のフィールドを削除 .Fields.Delete (*")"
その他(プログラミング・Web制作)
-
7
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
8
ACCESSでフィールド名の変更(VBA)
Access(アクセス)
-
9
アクセスVBAのMe!と[ ]
Access(アクセス)
-
10
AccessVBAで作成したExcelファイルを削除する方法は?
Visual Basic(VBA)
-
11
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
12
ACCESSのフィールドの表示順が変更できない
その他(Microsoft Office)
-
13
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
14
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
15
AccessのDAOでフィールド名を配列に格納して・・・
Visual Basic(VBA)
-
16
ACCESS 複数のフォームから同一テーブル参照
Access(アクセス)
-
17
アクセスからエクセルのシートを追加して、名前をつける方法
Excel(エクセル)
-
18
「RunSQL」と「Execute」の違い
Access(アクセス)
-
19
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
20
Accessでレコードを別テーブルへコピーするには
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
希望の位置へフィールドを追加...
-
FindFirst複数条件
-
型 varchar から型 numeric へ...
-
データベースとウェブ(WWW)の共...
-
データベースの2GBって・・・?
-
データベースの最適化をマクロ...
-
Accessのレポートで「縦書き」...
-
ACCESS2019でのエラーメッセージ
-
クエリをキャンセルしたいので...
-
IPアドレスを数値に変換
-
CSEでDB接続しようとすると...
-
【ACCESS】複数のパソコンから...
-
データのインポートに失敗します。
-
キャッシュとバッファの違いは?
-
構文エラー:演算子がありませ...
-
結晶の分子構造
-
VBAかSQL?
-
エクセルでのテプララベル作成
-
Accessでタブ区切りのテキスト...
-
DB2で複数DBからSELECT等
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
希望の位置へフィールドを追加...
-
accessのvbaでの実行時エラーに...
-
FindFirst複数条件
-
[ACCESS/VBA]動的にSQL文を...
-
Access2000のVBAでコンパイルエ...
-
エクセルからアクセスにADO...
-
Access 余分な件数分データ削除...
-
ISBN検索システムの利用について
-
Accessでメッセージを表示しき...
-
DAO フィルターをかけたい エ...
-
データベースの変換
-
VBAのfor next で繰り返しが出...
-
型 varchar から型 numeric へ...
-
VB.netのADOってなんですか?
-
AndroidからのAccessデータベー...
-
データベースの最適化をマクロ...
-
データベースの2GBって・・・?
-
リスト形式の表とデータベース...
-
汎用カード型のデータベースソ...
-
構文エラー:演算子がありませ...
おすすめ情報