質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

2回答

8913閲覧

ACCESSの2GBの壁のための他のDBソフトについて

pinecone

総合スコア18

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

1クリップ

投稿2020/08/04 13:52

ローカルHDD上でACCESSのデータベースを動かしています。
インターフェースもデータベースもACCESSを使っています。
データベースはVBAを使ってダウンロード・更新しています。
データベースはVBAを使って解析しており、これが目的です。
2GBの壁が課題になっています。
クエリの組み方によっては非常に重くなることも課題になっています。
ACCESSの中で工夫してますが、ACCESS以外のソフトを利用すればもっとよくなるのではと考えています。
データベースだけ他のSQLServerやSQLiteに移行したらよくなるのではないかと思っていますが、SQLserverとSQLiteどちらが向いているでしょうか?
或いはほかのお勧めのソフトがありましたらご教授いただければ幸いです。
お世話をおかけしますがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Accessとリンクテーブルを介してのDBの場合、SQLServerはお奨めしません。
理由としては、リンクテーブルの場合非常に遅いからです。
リンクテーブルの代わりにパススルークエリーであれば、高速にはなりますが、更新は出来ないので。

全体的に作りを見直すならSQLServerでも良いと思いますが、中規模程度でSQL重視なら、SQL標準を一番実装しているPostgresをお薦めします。

何れにせよ、連結フォームの場合は、リンクテーブル越しではなく、リンクテーブルから一旦Accessのテーブルにデータを取得して、そのテーブルで行っておいた方が良いですよ。

作り方次第では、Accessのままでも100万件程度でも問題はありませんが。

投稿2020/08/04 15:20

編集2020/08/04 15:22
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pinecone

2020/08/06 12:16

ご教授いただきありがとうございます。 昨日は体調を崩していたもので、お礼が遅くなり申し訳ありません。 質問させていただいても良いでしょうか。 データのやり取りは、基本的にローカルのSSD上での完結を想定しております。 ACCESSのアプリケーションを普通のパソコン上で起動して、 データベースも同じローカルのSSD上に置いておいて、 ACCESSからデータベースを触ろうとしております。 ネットワークを経由しないのですが、その場合はリンクテーブルの遅さは考えなくても 良くなるのでしょうか? (リンクテーブルが遅くなるのがネットワークを介するため遅くなるのか、 それともローカル上でも何らかの処理のために遅くなるのか分からないため) お世話をおかけします。
sazi

2020/08/08 03:33 編集

リンクテーブルの接続先DBがローカルでないなら、ネットワークの影響は受けます。 SQLServerの場合が特に遅いのですが、複数のテーブルを結合するような場合はその他のDBでも遅くなるので、リンクテーブル経由ではなく直接の操作の方が良いでしょう。 その際もパススルークエリーの方が、良いと思います。(ストアドを呼び出すのもアリだと思います)
pinecone

2020/08/08 08:19

お世話になります。 リンクテーブルの接続先DBはローカルになります。 ローカル上のACCESSから、ローカル上の別のアプリケーションのDBに接続しようと思っています。 そうするとSQLserberでも差支えは無いでしょうか? 重ね重ねの質問で申し訳が無いのですが、 アクセスからリンクテーブルなどでmySQL等に接続するとして、 mySQL上のデータから新たにmySQL上にテーブル作成クエリを実行して、 テーブルを作成することはできるのでしょうか? 現在accessのaccdbファイル上にプログラムを置いて、動的にSQLを作成して、 別のaccessのaccdbファイル上のテーブルをもとに 更に別のaccessのaccdbファイル上に新規テーブルを作るということをしています。 煩雑なのですが、2GBの壁があるため、いくつものaccdbファイルを作成することになってしまっています。 すべてローカル上のため、重さはそれほど感じていませんが煩雑になってしまっています。 それでaccessのプログラムはそのままで、DBだけ他の上限が大きいものに移行したいと思うのですが、SQLはaccess上のプログラムで作成して、DBは他のDB上で完結するということはできるのでしょうか。 変な質問ばかりして申し訳ありません。
sazi

2020/08/08 11:57 編集

>リンクテーブルの接続先DBはローカルになります。 それは現状の話ですよね。 DBもローカルにインストールするのですか? そして、使用する人はそのローカルでのみの使用ですか? 現状新規にテーブルを作成しているのは2Gの制限の為で、access以外のDBMSならその制限は気にしなくて良いので、作成はしなくて良いですし、基本すべきことでは無いです。 > SQLはaccess上のプログラムで作成して、DBは他のDB上で完結するということはできるのでしょうか。 ワークテーブルは除いて、そのつもりで色々と回答しているのですが。
pinecone

2020/08/08 11:33

お世話をかけます。 >それは現状の話ですよね。 DBもローカルインストールで、使用者は私だけになります。 個人的な調査が目的のため、ネットワーク接続の予定は無いです。 >作成はしなくて良いですし、基本すべきことでは無いです。 もしリンク先にテーブルが作成できると既存の仕組みが流用できて楽なので、お訊ねしました。 確かに2GB制限が無ければテーブルを作ったり消したりする必要はなさそうです。 お世話をおかけします。
sazi

2020/08/08 11:44 編集

本運用とは異なる環境を作って調査する意味はあるのですか? > 既存の仕組みが流用できて楽なので 性能の改善も目的にしているとの事でしたから、そこは流用すべき所では無いですね。 似たような事をするにしてもそれはパーティションで対応するような内容です。
pinecone

