• ベストアンサー

MS Accessのコンパイルエラー

大変初心者的質問ですいません。是非3点ほど回答をお願い致します。 【Q1】 Access1.0 から Access97を経由させAccess2000 にシステムをコンバートしたのですが、Access97からコンバートした際にモジュールでコンパイルエラーが発生しました。 「コンパイルエラー ユーザ定義型は定義されていません。」 Dim TB1 As Table のTableのところなのですが、確かにTableなんて候補にあがりません。(TableDefとかならありますが…) ネットや過去の質問を検索し、参照設定のMicrosoft DAO 3.6 Object Libraryにチェックが入ってる事は確認しました。しかしそれ以上どうすれば良いのか分からず困りきっています。どのように対処すれば良いのでしょうか? 【Q2】 それと別の文献で、DAOとADOを明確にする為にDAO.Databaseと修飾子をつけるべきとありました。修飾子をつけるべきものはDatebaseの他に何があるのでしょうか?(代表的な物でも) 【Q3】 修飾子を付けなかった場合どのような障害が予想されますか? よろしくお願いします。

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

  • ベストアンサー
  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.3

> どうやらTableは現在のRecordsetである模様。と理解して良いのでしょうか? そうですね。 Dim SW As Integer Dim DB As DAO.Database Dim TB1 As DAO.Recordset Set DB = CurrentDb() Set TB1 = DB.OpenRecordset("INSPECTION_RECORD") SW = 0 If Dir("A:\KAKOJ.TXT") = "" Then   SW = 1 End If If Not TB1.EOF Then   TB1.MoveFirst   Do Until TB1.EOF     TB1.Delete     TB1.MoveNext   Loop End If M_kakojchk = SW TB1.Close DB.Close 現在では、Access1.0の情報が載っている書籍を探し出すことは困難でしょうから > 今Access2.0のヘルプを見ていましたら、「Ver2.0対応コードへの変換例」 を参考にするしかないと思います。 Access2.0 からなら、 [ACC2002] データベースの変換について確認されている問題の一覧 http://support.microsoft.com/default.aspx?scid=kb;ja;821728&Product=accJPN こちらにも少しだけ載ってはいますけど。 > 【Q2】 Database Recordset Field など。 ADOなどと同じものが存在するものはすべてつけるようにすべきですね。 > 【Q3】 環境により、コンパイルエラーが発生します。 (実行時エラーだったかな??) 参照設定で、DAOより上位にADOがある場合は。

参考URL:
http://support.microsoft.com/default.aspx?scid=kb;ja;821728&Product=accJPN
rvr3958
質問者

お礼

再びの回答ありがとうございます。 まずはTable→Recordsetに変更し、代表的なDatabaseやRecordset,Fieldに修飾子を付ける事から始めてみます。

rvr3958
質問者

補足

なんとなく変換作業順調です。 変換するのもTable→Recordsetと、LeftB/RightB/MidBぐらいでした。この調子で頑張ってみます。ありがとうございました!

その他の回答 (2)

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.2

Access Ver1.0 のことを知っている人じゃないと的確な回答は 難しいかと。。 実際に、TB1 を使っている部分のコードも提示していただければ 分かるかもしれませんが。。。

rvr3958
質問者

お礼

回答ありがとうございます。 今Access2.0のヘルプを見ていましたら、「Ver2.0対応コードへの変換例」として次のような記述がありました。 ------------------------------- テーブルを開く Ver 例 1.1 Dim MyTable As Table   Set MyTable = MyDB.OpenTable("書籍", False) 2.0 Dim MyTable As Recordset   Set MyTable = MyDB.OpenRecordset("書籍", DB_OPEN_TABLE) ------------------------------- どうやらTableは現在のRecordsetである模様。と理解して良いのでしょうか?

rvr3958
質問者

補足

字数の都合上、一部だけ…。 ---------------------------------- Dim SW As Integer Set DB = CurrentDb() Set TB1 = DB.OpenTable("INSPECTION_RECORD") SW = 0 If Dir("A:\KAKOJ.TXT") = "" Then   SW = 1 End If If Not TB1.EOF Then   TB1.MoveFirst   Do Until TB1.EOF     TB1.Delete     TB1.MoveNext   Loop End If M_kakojchk = SW TB1.Close DB.Close ---------------------------------- とか、 ---------------------------------- TB1![PRIMARY_PRODUCTS1] = TB1![PRIMARY_PRODUCTS1] + JYURYO ---------------------------------- とか?何かお役に立てば良いのですが…。

noname#7099
noname#7099
回答No.1

