-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

引き続き、300万件のレコードを持つAccessテーブルの操作です。

つまづきながらも、なんとかデータのUPLOADが出来たものの、

集計クエリを作成していたらエラーになりました。解決したので、健忘録として残しておきます。

先に行っておきますが、原因はポカミスですた・・・。役に立たない情報かも。でも!人のエラーみて我がエラー直せ、といいます(いいません)

Continue Reading »

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

AccessからSQLiteを操作する為の設定手順です。(SQLiteのデーターベースがあることが前提)

SQLite用のODBCドライバ(無料)が必要になります。

SQLiteデーターベースはAccessの上限が2GBなのに対し、4GBまでと要領が大きいのが魅力です。

ドライバをインストールして、テーブルとしてリンクすれば、AccessDBと同じようにクエリでもフォームでもドンと来い!

但し、ODBCドライバのせいか、ちょと遅いです。


①まず、ODBCドライバをダウンロードします。

ここから(ACCESS2003は32ビットなので”SQLiteODBC.exe”をダウンロードします)
http://www.ch-werner.de/sqliteodbc/


②ダウンロードしたEXEファイルを実行すると、インストールが始まります。

ガイドに沿って、インストールします。


③DSNに登録するためにODBCデーターソースアドミニストレータを起動

するわけですが、ここで注意!普通に起動(スタート → コントロール パネル → 管理ツール → データソース(ODBC))すると

Windows7では、64ビット用のODBCが開いてしまいます。32ビット用と64ビット用、ODBCは別なのです。

スタートメニューの下にある検索窓に、下記をコピペしEnterを押すことで32ビット用ODBCを起動してください。

%systemdrive%\Windows\SysWoW64\Odbcad32.exe

システムDSNを開くと、すでにSQLiteドライバが表示されている場合はそのまま閉じてOK。

無ければ追加ボタンから追加してください。


④Accessの方の設定を行い、SQLiteデーターベースに接続してテーブルをリンクします。

ファイル>外部データーの取込み>テーブルのリンクをクリック。

表示されたファイル選択ダイアログの「ファイルの種類」を「ODBCデーターソース()」にします。

コンピューターデーターソースタブから用意されたSQLite DBのバージョンにあわせて

SQLite又はSQLite3を選択しOKボタン押下。次の画面で「BROUSE・・・」ボタンを押し、SQLite DBを選択。

OKを押すと、テーブル選択画面が表示されますので、リンクしたいテーブルを選択しOKを押すと、完了です。

 

以上

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

アクセスクエリで

「式が正しく入力されていないか、複雑すぎるため評価できません」

というエラーメッセージが出た際のありがちな原因をリストアップします。

原因① 「文字列」型の数値を計算しようとしている。

SUM関数などの集約関数にかけているカラム、本当に数値形式ですか?

文字列形式の数値の場合、「Val()」関数で数値に置換しないと計算できません。

よって上記のエラーとなります。

原因② 「数値」型の数値にVal関数をかけている。

もともと数値型のものをVal関数で数値にしようとしてエラーが出たことがありました。

ご確認ください。

大抵は複雑すぎるというより型が原因の事が多いのです。型をご確認ください。

以上

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

拡張子.mdbファイルで使っていたモジュールをスピードアップの為に

Access2007の拡張子.mccdb形式に変更した後実行した際

タイトルの通り「データベースの形式”~.accdb”を認識できません。」が出ました。

忘れた頃にまたやりそうなので、健忘録として残しておきます。

Continue Reading »

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

現在Access開発をしており、スピード問題に絶賛悩み中。

健忘録をかねて、Accessのスピードアップ処方をまとめてみます。効果の程はケースバイケースです。Just Try

<ケース:データ取込み編>

レコード数10万件以上のデータ取込みで時間がかかる場合。

Access搭載のファイル取込み機能を使うべからず。

Access以外のファイルを取込む際に、ファイル→外部データの取込み→インポートを使ったり

上記に相当する「TransferText acImportDelim」をマクロで使っている場合は結構時間がかかります。

面倒ですが、VBAやJavaScriptでADOを呼び出して取込みをしてみてください。サンプルコードはリンク先にあります。

②データーベースの最適化を実行する。

特に大きいDBになると、最初は順調だった取り込みが、回を重ねて重~くなり最終的にはエラーが出ることがあります。

エラー「データベースとして開くことができませんでした。アプリケーションで認識できないデータベースであるか

またはファイルが破損しています。」

AccessDBは上限が2GBまで。1GBを超えたあたりからこういうエラーが出やすくなります。

