「夫を成功」へ導く妻の秘訣 座談会

C#でACCESSの「テーブル」の中身は取得はできましたが、その他の「マクロ」、「モジュール」などのソースを取得するソースの記述方法がわかりません。

教えて頂ければ幸いです

このQ&Aに関連する最新のQ&A

A 回答 (2件)

#1の方が指摘されているように、同じ質問を何度も立てるのはマナー違反です。




テーブルの中身はSQLで取得したと思いますが、マクロやモジュールはSQLでは取得できません。
Microsoft.Office.Interop.Access名前空間のクラスを使うことになります。

.NETでMicrosoft.Office.Interop名前空間のクラスを使う方法のサンプル等(英語)
http://msdn.microsoft.com/en-us/library/dd264733 …

Accessオブジェクトリファレンス
http://msdn.microsoft.com/ja-jp/library/ff192120 …


/*マクロの取得サンプル*/
//参照設定にMicrosoft.Office.Interop.Accessを追加すること
using Access = Microsoft.Office.Interop.Access;

void PrintModule(string filepath){
 var application = new Access.Application();

 application.OpenCurrentDatabase(filepath);

 var modules = application.Modules;
 int lineCount = modules[0].CountOfLines;
 Console.WriteLine(modules[0].Lines[1,lineCount]);

 application.CloseCurrentDatabase();
 application.Quit();
}
    • good
    • 0

以下の点、補足をお願いします。



あなたは以前以下のように同一内容の質問をされて、「ACCESSでエクスポートしてみてはどうか」という回答に対してベストアンサーをなさいました。
http://oshiete.goo.ne.jp/qa/8425583.html

それにもかかわらず同一内容の質問を再度せざるを得ない理由を補足していただけないでしょうか。
その説明ができないと回答は前回と同じ「ACCESSでエクスポートしてみてはどうか」というものしかつかないと思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC#言語でACCESSのソースを取得する方法

C#でACCESSの「テーブル」の中身は取得はできましたが、その他の「マクロ」、「モジュール」などのソースを取得するソースの記述方法がわかりません。

教えて頂ければ幸いです。

Aベストアンサー

素直に、ACCESSでAlt+F11押してExportしたほうが良いのでは?

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

Q一つのトランザクションでSELECTとUPDATEできますか? (ADO.NET)

いつもお世話になっております。

ADO.NETの話なのですが、トランザクションを開始したコネクションオブジェクトで
DataAdapterを使ったSELECTと、ExecuteNonQueryを使ったUPDATEを交互に繰り返し
行うことはできるでしょうか?

現状できていないので可能なのであれば共通関数の見直しが必要かと思っています。
いまはSELECTとUPDATEを別のコネクションで行っているのですが、UPDATE後に
同じテーブルの該当レコードをSELECTにいくため、デッドロックが発生しています。

Aベストアンサー

>それにしてもコネクションとトランザクションオブジェクトを別々に
>渡してやる必要性がよく理解できません。コネクションオブジェクトから
>トランザクションオブジェクトも参照できるのでは?と思うのですが・・・。

たしかに私も腑に落ちない・・・気がします
なにか別に設定が必要な理由があるのかも知れませんね
複数のトランザクションが存在する場合に指定が必要になるのかも!

私の過去のコードにはしっかり
sqlCommand.Transaction = tran
がありました(いつの間にか記述してたみたい)
すいません。#2ではまったくその事に触れていませんでした

憶測での回答になってしまいますが
トランザクションが割り当てられたコマンドが実行されたときに
自動的にBegin Tranされ
トランザクションが割り当てられていないコマンドが実行されたときに
自動的にCommit Tranが実行されてしまうのかも知れません
時間があったら実証して見たいと思います

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QVBからACCESSのマクロを起動できますか?

VB6でACCESSのテーブルを参照しています。
そのMDBの中にあるマクロをVB側から起動できないでしょうか?
教えてください。
宜しくお願いいたします。

Aベストアンサー

ちょっとまわりくどいですが、
MDB 内のモジュールで
Public Function Test()
DoCmd.RunMacro ("マクロ1")
End Function
のようにしておき、
VB 側からこれを
Private Sub CommandButton1_Click()
Dim aa As Access.Application
Set aa = GetObject("D:\Test\db1.mdb")
aa.Run "Test"
End Sub
のようにしてやればマクロ1 を呼び出すことができると思います。
( 上記の方法で Excell 2000 から Access 2000 のマクロを呼び出せるのは確認しました。VB でも可能だと思います。Access 2002 以降では確認していないのですが、Access.Application に RunMacro というメソッドが追加されていれば、それを使用して直接マクロを実行することが可能だと思います。)

Qアクセスでファイルを開いたときにマクロ実行しない方法はありますか?

セキュリティレベルが「中」の場合
エクセルなら「マクロを無効にする」「マクロを有効にする」
という選択がありますが
アクセスの場合
「キャンセル」と「開く」しかない為
マクロ実行せずにファイルを開けないです。

もし起動時に実行するとまずいコードを作ってしまった場合
アクセスならファイルを起動すれば
強制的にマクロを実行することになるのでしょうか?

アクセスで
ファイルを起動時にフォームを起動しそれと同時にデータ削除のマクロを組んでしまった場合
ファイルを開くけどマクロ実行しない方法はありますか?

Aベストアンサー

