• ベストアンサー

小さな会社でのACCESS

いつもお世話になっています。 小さな会社で、私一人で事務をしています。 PCは1台、データーを扱うのは私しかいないので、ACCESS2003でデーターを管理していました。 この度もう1台PCを購入し、無線LANでネットワークを共有することになりました。 あまりネットワークに関する知識がなく、質問させていただきました。 一つは、ACCESS2003から2007に以降する予定なのですが、その場合今まで作成したACCESSファイルを、2007のファイル形式に変換することは可能でしょうか?またその場合、VBAなどももう一度作り直さなくても正常に作動するのでしょうか? もう一つは、今まで同様データを扱うのは私だけなので、同時にデータベースにアクセスすることはないのですが、もう1台のPCからは、データーを”見る”作業だけはする事になります。 ACCESSは同時アクセスに弱いといいますが、同時にアクセスすることがほとんどなければ、共有してもデーターベースが破損することはないのでしょうか? また、1台にACCESS2007を購入し、もう1台は”見る”だけなのでランタイムというもので可能だと聞きました。ACCESS2007からは、無料配布だそうで、ライセンスにもひっからないと聞きましたが、こちらも問題ないのでしょうか? また、ランタイムというものを”見る”だけのPCにインストールすれば、共有してあるACCESSのファイルを見ることが出来るという認識でよろしいのでしょうか? 知識がなく質問ばかりになってしまいましたが、よろしくお願いいたします。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.5

No3です。更に別案です。エクセルのVBAでADO使って、テーブル(或いはクエリ)を取り出します。 準備 1、ACCESSのデータベースと同じフォルダに、エクセルのファイルを保存してください。 2、エクセルファイル開いてVBエディター(ツール=>マクロ=>VBエディター)で、ツール=>参照設定で  Microsoft Active Data Object 2.6 Libraryにチェックを入れる。 3、標準モジュール内(挿入=>標準モジュール)に Option Explicit Const cnsADO_CONNECT1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Const cnsADO_CONNECT2 = "\データベース名.mdb;" Sub TESTDB() Dim dbCon As New ADODB.Connection Dim dbRes As New ADODB.Recordset Dim dbCols As ADODB.Fields Dim strSQL As String Dim GYO As Long dbCon.Open cnsADO_CONNECT1 & ThisWorkbook.Path & cnsADO_CONNECT2 strSQL = "SELECT * FROM テーブル或いはクエリ名" dbRes.Open strSQL, dbCon, adOpenKeyset, adLockReadOnly GYO = 1 Worksheets("Sheet1").Activate Rows("2:65536").ClearContents Do Until dbRes.EOF Set dbCols = dbRes.Fields If dbCols("フィールド名").Value Like "*" & Range("G1").Value & "*" Then GYO = GYO + 1 Cells(GYO, 1).Value = dbCols("フィールド名").Value Cells(GYO, 2).Value = dbCols("フィールド名").Value Cells(GYO, 3).Value = dbCols("フィールド名").Value Cells(GYO, 4).Value = dbCols("フィールド名").Value Cells(GYO, 5).Value = dbCols("フィールド名").Value End If dbRes.MoveNext Loop dbRes.Close Set dbRes = Nothing dbCon.Close Set dbCon = Nothing End Sub をコピィして、そちらの都合に編集してください。 サンプルでは シートのG1セルに抽出条件を入れておきます。 マクロを実行すると、G1の文字を含むレコードのみSheet1に表示されると思います。 IF文の行以外は決まり文句と思ってください(質問者の方が詳しいかもしれませんが) IF文を変更するなりしてご希望のVBAにして、シート上にボタン作成してあげれば希望になりませんか? >現在のACCESS2003を2007で購入しなおす? 多分、アップグレードの事と思います。当方ACCESS2007ではないので確認できないですが、 ひょっとしたら、ACCESS2007にアクセスページ作成の機能ないかも知れないです。 不安であれば、別途、質問のスレで確認しておいて方が良いかもしれません。

nsurnains
質問者

お礼

ADO、手持ちの参考書の中にありました! ありがとうございます。hallo-2007さんのコードそのままで、IF文のみ変更しましたが、エクセルでできました♪ これなら簡単ですね。 あとはいろいろアレンジしてみます。 参考書だけはいっぱいあるのですが、使いこなせなきゃ意味ないですね・・。 もっともっと勉強しなくてはと思います。 ありがとうございました。

その他の回答 (5)

  • FEX2053
  • ベストアンサー率37% (7991/21373)
回答No.6