うちにあるACCESS97からACCESS2000に変換したmdbには以下が、参照可能なライブラリファイルとなっていました。 Visual Basic For Applications Microsoft Access 9.0 Object Library Microsoft DAO 3.6 Object Library Microsoft Access BarCode Control 7.0( バーコードコントロールは要らないとは思いますが) OLE Automation Microsoft Visual Basic for Applications Extensibility 5.3 うちはこの順番ですが、バージョン等違うかもしれません。 access97時点ですでにTableDefのようですね。 ADOを参照しないなら、databaseに修飾子をつけなくても区別しなくても動くのではないでしょうか? 本1冊買ったほうがいいと思います。 (適切な本っていうのが見つかるかどうかわかりませんが、VBAのリファレンスブックは買いなおす必要があります。) コンパイルエラー、山盛り出ます。 コマンドもかなり違います。 フィルタなども、97と2000では、コマンドを書き換えないと動かないものも多くあります。 変換後にちゃんと動くか動作確認が必要です。 マクロなどは直さなくてもある程度動くんだと思いますが、 VBAは変換してくれませんから、多用しているようならたいへんだと思います。 心して、がんばって変換してください。

rvr3958
質問者

お礼

回答ありがとうございます。うちの参照設定は、 Visual Basic For Applications Microsoft Access 9.0 Object Library OLE Automation utility Microsoft DAO 3.6 Object Library Microsoft Visual Basic for Applications Extensibility 5.3 でした。Tableに代わるものはTableDefなのですか? FileMakerを知ってるだけでVBAまでこなすと思われちゃやっていられませんがこれも業務命令。ガンバリマス(笑) Access97や2000の本はあるのですが、コンバート(変更点)を重点的に書いた本なんて見つからないと思うし、見つけている時間も理解している時間も無くご質問となってしまいました。Accessを良くご存知の方から見るとホント基本的な質問だったと思います。すいません。

