• ベストアンサー

DAOでフィールドのデータ型を変更するには?

Visual Basic5.0(SP3)を使用しています。 DAO3.5を使用してAccess97で作成したテーブル(既にレコードが登録されているテーブル)のフィールドのデータ型を変更したいのですが、方法はありますか? 例えば、整数型(Integer)を長整数型(Long)にといったように...。 FieldオブジェクトのTypeプロパティにセットしようとしたのですが、読み取り専 用のためできません。 トピックで 「Visual Basic の中で、DAO の Type プロパティを使って、フィールドを Fields コレクションに追加する前に、データ型を設定できます。」 と書かれてあるのを見つけました。と言う事は変更できないのでしょうか?

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

  • ベストアンサー
  • oribeyaki
  • ベストアンサー率45% (18/40)
回答No.5

対象となるテーブルを再作成してよいのなら、 テーブル作成クエリーを使うとかなり楽です。 例) 元テーブル<TB1> 項目 :データ型 TEST1:Char TEST2:Integer TEST3:Binary 実行SQL SELECT TB1.TEST1, CSTR(TB1.TEST2) as TEST2, CINT(TB1.TEST3) as TEST3 INTO TB2 FROM TB1; 作成後テーブル<TB2> 項目 :データ型 TEST1:Char TEST2:Char Test3:Integer で、元のテーブルをDeleteすればOK 実際の運用を考えると、テーブル名を変えたくないので、 元テーブルの名前を変えてから、新テーブルを元の名前で作成するか、 作った後から名前を変えるかしてください。 ただし、一時的にせよmdbの中で同一データのテーブルが2つになるので、 データが大量にあるテーブルの場合には、この方法はあまりお勧めしません。 はずしてたらすいません。^^;

tomosuke09
質問者

お礼

ありがとうございます。 さっそく試します。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • tom777
  • ベストアンサー率77% (14/18)
回答No.4

以下のようにすればどうでしょうか? 1.対象のテーブルのTableDefオブジェクトよりフィールド  情報を取得する。 2.DatabaseオブジェクトからテーブルをDeleteする。 3.TableDefsオブジェクトを新規に作成する。 4.1の情報を設定する。(この時フィールド型を変更) 5.DatabaseオブジェクトにTableDefsオブジェクトをAppendする。 一度、試して見て下さい。

tomosuke09
質問者

お礼

ありがとうございます。 試してみます。

全文を見る
すると、全ての回答が全文表示されます。
  • tonari
  • ベストアンサー率30% (4/13)
回答No.3

すみません。質問をちゃんと読んでいませんでした。 オラクルでやってたことですので、DAOでできるのか分かりません。 失礼しました。(はずかしー)

全文を見る
すると、全ての回答が全文表示されます。
  • tonari
  • ベストアンサー率30% (4/13)
回答No.2