#1です。#3,5さんのやり方は王道でして、マトモなVBAプログラマなら この手の方法を使うことを百も承知の上で、敢えて言わせて頂ければ、 そこまで頑張らなくても、MDBファイルを共有して同時に利用する方法 でも、同時アクセスが数台なら、ほとんどの問題なく動作しますよ。 要は「Accessの動作不良は、殆んどの場合、同時に同じテーブルを更新 に行くときに発生する」からで、なるべくそうならないように、処理中 はテーブルを変数に読み込み、テーブルは即座にクローズすれば障害は 余り発生しないということなのです。 ただ、この方法だと「同じレコードを同時に更新したときに、どっちを 優先するかという問題が常に発生する」ので、そちらは例えば「同じ作業 はなるべく同じ人がして競合を避ける」など、運用で逃げても良いかと。 (これは、#3,5さんのコードでも同じことで、同じレコードを同時に処理 した場合にどうするかは、ファイル共有の時に常に付きまとう問題です) なお、ファイル変換の有無に関係なく、Access2007は2003のコードを そのまま実行することが出来ません。これは同じ命令でも引数が違ったり 動作に微妙な差異があったりと、Accessのプログラム自体に100%の互換が 取れていないことが原因です。 ですが前にも言ったとおり、大概の場合は大丈夫ですから、止まったら それはそのときと割り切って使うのも一つの方法です。どのみちコード が正しくても、原因不明の障害で止まってしまうことは、Accessでは しばしば発生しますので。

nsurnains
質問者

お礼

VBAは初心者で、目的にあわせてやりたいことをやっている程度で、応用がなかなかききません。もっと頭をやわらかくしないとだめですね。 反省します。 アッドバイスありがとうございました。

  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答No.4

目的がACCESSのデータ参照のみでいいのならASPで開発するということを考えた方がいいかもしれません。 DBにACCESSを使いサーバとなるPCでIISを起動すれば、ASPでのイントラネットでACCESSのデータを参照することができます。入力するパソコン側ではアクセスによるフォームを作成してもいいかと思いますが、ASPでのプログラムを作成しておけば、データを参照する側はIEなどのブラウザなどで画面表示ができます。ネットワークで共有できるようにできればそれほど難しくはないでしょう(VBAを自由に使いこなすぐらいレベルの知識は必要ですが) IISはWindows2000ProやXP Pro、VISTA Businessなどには標準で付いていますので特に費用は発生しません。 開発の説明もいろいろなサイトにありますので参考になるでしょう(市販本もいろいろあります)。 http://tryasp.winscom.co.jp/ http://www.site-cooler.com/kwl/asp/ http://winofsql.jp/VA003334/asp051015160922.htm

nsurnains
質問者

お礼

回答ありがとうございます。 ASPについて、参考URLを拝見させていただいました。 開発事態は大好きですので、趣味程度にC言語、VB.NETなどやっていますが、私の頭ではなかなかまた新しく一からだと大変そうです。 でも、少しずついろんなことにチャレンジしていきたいと思っていますので、こちらのやり方も少しづつマスターして、いろいろ応用が利かせられる頭になるよう、勉強していきたいと思います。 ありがとうございました。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

もう一台、パソコンを購入されるわけですよね 多分、Vista+Office2007? 案1 エクセルでもアクセスのテーブル参照することが可能です。 外部データの取り込みからテーブルをシートに引っ張ってこれます。 タイムリーというわけにはいきませんが、エクセルも2007であれば、1,048,576行のデータが取り込めます。 案2 Access2003であれば、ページというオブジェクトがあると思います。 フォームと同じようなウィザードでhtml形式でファイルを作成します。 他のパソコンからIEを使用してデータを参照するファイルが作成可能です。 一度、ご自身のパソコンで確認してみてください。 パソコン+Office2007パーソナル で約12~15万円 Access2007が追加で約3万円ですので、社長と相談してください。 No2の方が説明されておられますが、パソコン導入後は、改めて 新規パソコンのAccess側で旧パソコンの上のAccessのテーブルへリンクテーブル指定して、参照のフォームを作成することになると思います。 ネットワークで使えると大変便利ですよ。作業も同時にできるだけでなく、印刷して配布していた資料も画面で見てもらえます。

nsurnains
質問者

お礼

回答ありがとうございます。 案1について。 ExcelでACCESSのデータから引っ張ってくる作業については、データの抽出がその度に違うので、(毎回同じであれば更新されるので問題ないのですが・・)抽出条件が変わる度に自分で作業しなくてはならないという点から、実際データを参照するのは私ではないので無理かなぁと思います。 でも今ふと思ったのですが、AccessのテーブルにリンクさせたExcelを開く度に更新させ、フィルタ機能のやり方だけを徹底的に教えれば、可能なのかなぁと思います。 ACCESSからデータを引っ張ってくるやり方も、フィルタオプションと似ているので、もしかしたらできるかも?? 案2については、ページウィザードは2007にはないのですか?ちなみにデータの参照だけだったような気がしますが、もう一度よく試してみます。 一番良いのはACCESS2007を2つ購入してもらえることですが、やはりそれは無理そうです。 業者さんの話によると、現在のACCESS2003を2007で購入しなおす??(その辺りはよくわかりませんが)みたいなかんじで、PC2台でACCESS2007が1台どちらかにインストールされるという環境は変わらないみたいです。 Accessのフォームが、(PCの操作事態をあまりできない者でもパラメーターにキーワードさえ入力すれば、データの必要なものだけを検索できるように、日付、商品名、業者名などごとに、曖昧検索のフォームを作成している。)もう1台のPCでデータの参照用に使えればなぁと思っていたので、ランタイムというものならばと思ったのですが、どうやらいろいろ難しそうですね。 ランタイムの設定等が無理なら、ExcelでAccessデータを引っ張ってくるやり方を教えようと思います。 ありがとうございます。

  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答No.2