原因は破損です。Accessの修復ウィザードを実行すれば少し解消するでしょう。

が、あまり良い状態ではありませんので頻繁にバックアップをとるようにしましょう。

(2003修復ウィザード : ツール→データーベースユーティリティー→データーベースの最適化)

(2007修復ウィザード : Officeボタン→管理→データーベースの最適化)

③テーブルを別のファイルに分ける。出来ればMDE形式にする

フォームやクエリやDBが混在している場合、重いDBを別のファイルに外だしして

テーブルのリンクで繋ぐようにするとパフォーマンスがよくなる場合があります。

また、DBの形式をMDBではなくMDEにすると、少し早くなる場合があります。

取込みが早くなるというより、単純な検索クエリに多少の効果がありました。

(まずは、ツール→データーベースユーティリティ→データーベースの変換を表示し、

現在のファイル形式が「Access2002-2003ファイル形式」より古いバージョンの場合、これ又は以降のバージョンを選択して変換。

変換したファイルを開き、ツール→データーベースユーティリティ→MDEファイルの作成をクリック)

なお、MDEファイルはフォーム等が作れないテーブル専用の形式になります。

<ケース: 帳票フォームを開くのが重い>

①ACCESSの形式をあげてみる。

何百万レコードも表示するサブフォームが含まれている場合、開くまでにだいぶ待ち時間があっていらいらします。

Access2000形式から2007形式に変えてみたところ、実際の開くまでにかかる時間は変わらなかったのですが、

2007形式は早い段階でサブフォームにデータが表示され始めるので、体感速度が大分早く感じました。

②サブフォームかリストビューか・・・

サブフォームをいくつも表示するフォームの場合、VBAで1回だけSQLを実行して振り分けた方が早い場合もあります。

WHERE句や結合が複雑かつ、最終的に表示する件数が少なく、複数のサブフォームに振り分け表示する場合に有効。

逆にレコード数が多いサブフォームが1つのみという場合はサブフォームのままにしておいた方が早いです。

<ケース:クエリが遅い場合>

 ①Index(もくじ)を作成する

大容量のテーブルだと単純なSelectクエリでも実行に時間がかかります。

Where句の条件にしているカラムについて、Indexファイルを作成しておくと早くなることがあります。

Index作成用にクエリを新規作成しSQLを書いてIndexファイルを作成「create index 適当に命名  テーブル名(カラム名)」

なお、Indexが作成できるのはテーブルだけです。クエリにはIndexをつけられませんのでご注意ください。

単純なクエリなら効果がありますが、結合の多い複雑なものだと逆に遅くなることもあります。

 ②集約関数は都度実行する必要はあるのか?

クエリが重い場合の犯人はたいていGroupByです。何百万件もあるなら集約に時間がかかるのは当然です。

これをフォームやファイルを開く都度動的に行う必要がないなら、日を決めてどこかテーブルUpdateして

そちらを参照するようにすべきでしょう(当たり前ですが)

<ケース:Access2013の場合>

Excel2013の記事でも書きましたが、「ファイルの保護」「保護の解除」の処理が異常に遅いらしいです。

これはAccessでも同様で保護不要であれば外した方がいいかもしれません。

以上でした。

おまけ:「SQLiteは早い」という噂をどこかで聞いた記憶があり、勝手に期待して試したらぜんぜん遅くてガッカリした。

      SQLiteは早くても、SQLiteのODBCドライバはそうでもないみたい・・ 400万レコードあるせいかもしれないが。

 

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

以前Access2003で作り、問題なく動いていたボタン等が
Access2007にしたとたん動作しなくなったという問い合わせがありました。

Googleで検索したら、似たような事例がずらっと出てきました。困りますね(–;)

以下、2通りの方法が考えられます。。
Continue Reading »

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

アクセスDBに接続するコードで、エラーが発生しました。

「パラメータが少なすぎます。6 を指定してください。」

意味がわからず悩んだのですが、解決したので載せときます。

ユニオンクエリです。 Continue Reading »

-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

会社で月イチでアクセスDBにCSVデータをアップロードする作業があります。

アップロードは、アクセスフォームのボタンを押すだけ。

するとアクセスVBAの下記のコマンドが実行され、CSVファイルの内容がテーブルに追加されるわけです。

DoCmd.TransferText acImportDelim, “定義名”, テーブル名, file, False

駄菓子菓子、30分くらいかかるのですよ!なんせ33万4千レコードもあるわけでね・・。

Continue Reading »