『起動時の設定』(メニューで「ツール(T)→起動時の設定(U)」)や、
『Autoexec』マクロ(この名前で保存したマクロは、通常起動時に
自動的に実行される)を中止させたい、という意味でよろしければ、
Shiftキーを押しながら起動すればOkです。
(「キャンセル」と「開く」で、Shiftキーを予め押した状態にして、
 そのまま「開く」をクリック(またはEnter)を押す:Shiftと同時押し)

なお、こうして起動した場合も、Excelとは違って、Autoexecマクロや
各フォームのVBA/マクロは、それらを開くと起動してしまいますので
ご注意下さい。
(Accessでは、マクロを完全に無効にした状態で開くことはできず、
 あくまで『起動時の設定』と『Autoexec』マクロを無視するだけです)

Qビルドが実行できない 先へ進めない

vb.netです。
モジュールでImports Microsoft.Office.Interopを宣言しています。
ビルドを実行すると
---------------------------------------------------------------------------------
警告1タイプ ライブラリ "VBIDE" のラッパー アセンブリが見つかりません。WindowsApplication1
警告2タイプ ライブラリ "Microsoft.Office.Interop.Access" のラッパー アセンブリが見つかりません。WindowsApplication1
警告3参照コンポーネント 'Microsoft.Office.Interop.Access' が見つかりませんでした。
警告4参照コンポーネント 'VBIDE' が見つかりませんでした。
---------------------------------------------------------------------------------
になってしまいます。

参照設定は画像のようになっています。

アクセスの参照設定をつけなおそうと思い、参照の追加→COMタブ
Microsoft Access 12.0 Object Library
を選んでOKを押すと、
「Microsoft Access 12.0 Object Libraryへの参照を追加できませんでした。
このタイプライブラリへの参照は既に存在します。
追加する前に参照を削除してください。」
になります。
ここからどうすればいいでしょうか?
VBIDEの方も教えてください。

初心者なのです。ご回答よろしくお願いします。

vb.netです。
モジュールでImports Microsoft.Office.Interopを宣言しています。
ビルドを実行すると
---------------------------------------------------------------------------------
警告1タイプ ライブラリ "VBIDE" のラッパー アセンブリが見つかりません。WindowsApplication1
警告2タイプ ライブラリ "Microsoft.Office.Interop.Access" のラッパー アセンブリが見つかりません。WindowsApplication1
警告3参照コンポーネント 'Microsoft.Office.Interop.Access' が見つかりませんでした。
警告4参照コ...続きを読む

Aベストアンサー

こんにちは。

これと同じよな感じですかね。

参考URL
http://bbs.wankuma.com/index.cgi?mode=al2&namber=7105&KLOG=18

QVBのソース上からAccessのmdbファイルのクエリを呼び出す

Accessのmdbファイルにクエリを登録したのですが、これをVB側から呼び出すやり方がわかりません。どなたか教えてもらえないでしょうか?
あと、引数がついた場合もお教え願いないでしょうか。

Aベストアンサー

参照設定でMicrosoft DAO3.5 ObjectLibraryを設定して

Private Sub cmd1_Click()

Dim db As DAO.Database
Dim qd As DAO.QueryDef
Dim rs As DAO.Recordset

Set db = DBEngine.OpenDatabase("フルパス\ファイル名.mdb") 'DBに接続する。

Set qd = db.QueryDefs("クエリ名") 'クエリーを呼び出す
  qd.Parameters("パラメタ名").Value = 値 'パラメータ名を指定して値を設定

Set rs = qd.OpenRecordset 'クエリの結果のレコードセットを得る

End Sub

これで良いと思いますが。

QDAOとADOの違いについて

Accessからイントラネット上のデータベースに接続するための接続方法で困っています。
DAOとADOの違いが分からず困っています。
メリット、デメリットが分かる方、どうか教えてください。

宜しくお願い致します。

Aベストアンサー

DAO(データアクセスオブジェクト)はAccessで使用されるMicrosoftJetデータベースエンジン を公開した最初のオブジェクト指向インターフェイスです。DAOは単一システムのアプリケーションや小規模でローカルなネットワークで使用するのに最も適しています。
とMSDNライブラリでは説明しています。
DAOはJetデータベースエンジンを対象にして開発されているのでJetのもつセキュリティ機能・データ定義機能などを十分に操作することができます。
ADO(ActiveXDataObjects)ではオブジェクトの種類が簡素化されているためJetデータベースエンジンの細かな機能を制御することができないといった点が不足している部分がありますがADOXやJROの各オブジェクトモデルで使用できる機能を使えばADOで不足している機能をほとんど補うことができます。
DAOはデータベースにAccessを使用するアプリケーションの場合、最大のパフォーマンスを得ることができます。しかしアプリケーションを運用していくうちに規模が大きくなってデータベースをSQLServerに移行することがあるかもしれません。
そのような可能性が含まれているのであれば最初からADOで開発しておいたほうが無難です。ADOはSQLServerに対する処理で良いパフォーマンスを得ることができます。

Jetデータベースエンジンを主なターゲットにしているならDAOで可。それ以外のデータベースを利用するのであればADOを選択する方が良いのではと思います。

DAO(データアクセスオブジェクト)はAccessで使用されるMicrosoftJetデータベースエンジン を公開した最初のオブジェクト指向インターフェイスです。DAOは単一システムのアプリケーションや小規模でローカルなネットワークで使用するのに最も適しています。
とMSDNライブラリでは説明しています。
DAOはJetデータベースエンジンを対象にして開発されているのでJetのもつセキュリティ機能・データ定義機能などを十分に操作することができます。
ADO(ActiveXDataObjects)ではオブジェクトの種類が簡素化されて...続きを読む


人気Q&Aランキング