goo blog サービス終了のお知らせ 

YNのパソコンサポート日記

団塊世代でパソコンサポート業のYNです。主にAccessでデータベース作成管理を行っています。

棚卸(-_-;)

2012-11-26 18:29:01 | DB Access
 現在、ある会社の棚卸集計業務を行っています。

 在庫が10,000アイテム以上あって、実地棚卸結果を入力する作業をおこなっています。
去年までだったら、とにかく入力してしまえばもう結果が出るようになってますので
それで良かったのですが、今まで棚卸で使っていたAというテーブルは色々な問題があったため
別のBというテーブルで棚卸計算を行うことになったため、その移行業務も合わせて行わなければ
いけないため、ちょっといつもより時間がかかりそうな状況です。

 棚卸といっても、単価と数量を計算するだけではないのかと思われるかもしれませんが、通常の
市販商品だったり、自社製品であっても製品マスターに決まった単価があればそれでいいんですが、
今やっているところの製品の単価は、使用した材料(主に鋼材)の長さや重さによって使用料を計算し
棚卸単価を割りだすようになっています。去年まで使用していたAというテーブルには、そのデータが
記録されていたんですが、Bというテーブルにはまだ無いため、使用材料を調べたりそのデータを書き込ん
だりする作業が結構な作業量となっています。進捗状況はまだ3割程度です。

 12月中ごろまでには結果をださなければいけませんので、これからが勝負です。
しかし、いつも思うのですが、1~2年動いていない製品(デッドストック)もかなりあるため、在庫を
減らすべきなのでしょうが、忘れたころに受注がきたりするので、あればあったで助かるわけです。

 昔勤めていた大手企業では、トヨタ生産方式や、生産革新をやらされていましたので、必要以上の
在庫を抱えているのは良くないことだといつも言われていました。探すムダ、管理のムダとなる訳です。
必要なものを必要な時に必要なだけ、というジャスト・イン・タイムが理想だということです。この会社
でも、在庫を大幅に少なくして、限りなく受注生産となるようにした方がいいのでしょうが、なかなか難
しいのが実情です。



 

Access 設計について2

2012-10-22 19:35:45 | DB Access
最終的に検索するテーブルは一つにするということを前回書きましたが、たくさん連結したり計算式を埋め込んだクエリーを複数の抽出条件で検索するとかなり遅くなるということをたくさん経験しましたので、結局シンプルな構造が一番だなと思うようになりました。

 今やっているDBで一番件数の多いテーブルは10数万件ぐらいですが、売上テーブルで検索するとした場合、まず日付、顧客名、商品名、商品名カナ、商品区分、などで抽出することになりますが、同時にすべての抽出条件で抽出することもあります。その場合、連結クエリーだと、売上テーブルに、顧客マスター、商品マスター、商品区分マスターなどを連結した状態で、さらに合計金額やら消費税計算、締め日の計算などを設定したクエリーだと、抽出する度にその処理をしなければいけないので、遅くなるのは当然です。

 Accessの場合、CSシステムではありませんので、クエリーを実行する場合、クライアントにデータをいったん呼び出しで行うことになります。極端な話、一件だけ抽出したい場合でも、ほとんどのデータをネットワークで読み込むことになるようですね。CSシステムだと、問い合わせするとサーバーで抽出処理した一件だけをネットワークで読み込むため速くなるらしいです。(細かいことは私も良くわかりませんが。)

 とにかく今は、プログラムの技術的なことよりも、クエリーのスピードアップに一番力を入れています。
フォームを開くだけで10秒以上かかるのはやはりイライラします。できれば数秒以内で開くようになればいいと思います。

 最近経験したことですが、データは数千件なのに、あるフォームを開くのに1分以上もかかるフォームがありました。色々調べてみましたが、原因がさっぱりわかりません。他の数万件あるデータのフォームは2~3秒で開くのに何で??と思いました。一か月ぐらい原因が分からずに悩んでいましたが、そのフォームのデータは、すべてのデータをADOで一件づつ2~3のフィールドの書き換え処理をしていたことが分かりました。データDBは最初300MBだったのが、書き換え処理を行った直後は一気に500MBまでに膨れ上がり、その結果そのデーブルが断片化されてしまっていたようです。データを格納したDBを最適化したところ、2~3秒で開くようになりました。こんな初歩的なことに気が付かず的外れなところばかり調べていた訳ですね。やはり定期的に最適化することが必要なんですね。今更ですが・・・・




 

Access 設計について