ACCESSで共有して利用するときの作成方法は他のソフトと違い同じファイルを同時に開くというやり方はしません。 実際にACCESSで開発されているのならおわかりになると思いますが、ACCESSはオブジェクト毎に独立させて動かすことができます。AというMDBにはテーブルだけを作っておき、BのMDBでAのMDBからテーブルをリンクさせクエリやフォームなどのオブジェクトを作成し、アプリケーションを利用することができます。 従ってXというPCではA,B両方のMDBを置いて使用し、YというPCではBだけを置き、データ部分の共有MDBであるAのMDBからテーブルをリンクさせればいいわけです。このようにしてデータを共有させ、参照をできるようにすれば同時に同じMDBを使うわけではないので、データの破壊ということは避けられます。 ACCESS自体はそれぞれX、Yどちらにも必要となりますが、XのパソコンでBのMDBをパッケージ化するとランタイムを含んだインストールプログラムが作成できますので、それをYのPCでインストールすれば自動的にACCESSランタイムもインストールされます。但し、その際にYのPCではランタイムしかないため、BのMDBのデータベースウィンドウは表示されないので、フォームでリンク先のMDBを選びテーブルを自動的にリンクさせるようなボタンなどを作成する必要があります。かなりのVBA知識が必要になると思います(WindowsAPIを利用するレベルの知識が必要になるかと思います)。

nsurnains
質問者

お礼

回答ありがとうございます。 今まで、個人で(ローカルで)作成し、使っていたことはありますが、ネットワーク上で共有はしたことがありませんでした。 ACCESSで共有して利用するときの作成方法は、すごく解りやすい説明で、知識がない私にもよくわかりました。 とゆうことは2台ともACCESSがインストールされている(これから購入することがあれば・・)参考にさせていただきます。 今回は片方しかないわけで、難しそうですね・・。今、調べていたら、2007の無償のランタイムは、2007のファイル形式でしか、動かないみたいなことも書いてありました。 うまく出来るかわかりませんが、頑張ってみます。ありがとうございます。

  • FEX2053
  • ベストアンサー率37% (7991/21373)
回答No.1

ACCESS2003のmdbファイルを2007のファイルに変更することは出来ます。 ただ、その場合、全てのVBAコードが確実に動作するとは限りません。 大概大丈夫ではありますが・・・。 http://www.microsoft.com/japan/msdn/office/2007/bb203849.aspx ただ、一旦2007用に変換してしまうと、2003以前では読めなくなり ますので、2003用で保存してください。 http://www.nodai.ac.jp/center/syogai-mainte/vista/info/office/Access2007-2003compati.html ACCESSは、ファイル共用に弱いことは確かですが、2~3件程度なら 経験上ほとんど問題はないと思います。 ランタイムはこちらにありますが、それなりに知識がないとうまく 行かない場合もあるようです。 http://www.microsoft.com/downloads/details.aspx?FamilyID=D9AE78D9-9DC6-4B38-9FA6-2C745A175AED&displaylang=ja

nsurnains
質問者

お礼

ご回答ありがとうございます。 参考URLありがとうございます。 2003形式をわざわざ変換しなくても、2003のファイル形式のまま保存しておき、2007で開き作業すればよいのですよね?そしてそのまま2003用として保存するといった動作でよいですか? 変換さえしなければ、VBAも全てのコードは2003で作業していたのと同様に使えるのでしょうか・・? ランタイムは、業者さんも知識がそれなりに必要と言っていました。でも、2つ買うと、かなりな高額になるらしく、そういった方法になってしまいました。 いろいろ調べてはいるのですが、疑問点ばかりが浮かんできます。 パッケージ化といった意味がよくわからないのですが、ランタイムをダウンロードすれば、1台のPCで作業していても、もう1台のPCでデーターを見ることが出来るんですよね?それとももう1台で誰かがデータを見るときは、ファイルを閉じていないともう1台で見れないのでしょうか? もしこちらを見られましたら、お返事いただけると助かります。 すみません。

関連するQ&A

専門家に質問してみよう