2020/08/08 13:15

お世話をかけます。 データ解析して調査することそのものが目的ですので、本運用というものが無いのが実情です。 仰る通り、抜本的に見直す方が性能の向上は見込めると思います。 ただ、一度に行おうとすると労力的にかなり厳しく挫折する恐れもあるため、 使えるところは使う形で徐々に改善する方法を取れればと考えていました。
sazi

2020/08/08 13:26

責めているように取られると申し訳ないですが、調査するにしても最終的なものを確認した上で、最初の段階はここまで、のように取り組んだ方が良いと思っての老婆心です。 既に2Gの問題で対応方法を模索しているのですから。
guest

0

無償版のSQLserverでよいのではないでしょうか・・。

ODBC接続+リンク接続などでACCESSから今まで通りクエリを組めばいいのではないですか。

SQLServerになれてきたらExcel VBAなどからADO+Accessを介さず直接

SQLを発行すればいいと思います。

現在はわかりませんが データベース全体で10GB というのではなく、個々のデータベース毎の制限らしいので・・。

投稿2020/08/04 14:01

mako1972

総合スコア383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pinecone

2020/08/04 14:05

ご教授いただきありがとうございます。 移行先はSQLserverにします。 重ねた質問で申し訳ありません。 SQLserveには、テーブルだけ置いて、アクセスからテーブルをリンク接続などで参照する感じになるのでしょうか? その場合はテーブルの中身を変更・更新などもACCESSのVBAから可能なのでしょうか?
mako1972

2020/08/04 14:14 編集

sqlserverの各テーブルをリンクテーブルとしてインポートしておくと インポート時にパスワードを保存するかなど聞かれます。 リンクテーブルをもとにクエリを組んでおくと、あたかもAccessのテーブルのようにして扱えます。 (作成したユーザーのアクセス権限が、参照のみにしておくなお良いと思います。) また、アクセス自体にもパスワードをつけて直接アクセスできないようにしておきます。 私は、ACCESSを使いたいのでよく使う手法です。 Accessに仲介させておいて、Accessのクエリに対してExcel VBAからSQLを発行したりもします。 Excel VBAで、ADOでパスワード付のコードを作成してアクセスします。 結局、ADOで接続するならsqliteやmysqlでも同じだと思いますが、 将来的に、Accessの拡張としてsqlserver直接で業務拡張する場合に 違和感がないかな、という程度です。。 これは職場ごとにフリーのDBを許容するか否か、みれる職員がいるかなど 色々な要因に左右されそうなので、ケースバイケースということになると思います。
pinecone

2020/08/04 14:25

またもご教授いただきありがとうございます。 実は業務ではなく趣味の方で、利用者は自分一人になります。 (業務でもプログラム組んだりしますが、データ量が全然少ないのと、ACCESSをインターフェースにするだけで拒絶反応を示す人がたくさんいるので、そちらはエクセルベースにしてます。) 聞いておきながら、申し訳ないのですが、仰ることの意味が半分くらいしか理解できないので、まずはSQLserver無償版をインストールしてみます。
mako1972

2020/08/04 14:30

個人的におすすめなのは、 Access+ExcelVBAでデータを取得してExcel側で集計をおこなうという手法です。 最近のExcelはsumifやcountifs関数など便利な関数があるのでAccess側でクロス集計用のSQL 作成で苦労しなくても、かなり複雑な条件でクロス集計表など作成できますよ。
pinecone

2020/08/04 14:49

お世話になります。 100万行単位で行ごとに複雑な数式を組むのが厳しいため、ちょっとエクセルの利用は見合わせています。 accessでもテーブル間の結合だけクエリにやらせて、計算はなるべくVBA上でやってるくらいなので、ちょっとエクセルだと厳しいのではないかという感じです。 せっかくご教授いただいたのに申し訳ありません。
mako1972

2020/08/04 14:51 編集

そうなんですね・・。 ちなみに。 sqliteはデータ型がないので、ODBC接続でSQLがうまく取得できる振る舞いをするか否かは わかりません(個人的には好きです)。 個人的には、ここまで回答しといてmysqlがお勧めです。
pinecone

2020/08/04 14:57

mysqlがお勧めなんですね・・・ まだ簡単に軌道修正がきくのでmySQLの利用も試してみます。 ありがとうございます。
mako1972

2020/08/08 09:39 編集

リンクテーブルが遅いとか、その通りかもしれませんが 専門家がいう意見と素人が実務で利用できる内容とは乖離しています。 リンクテーブルで十分な案件ですよ。 遅いとか言いますけど、半日処理に係るわけではなく sqlチューニングや運用をカバーできるだけのインフラが整備されていると 思います。処理が遅いとかいいますが、10万件以上の検索で1分かかるかどうかの 話です(もちろん、条件によります)。 postgresqlがいいとかmysqlがいいとか宗教戦争に巻き込まれますので わかりやすいデータベースでいいと思いますけどね。 あとはSQLの条件をいかに組むかでしょうか。 実務の事例で、クエリの順番を見直したところ、1/10以上の速度をたたき出した ケースがありました。 今回は、2Gの壁をどうするかという質問ですので SEではない立場であればどのように短時間で業務を行うかということに注力してくだされば いいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問