関連するQ&A

  • MS-ACCESSでDAOとODAの違いは?

    違いが良くわかりません。下記はあるHPで見かけた説明なのですが、自分の環境にはどちらがいいのか決めかねています。 皆さんはどうされていますか? >>>>>>>>>>>>>>>>>>>>>> ADO ってのは、ActiveX Database Object の頭文字で、"ActiveX" が示すとおり、OLE を介してデータベースにアクセスする標準インターフェースのことのようです。詳しくはマイクロソフトなり関連雑誌になり当たってください。  DAO ってのは、Data Access Object の頭文字で、Jet エンジンにアクセスするときに使うインターフェースです。扱いが簡単なので長く使われています。 ADO ってのは、ActiveX Database Object の頭文字で、"ActiveX" が示すとおり、OLE を介してデータベースにアクセスする標準インターフェースのことのようです。詳しくはマイクロソフトなり関連雑誌になり当たってください。  DAO ってのは、Data Access Object の頭文字で、Jet エンジンにアクセスするときに使うインターフェースです。扱いが簡単なので長く使われています。

  • Access2000のVBAでコンパイルエラー

    Access2000のVBAで初歩的な質問があります。 「tblShi」というテーブルがあります。 フォームにボタン「btn1」を作り、 デザインビューでボタンのプロパティを開いて イベントのクリック時のところで、 「ビルダの選択」をコードビルダにしました。 そして「Private Sub btn1_Click()」の中に、最初に   Dim db As Database という記述をしています。 このフォームを開いてボタンを押すと、なぜか   コンパイルエラー   ユーザ定義型は定義されていません というエラーが表示されてしまいます。 たしかにコードを書いているときに、   Dim db As のところまで入れると、小さいウィンドウの中に たくさん候補が表されますが、 その中に「Database」というのがないです。 「QueryDef」とか「Workspace」とかもありませんでした。 (「Recordset」はありまして、それはコンパイルが通ります) いろいろな解説を見ても、やはり最初はどれも 「Database」型を宣言しているようなんですが… 何がよくないのでしょうか。 もしわかる方がいらっしゃったら教えてください。

  • Access2000 でのコンパイルエラーについて

    Access2003で修正しているプログラム(元は、別の担当者が作ったプログラム)を Access2000が入っている端末で動かしたいのですが、 コンパイルエラーが出て、原因が分かりません。 プログラムは、EXCELを出力する処理を追加し、 Microsoft Excel 11.0 Object Library を参照するようにしました。 これが、Access2000の端末にコピーすると参照不可になっていたため、チェックをはずし、 Microsoft Exce 9.0 Object Library にチェックを入れました。 参照はできるようになりましたが、 「コンパイルエラー:引数の数が一致していません。または不正なプロパティを指定しています。」 というエラーがとれません。 データベースユーティリティでのデーターベースの変換が必要なのかと思いましたが、 Access2000がグレーになっているため、もともとはAccess2000だったのか、 変換の必要はなさそうです。 コンパイルエラーをとる方法を教えていただきたいです。

  • AccessVBAのCurrentDbメソッドでエラーになります

    Windows2000、Access2000を使っています。 オンラインヘルプを参考に作った下記のプログラムを走らせると、Set db = CurrentDbのところで「実行時エラー13:型が一致しません」のエラーになります。どうしてでしょう。 Sub b() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim fld As DAO.Field Set db = CurrentDb Set tdf = db.TableDefs("テーブル1") For Each fld In tdf.Fields Debug.Print fld.Name Next fld End Sub 参照設定を見ると、Microsoft dao 3.0 Object LibraryにチェックがついていますのでDAOは使えるはずなんですが・・・。

  • アクセス2000VBA DAOをADOに書き換えてください

    アクセス2000VBA DAOをADOに書き換えてください 下記プログラムをADOに書き換えてください。(DAT1、DAT2はモジュールにて定義してあります) Option Compare Database Dim DBS As Database Dim QDF As QueryDef Dim RST As DAO.Recordset Dim COUNT1 Private Sub Form_Load() On Error Resume Next DAT2 = [Forms]![伝票]![HAKKOU1] Set DBS = CurrentDb Set QDF = DBS.QueryDefs("発行") With QDF .Parameters("DAT1") = DAT2 ’もしかしたら DAT2 ではエラーがでるかもしれません。 Set RST = .OpenRecordset() ’正しい記述を教えてください .Close End With With RST COUNT1 = !指示書 .Close End With

  • AccessでのSQL文

    AccessでSQL文を使おうと思うのですが、 Dim mydb as Database とすると、ユーザ定義型は定義されていません とエラーになります。 また、mydb as と打つと変数の方の一覧が出ますがその中にもDataBaseがありません。 サンプルの家計簿を開いてみるとSQL文を使っているのにエラーは出ません。 ヘルプを見てみるとDAOが関係しているようなのですが良くわかりません。 AccessでDatabase型を使うにはどうすればいいのでしょう。 教えてください。 Access2000です。

  • この名前は既にあるモジュール、プロジェクト、オブジ

    Sub test() Dim db As Database と宣言しているコードがあるのですが、 いきなり使えなくなりました。 コンパイルエラー プロジェクトではなく、ユーザ定義関数を指定してください。 というエラーになります。 http://okwave.jp/qa/q465366.html を参考に 「Microsoft DAO X.X Object Library」(X.Xはバージョン) にチェックを入れようとすると 「この名前は既にあるモジュール、プロジェクト、オブジェクトライブラリで使われています」 になります。 オブジェクトブラウザーで「db」を検索すると Excel.WorksheetFunction のメンバー にdbというメソッドがありました。 Dim db As Database のdbという名前が原因かなと思い、dbを違う名前に変えてみても同じです。 win8、アクセス2010です。 原因わかる方ご回答よろしくお願いします。

  • コンパイルエラー:ユーザ定義型は定義されていません、と出るのですがどのライブラリファイルかわかりません。

    VB6で以前誰かが作ったプログラムの修正をしているのですが、コンパイルができません。 コンパイルエラー:ユーザ定義型は定義されていません。と表示されてしまします。 参照設定のライブラリファイルにチェックを入れればいいと思うのですが、どのライブラリファイルにチェックを入れればいいのかわかりません。 どなたか教えていただけないでしょうか? 現在チェックが入れてあるのは Visual Basic For Applications Microsoft Access 10.0 Object Library OLE Automation Microsoft Visual Basic for Applications Extensibility5.3 Microsoft DAO3.6 Object Library の五つです。 ソースは以下のとおりです。 ------------------------------------------- Private Sub timTimer_Timer() Dim objCmpct As PharmitCompact timTimer.Enabled = False Set objCmpct = New PharmitCompact objCmpct.DatabaseFolder = App.path & "\Database" objCmpct.DBCompactType = phrCmpTypeAll objCmpct.Exec Set objCmpct = Nothing Unload Me End Sub --------------------------------------------- 上のソースで objCmpct As PharmitCompact の部分の色がエラーで変化します。 原因が違っていたらごめんなさい。 どうぞよろしくお願い致します。

  • ACCESSでレコード数の数え方(ADO,DAOなしで)

    ACCESS2000でデータベースを作っています。ADOやDAOは使っていません。 質問はタイトル通りなのですが、ADOやDAOなら簡単なのですが、訳あって それらは使えません。 色々調べてみたのですが・・・。 どなたかお知恵を貸していただけないでしょうか? P.S. 質問No.689217"ACCESSで実行時エラー3008"を質問しましたが、解決しました。 フォームの定義でロックをかけていました。(⌒ ⌒; いつもはVBで作っているのですが・・・、はやとちりのようでした。お騒がせ しました。

  • マイクロソフトアクセスでDATAを1件毎に読む

    モジュールで書かなければいけないのは、分かります。サンプルコーディングをお願い出来ないでしょうか。 また、DAOかADOなのか分かりませんがADDonはどうするのでしょうか 古くて申し訳ないのですがAccess 2002です。 何卒お願いします。