• ベストアンサー

ACCESSのVBAなのですが・・・・

SQLを使って、新たにテーブルにフィールドを追加したのですが(Yes/No型で)テーブルの表示が0とー1になってしまいます。これを□の形式にしたいのですが(書式をYes/No型に変換したい)どうすればよいでしょうか? ちなみにSQLは ALTER TABLE aaaa ADD bb BIT で追加しました。これだとテーブル表示が-1 or 0です。 困ってます。よろしくお願いします。

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

  • ベストアンサー
  • yoisho
  • ベストアンサー率64% (331/516)
回答No.1

テーブルのフィールドをチェックボックス型にするには、"DisplayControl/表示コントロール" プロパティを設定してやる必要があり、これをVBAで設定するには、DAO(私はADOについては詳しくありませんので、DAOでご容赦ください。)を使って行います。 (DAOを使いますので、はじめにモジュールウィンドウを開いて、ツール→参照設定で、 Microsoft DAO 3.* Object Library がチェックされていないようでしたら、チェックしておいてください。) 以下に、コードを示します。 (せっかくDAOを使いますので、フィールドの追加も ALTER TABLE ではなく、DAOの Append fld で行うようにしています。) ‘各変数を宣言 Dim dbs As DAO.Database, tdf As DAO.TableDef, fld As DAO.Field, prp As DAO.Property ‘変数dbs を現在のデータベースに設定 Set dbs = CurrentDb ‘変数tdf を ”aaaa” テーブルに設定 Set tdf = dbs.TableDefs!aaaa ‘変数fld をブール型のフィールド “bb” とし、”aaaa” テーブルに追加 Set fld = tdf.CreateField("bb", dbBoolean) tdf.Fields.Append fld ‘変数prp を整数型のプロパティ “DisplayControl” とし、”bb” フィールドに追加 Set prp = fld.CreateProperty("DisplayControl", dbInteger, acCheckBox) Call fld.Properties.Append(prp) ‘各変数のメモリー領域を開放 Set prp = Nothing Set fld = Nothing Set tdf = Nothing Set dbs = Nothing ちなみに、DisplayControl プロパティは、明示的に Properties コレクションに追加してやらないとVBAから参照できません(HELPでは、Field オブジェクトのプロパティには載っていません。)ので、Set prp =fld.~ 以下の2行で、追加をしています。