2012-10-18 21:23:40 | DB Access
 Accessの設計について、私の考えていることを書きます。

 ご存じのようにAccessはリレーショナルデータベースです。マスターテーブルやデータを格納するテーブルを作ったら、商品コードなどのキーでいくつかのテーブルを連結して表示させることが出来ます。Excel場合、一枚のシートにデータを作っていきますが、複数のシートを連結するのは、簡単ではありませんので、Accessでないと出来ない便利な機能です。

 たとえば売上記録のテーブルには合計金額など計算で求められるデータはテーブルには作らなくていいのです。顧客などのマスターのデータも、顧客マスターから連結して表示することが出来ます。

 もちろん私もこの便利な機能を使い、いろいろなデータベースを作ってきました。しかし、色々なものを作っていくうちに、たくさんのテーブルを連結したり、計算式などを多用したクエリーだと、ネットワークでデータが多い場合、表示に時間がかかることが多くなってきました。

 最近では、データ量が多いテーブルの場合、顧客や、商品のマスターデータも、合計金額なども売り上げテーブルにすべてマスターからその都度書き込むようにすることが多くなりました。最終的にあらゆる検索条件で検索しても、一つのテーブルだけですみますので、結構スピードも速くなると思います。もちろん、検索条件に使用するフィールドにはインデックスを作るようにしています。

 長年サポートしている会社のデータベースでは、クエリーをたくさん連結しているものが多く、結構遅くなってきていて、スピードアップが課題となっていますので、少しずつ改良して、単一テーブル方式に切り替えていこうと思っています。

 つまり、売上データを一件追加する際に、商品cd 商品名 単価 合計金額 顧客cd 顧客名 消費税率 締日 など、検索のとき必要となりそうなものはすべてマスターデータから売上テーブルにほとんど書き込んでいきます。こうすると検索する場合、速くなりますね。

 これからも、またこんなことを書いていきます。


 

最近のAccessの仕事

2012-09-30 19:20:02 | DB Access
 今一番長くサポートしている会社のAccessシステムも10年を超えています。

 前にも書きましたが、最近ほとんどのパソコンをWindows7の新型パソコンに変更したため、画面解像度がワイドタイプになりました。
今まではXGAに合わせてフォームを作っていましたが、今はやっとワイドタイプのフォームに変更しつつあります。

 当然ですが、帳票フォームなどの場合、横に表示できるデータが増えて見やすくなってきました。それでも一部のフォームは一度
に表示する項目が多く、ワイドタイプにしても横スクロールして見ることもありますが、前よりもましになってきました。

 これからは、自分で使っているものや、他のお客さんのシステムもワイド化しているところです。一部古いパソコンで見ることも
ありますが、その場合はスクロールして見ればいいかなと思います。



 一週間前にまた知り合いのお店から新しい仕事を受けました。販売 納品 請求管理システムで、処理そのものは良くあるもので
今までも相当やってきましたので、難しい訳ではないですが、困ったことがありました。

 今使用されているパソコンがWindows98で、ソフトは弥生販売2001を使っていることです。マスターデータなどを弥生から取り出すため、
パソコン内にtxtファイルにエクスポートできたのですが、USBのハードディスクが認識しない上、フロッピィディスクも壊れていて、
LAN端子もありません。結局取り出すことが出来ず、また後で考えることにしました。Lanアダプターを付けるか、外付けHDのUSBドライバー
を探すかして、何とか取り出さなければいけません。最悪、ハードディスクを外してアダプターケーブルを接続して読むしかないのかも
知れません。

 今時Win98はつらいですね。せめてWinXpなら全く問題ないんですがね・・・・・・



Access について

2012-08-09 21:53:56 | DB Access
 Accessというソフトは、データベースを作成するためのソフトであることはご存じだと思いますが、
データベース作成ソフトとしては、一番取っつきやすく、便利なソフトだと思います。

 スタンドアローンで使用するのはもちろん、ネットワークで使用する場合でも20台以下(Win7の場合)
の事業所などでは最適なデータベース作成ソフトであると言えます。ほかの選択肢は無いのではないかと
さえ思います。AccessはCS(クライアント・サーバーシステム)ではありませんので、あまり大規模な
ネットワークでは、クエリーなどもクライアントで実行するため、ネットワークのトラフィック負荷が大きく
スピードにも点で問題があります。大規模ネットワークで使用するデータベースは、やはりCSシステムの
SQLサーバーなどを使うしかないと思います。(私は使ったことはありませんが・・)

 私が今まで作成したデータベースで一番大規模なものは、ある製造会社の業務システムですが、
パソコンは15台ぐらいで、会社のすべての業務(生産管理、見積・受注・納品・発注・請求管理、会計管理)
が出来るようにしています。もう10年以上稼働していますが、今も定期的に行って改良を行っています。

 10年前に会社にいた頃は、生産現場の責任者として、生産・品質・労務管理が主な業務で、管理業務に
Accessも使っていましたが、ほとんどが家で作って会社で使用することが多かったので、会社ではAccessの
仕事は1~2割しかなかったと思います。今はパソコンサポートで、インターネット設定や、パソコン修理
ネットワーク管理、ホームページ作成などのやっていますが、80%はAccessのデータベース作成管理が主な
業務となっています。

 Accessでデータベースを作成するというのは、料理に例えると(ちなみに私は料理も好きですが)
自分の作りたい料理をイメージして、材料を買ってきて一から作るようなものだと思います。味付けや、
盛り付けも、自分の感性で好きなようにすることができます。従って、仕事としてやってはいますが、
ほとんど趣味みたいなものです。会社での仕事は上司や部下の対応に苦労することが多く、楽しい筈もなく、
むしろ嫌なことでしたので、今仕事でデータベースを作ることは、料理を作るように楽しい作業でもあります。

 これからも自分の出来る範囲で、楽しんで仕事をして行きたいとおもいます。でも最近はバンド活動も多く
仕事以上に忙しくなっていますが、それはそれでいいでしょうね。