こんにちは。 SQL文ではダメでしょうか。(^^; 1.新テーブルの作成 create table 新テーブルの別名 (・・・); 2.データ移植 insert into 新テーブル別名 (select * from 元テーブル); 3.元テーブル削除 drop table 元テーブル; 4.データ移植 create table 新テーブル as (select * From 新テーブルの別名); または、 create table 新テーブル (・・・); insert into 新テーブル (select * from 新テーブルの別名); 的を得ていなかったらごめんなさい。m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • Kalen_F
  • ベストアンサー率25% (2/8)
回答No.1

Adoでも使うのですが、 String関数や、Cint関数を使ってみるのは、どうでしょう? 私自身、仕事でよく使ってますけど、例えばsqlでそのテーブルでのMax値を取ってきて、Cint関数で数値型にして欲しいデータを生成したりしてます。 関数に関しては、分かりますか?日付を生成したりする関数なんかもあるので、関数を知っていれば、便利ですよ! \(^o^)/

tomosuke09
質問者

補足

お返事ありがとうございます。 ちょっと質問の内容があいまいでしたので補足します。 ACCESSのテーブルのフィールド定義そのものを変更したいのです。 と言いますのは、仕事で開発したシステムで、当初、あるフィールドを「整数型」で定義していたのですが、後に「長整数型」の数値を格納しなくてはならなくなり、フィールド定義の変更が必要になってきました(システムを収めた客先全てでです)。 新しいテーブルを作成し、そこにデータを移行してもいいのですが、簡単にフィールド定義を変更できれば手間や、ミスを防げます。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • DAOでフィールドの値を変更する

    MDBファイルにDAOでアクセスし、フィールド(今回の場合Fields(4))の値をTextBox内の値に変更する方法がわかりません。 Dim WS As DAO.Workspace Dim DB As DAO.Database Dim RS As DAO.Recordset 'レコードを特定する処理 RS.Fields(4).Value = TextBox.Text RS.Update どのように直せばいいのでしょうか??

  • ACCESSデータベースにVB6(DAO)でフィールドを追加したい

    既存のACCESSデータベースのテーブルにVB6のDAOでフィールドを追加したいのですが、テーブル名.Fields.Append とかいうメソッドがあるようですが、使用方法がわからずフィールドを追加が出来ません。 具体的には、フィールド名"電話番号"で、文字型で固定文字数13を追加したいのです。 どうぞよろしくお願いします。

  • DAOでテーブルを作成

    DAOでテーブルを作成したいのですが 主キーにしてオートナンバー型にするにはどうすればいいですか? Sub MyTableCreate() Dim db As DAO.Database Dim tbdef As DAO.TableDef Dim Field1 As DAO.Field Dim Field2 As DAO.Field Set db = CurrentDb Set tbdef = db.CreateTableDef("T_test") Set Field1 = tbdef.CreateField("ID", dbInteger) Set Field2 = tbdef.CreateField("氏名", dbText, 20) tbdef.Fields.Append Field1 tbdef.Fields.Append Field2 db.TableDefs.Append tbdef db.Close: Set db = Nothing End Sub これで、IDフィールドを主キーにしつつ、 dbIntegerではなくオートナンバー型にしつつ、 主キーを付与する方法を教えてください。 DAOのType プロパティのヘルプを見たのですがありませんでした。 今回は http://www.accessclub.jp/dao/20.html を参考にしました。

  • Access :ALTER TABLE で作成した文字列フィールドがトリミングされない

    いつもお世話になっております。 Access2000を使用しております。 Accessで作成した、あるシステムのバージョンアップを行っております。 その際、複数のテーブルにフィールドを追加する移行プログラムを作成しております。 Dim DB As DAO.Database Set DB = OpenDatabase("外部DB.MDB") DB.Execute ("ALTER TABLE 既存テーブル ADD 追加フィールド CHAR(255)") DB.Close 'データベースを閉じる Set DB = Nothing 上記のようなプログラムを走らせたのですが、 作成された追加フィールドにデータを入力すると、 入力した値の後に指定サイズ分の空白文字ができてしまいます。 つまり、10文字入力した場合 255-10=245文字が空白として登録されてしまいます。 Unicode圧縮プロパティのせいかな、と思い、 Dim TBL As DAO.TableDef Dim FLD As DAO.Field Dim prUC As DAO.Property Set TBL = DB.TableDefs("既存テーブル") Set FLD = TBL.Fields("追加フィールド") Set prUC = FLD.Properties("UnicodeCompression") prUC.Value = True と、フィールド追加後にプロパティを変更してみたりもしたのですが、 やはり、空白が出てしまいます。 作成したフィールドの空白文字がセットされないようにするにはどのようなことを行えばよいのでしょうか。 ご教授のほど、宜しくお願い致します。

  • AccessVBAでフィールドのデータ型(フィールドサイズ)を変更する方法

    Access2000でテーブルを属性を変更しようとVBAで四苦八苦しております。 あるテーブルのフィールドのデータ型のフィールドサイズが「十進型」に なっています。 そのフィールドサイズを「倍精度浮動小数点型」に変更するVBAロジックがわかりません。 お分かりの方がいらっしゃいましたらどうかご教示願います。

  • access フィールドのサイズ(文字数)変更

    とても単純な質問で申し訳ないのですが、 Access2000でつくったテーブルにデータを入力しようとしたら、 「指定されたデータ量がフィールドサイズを超えています。」と表示されます。文字数を変更すればよいことですが、デザインビューでプロパティをみても文字数を変更するところがありません。(フィールドのサイズは変更できるのですが)。どのようにすればよいか教えていただけますか?

  • フィールドの入れ替えはできますか?

    PostgreSQL 8.1.4を使用しています。 仕様の変更によりテーブルへフィールドの追加を行なったのですが、このフィールドの位置を変更する事はできるのでしょうか。 DDL文を整えて作った空のテーブルへデータをリストアしようとしましたがうまくできませんでした。 よろしくお願いします。

  • AccessのDAOでフィールド名を配列に格納して・・・

    Access2000のDAOで下記のようなコードで複写元テーブルから複写先テーブルにデータを追加するとします。 Set Rs1 = Db.OpenRecordset("複写元", dbOpenTable) Set Rs2 = Db.OpenRecordset("複写先", dbOpenTable) Do Until Rs1.EOF Rs2.AddNew Rs2!FL1 = Rs1!名前 Rs2!FL2= Rs1!性別 Rs2!FL3= Rs1!郵便番号 Rs2!FL4= Rs1!住所    ・    ・ Rs2! FL50= Rs1! 50番目 Rs2.Update Rs1.MoveNext Loop 複写元のフィールドが50フィールドもあると、いちいちRs1!名前とかRs1!性別とか記述するのが大変ですし、ものすごく長いコードになります。そこで、配列にしてやったらどうだろうかとこんなことをしてみましたがだめでした。 Dim I Dim FieldsName FieldsName=Array("名前","性別",・・・"50番目")            ・            ・ Do Until Rs1.EOF Rs2.AddNew For I=0 To 49 Rs2!フィールド(I) = Rs1!FieldsName(I) Next Rs2.Update Rs1.MoveNext Loop じゃあTebleDifのTd.Fields().Nameを使って・・・・やっぱり失敗しました。 For I=0 To 49 Rs2!フィールド(I) = Rs1!Td.Fields(I).Name Next やりたいこと分かっていただけますでしょうか?要するにフィールド名を配列の様なもので格納しておいて、レコードの追加時に50回ループさせてRS2のフィールドにいれたいのです。何か良い方法は無いでしょうか。

  • DAOでACCESSをREADしてEXCELに表示

    お世話になります。 初心者ですが、DAOを使ってACCESSのテーブル(名称”テーブル1”)を全READして全データをEXCELに表示するところまでは出来ました。 (やりたいこと1) 今度は下記の様に"ボタン1"をクリックされたら、Accessに下記の様なデータ(今は"taro"という固定でデータですが将来的には可変的する予定です)を追加したいのですが、既にAccess側に社員番号と氏名が同じレコードがあった場合には追加させないロジックを追加したいのです (やりたいこと2) "ボタン1"をクリックした時に、追加される"taro"のデータはAccessの"テーブル1"の一番下に追加されるようにしたいです。現在は中途半端にテーブル1の真ん中あたりに追加されます。 上記2点につきまして、どなたかご教授いただけませんでしょうか? よろしくお願い致します。 環境 Windows XP SP3 Excel2003 Sub ボタン1_Click() Dim rst As DAO.Recordset Dim fld As DAO.Field Dim sht As Worksheet Dim rcnt As Long, ccnt As Long '行カウンタ、列カウンタ ' On Error GoTo Err_DAOSample If DBE Is Nothing Then Set DBE = New DAO.DBEngine End If If DB Is Nothing Then Set DB = DBE.OpenDatabase("C:\TEST.mdb") End If Set rst = DB.OpenRecordset("SELECT * FROM テーブル1", dbOpenDynaset) Set sht = ActiveSheet ' レコード追加 With rst .AddNew .Fields("社員番号") = "00000010" .Fields("氏名") = "taro" .Fields("所属") = "管理部" .Fields("年齢") = 19 .Update End With End Sub

  • レプリケーションしているテーブルに対する列追加やフィールドタイプの変更

    お世話になります。 レプリケーションしているテーブルに対して、列(フィールド)の追加や フィールドタイプを変更しようとすると、レプリケーション絡みのエラー が発生します。 テーブル 'xxxテーブル' - テーブルを修正できません。 ODBC エラー : [Microsoft][ODBC SQL Server Driver][SQL Server]レプリケー ションで使用されているので、テーブル 'dbo.xxxテーブル' を 削除 できません。 その都度、当該テーブルを使用しているパブリケーションをいったん削除し、 列の追加やフィールドタイプの変更後、再度パブリケーションを作成して いる次第です。 パブリケーションを削除せず列を追加したり、フィールドタイプを変更する方法 はございますでしょうか。ご教授願います。

プリンターが使えない
このQ&Aのポイント
  • デバイスとプリンターの設定を選択の上、使用したいプリンターが未指定の為、通常使用に変更したいがセット出来ず
  • パソコンもしくはスマートフォンのOSは何ですか?どのように接続されていますか?Wi-Fiルーターの機種名は何ですか?関連するソフト・アプリがあれば教えてください。
  • デバイスとプリンターの設定で使用したいプリンターが未指定のため、通常使用に変更したいがセットできません。パソコンもしくはスマートフォンのOSと接続方法、Wi-Fiルーターの機種名、関連するソフト・アプリの有無について教えてください。
回答を見る

専門家に質問してみよう