関連するQ&A

  • Access2003_ALTER TABLE構文

    Accessのテーブルにフィールドを追加したくSQLで命令文を書いています。 1.[T_テーブル1]というテーブルに[フィールドA]というフィールドを データ型:数値型 フィールドサイズ:単精度浮動小数点型 小数点以下表示桁数:2位まで表示 で追加したいです。 →ALTER TABLE T_テーブル1 ADD COLUMN フィールドA FLOAT4 これに少数点以下桁数を設定するにはどう書けばよろしいでしょうか? 2.[T_テーブル1]というテーブルに[フィールドB]というフィールドを データ型:数値型 フィールドサイズ:長整数型 で追加しました。 →ALTER TABLE T_テーブル1 ADD COLUMN フィールドA INT 「説明」の箇所に説明書きも入れたいのですがここでの設定は可能でしょうか? 以上2点につきましてご指導頂きたくよろしくお願い致します。

  • ACCESS(VBA)について

    リンクされているテーブルに新しいフィールドを追加しようとすると、エラーが出て追加できません。 プログラムから(ALTER TABLE ~・・・)追加したいのですがどうすればよいでしょうか?リンクをはずすしかないでしょうか?

  • SQLでフィールドの順番を変更したい

    お世話になっております。 ORACLEを使用しております。 既存のテーブルに新しいフィールドをSQL文にて ALTER TABLE TEST_MST ADD TEST_CD VARCHAR2(2); と言う風に、SQL*PLUSにて追加いたしました。 これを参照しますと、 追加したフィールドがテーブルの一番最後のフィールドに 追加されているのですが、 フィールドの順番を変更したいと考えております。 SQL文にて何か方法はございませんでしょうか。 ご返答を宜しくお願い致します。

  • 重複を許すキーの構文がわかりません。

    データベース自体はPostgreSQLを使っています。そして、アクセス2003を使って、テーブルリンクで閲覧しています。 あるフィールドに検索が早くなるようにキーを設けたいのですが、 重複を許すキーの構文がわかりません。 PRIMARY KEY, UNIQUEの設定はわかるのですが、 どのように記述すればよいのでしょうか? 以下、アクセスのプロパティです。 インデックス ●いいえ デフォルト、無指定 ●はい(重複あり)[***** ここの部分のSQLが知りたい *****] ALTER TABLE テーブル名 ADD ???????? (フィールド); ●はい(重複なし)UNIQUE もしくは値要求混みのPRIMARY KEY ALTER TABLE テーブル名 ADD UNIQUE (フィールド); ALTER TABLE テーブル名 ADD PRIMARY KEY (フィールド);

  • ACCESSのSQLクエリについて

    AccessでのSQLについて教えてください。 リンクテーブルAから新しいテーブルAを作成し、その新テーブルにオートナンバー型のフィールドを追加して、そのフィールドに主キーを設定する、という作業をしたいと思っています。 以下の3つの構文のクエリをそれぞれ作って出来たのですが、この操作を一度に行いたくて、以下のように1つのクエリに入れると、「FROM句の構文エラーです」と出てきてしまいます。 全くの素人で仕組みは全然理解できてないので、ちょっと調べたのですがよくわかりません。上手くいく入力方法を教えていただけると嬉しいです。よろしくお願いいたします。 SELECT Sheet1A.F1, Sheet1A.F2, Sheet1A.F3, Sheet1A.F4, Sheet1A.F9 INTO A FROM Sheet1A ALTER TABLE A ADD ID COUNTER ALTER TABLE A ADD PRIMARY KEY (ID);

  • VBで使用するAccessのSQL(INSERT文)

    VBで使用するAccessのSQL(INSERT文)ですが、 下記のようなSQLはどのようにすれば良いのでしょうか? テーブル:A フィールド:B(Text型),C(Yes/No型) 作成したいSQL文: Textに空白、Yes/NoはTrueを入れ、 既存のフィールド内の一番下に 作成(追加)する。

  • SQL Server(MSDE2000) : ALTER TABLE

    SQL Server(MSDE2000) : ALTER TABLE した項目に対し、直後に UPDATE で値をセットできない 既存のテーブルを仕様変更するため、列を追加し、初期値で埋める SQL 文を書こうとしていますが、うまく動かず、エラーとなってしまい、原因が判らず困っています。 サンプル SQL 文: ------ CREATE TABLE TEST_TABLE ( TEST_FIELD1 SMALLINT, TEST_FIELD2 SMALLINT) INSERT INTO TEST_TABLE VALUES( 1, 2 ) ALTER TABLE TEST_TABLE ADD TEST_FIELD3 SMALLINT UPDATE TEST_TABLE SET TEST_FIELD3 = 3 ------ ※テスト毎に、必ず DROP TABLE TEST_TABLE されている事が前提です。 上記 SQL 文のうち、1行目~3行目までを抜粋して実行すると、ちゃんと CREATE TABLE され、INSERT され、ALTER TABLE される事を確認しました。 ところが、4行目までを一気に実行しようとすると、 ------ SQL実行中に以下のエラーが発生しました。 エラーコード:207 [Microsoft][ODBC SQL Server Driver][SQL Server]列名 'TEST_FIELD3' は無効です。 SQLステータス:S0022 ------ となってしまい、UPDATE で初期値を埋める事ができません。 しかも、UPDATE に失敗するどころか、2行目の INSERT から以降が結果に反映されなくなるという状況に陥ってしまいます。 また、既存のテーブルの仕様変更が目的なので、その状況に近づけるために、まず、 ------ CREATE TABLE TEST_TABLE ( TEST_FIELD1 SMALLINT, TEST_FIELD2 SMALLINT) INSERT INTO TEST_TABLE VALUES( 1, 2 ) ------ を実行し、既存のテーブル(とレコード内容)が存在する状態を作り出された事を、ツール等で確認してから、 ------ ALTER TABLE TEST_TABLE ADD TEST_FIELD3 SMALLINT UPDATE TEST_TABLE SET TEST_FIELD3 = 3 ------ の2行を実行してみると、やはり UPDATE は失敗し、前述と同じエラーが発生します。 またこの場合、ALTER TABLE の実行結果も反映されていません。(つまり、TEST_FIELD3 が列追加されていない) もちろん、ALTER TABLE だけを実行した場合には、ちゃんと列は追加されます。 その後に、UPDATE を実行すれば、ちゃんと追加列に初期値がセットされます。 どうやら、「一回の SQL 文の実行の中で、ALTER TABLE によって新設した列に対しては、UPDATE などでのアクセスはすぐにはできない」のではないか?という状況のようなのです。一回の SQL 文の実行の中において、何らかのトランザクション動作っぽい挙動を感じます。 つまり、ALTER TABLE で追加された列は、その時点ではまだ完全にシステムに認知されていないため、直後の UPDATE 文で認識できずに失敗するのではないか?と。そして、そこでのエラー発生が、ロールバック的に実行した処理をキャンセルしてしまうため、結果として、ALTER TABLE が実行されなかった事になったり、INSERT が実行されなかった事になったりしているのではないか?と思う次第です。 考えられる回避策としては、SQL 文を別々に作成し、個別に実行すれば良いだけの事なのですが、できれば、SQL 文一つにまとめたいと考えています。 どなたか、こういった現象に対する原因・理由の説明、或いは回避策など、何か情報をお持ちの方はいらっしゃいませんでしょうか? 宜しくお願いします。

  • MYSQLのフィールドにユニークキーを設定する。

    すでに作ってしまったテーブルにユニークキーを付けたいと考えています。最悪の場合、新しくカラムを作っての追加でもかまわないのですが、いろいろ試してもエラーが返されてしまいます。 codeというカラムにユニークキーを設定したいのですが、 alter table テーブル名 modify unique code; alter table テーブル名 add unique code2; alter table テーブル名 modify code unique; alter table テーブル名 add code2 unique; alter table テーブル名 modify code test unique; alter table テーブル名 add code2 test unique; alter table テーブル名 modify unique code test; alter table テーブル名 add unique code2 test; alter table テーブル名 modify (code unique); alter table テーブル名 add (code2 unique); alter table テーブル名 modify (code text unique); alter table テーブル名 add (code2 text unique); など、思いつく限り試し、グーグルで調べる限り調べたのですが、出てきたものをためしてもダメでした。 テーブルを作成した後、カラムにユニークキーを設定した経験のある方、どのように変更をしたのでしょうか?

    • ベストアンサー
    • MySQL
  • ACCESS2002のupdateの副問合せについて教えてください

    ひとつのテーブルの情報を、もうひとつのテーブルに反映させられなくて困っています。 おそらくupdateの副問合せの書き方が悪いと思うのですが、どこが悪いのか分かりません。 access2002 VBAで、同じフィールド構成を持つ2つのテーブルがあります。 TABLE_A -------------------------- |P_Key | Field1 | Fieled2| +------+--------+--------+ |111111|AAAA|BBBB| |222222|CCCC|DDDD| |333333|EEEE|FFFF| |444444|GGGG|HHHH| -------------------------- TABLE_B -------------------------- |P_Key | Field1 | Fieled2| +------+--------+--------+ |222222|ZZZZ|YYYY| |333333|XXXX|WWWW| -------------------------- このうち、ひとつのテーブル(TABLE_A)のField1 と Field2 の値を もうひとつのテーブル(TABLE_B)のField1 と Field2 の値に変更したいのです。 条件は、P_Keyが同一のレコード同士です。 実行結果は以下のようにしたいのです。 TABLE_A (TABLE_Bは更新しないため変更無し) -------------------------- |P_Key | Field1 | Fieled2| +------+--------+--------+ |111111|AAAA|BBBB| |222222|ZZZZ|YYYY| |333333|XXXX|WWWW| |444444|GGGG|HHHH| -------------------------- VBAでupdateのSQLを書いているのですが、うまくいきません。 以下のSQLではDMLが正しくないのエラーになってしまいます。 (すみません。正式なエラーメッセージは失念しました) update TABLE_A set( TABLE_A.Field1,TABLE_A.Field2 ) = ( select TABLE_B.Field1,TABLE_B.Field2 from TABLE_B where TABLE_A.P_Key = TABLE_B.P_Key ); テーブル名に別名をつけたりしても同様にDMLが正しくないと怒られます。 質問は、以下の2つです。 1.上記更新は、ひとつのupdateのSQLで可能でしょうか?   それともTABLE_B を Selectでまわして、TABLE_Aのレコードを一行ずつ   更新していく必要があるのでしょうか? 2.1.が可能の場合、私の書いたSQLについてご助言をいただけませんでしょうか? もしご存知の方おられましたら、ご教示をお願いできませんでしょうか? 以上です

  • ACCESS2003クエリの結合した表示形式が

    ACCESS2003でクエリを作成しました。各テーブルのフィールドを結合したのですが 表示形式が思ったようになりませんでした。 【Aテーブル】 フィールド:学部NO データ型:数値型 書式:00 【Bテーブル】 フィールド:学科NO データ型:数値型 書式:00 【ABクエリ】 フィールド:学籍NO:[Aテーブル]![学部NO]&[Bテーブル]![学科NO] 【ABクエリ】の結果が数字が4桁表示されません。 (例) 0101 と表示してほしいのですが、   11  と表示されます。 各テーブルでは、01と表示されるのですが・・・。 宜しくお願いします。