トップ回答者
Accessのデータが読めない

質問
-
在庫システムで使用していたPCが壊れたので、使用していないPCに在庫システムを移行することになりました。
前任者からのマニュアル通り上司が行ってくれたのですが、exeファイルと、Accessのファイルと、CrystalReportを入れれば動作するとあったので
その通りしても、なぜかAccessにある職員データだけ読めないのです。exeファイルを起動すると、VBで作ったと思われるフォームが起動し
本来はバーコードリーダーでCD,DVDなどのバーコードを赤外線で読んで、個数や使用者をドロップダウンから選びます、
Accessの職員データと部名データだけは、スタンドアロンPCからサーバーに接続しAccessDBをコピーし更新をします。これはAccessの職員テーブルをみると
ちゃんと新しい方もテーブルにあるので、うまく行ってます。
問題はなぜ職員データがVBのフォームに表示されないかが不明です。
とりあえず、前任者の方が使用していたPCを見つけ、VBのソースを探していますが見つかりません。自分で調べ、dllファイルをexeファイルと同じフォルダに入れれば
うまく動作するとあったので、dllを入れましたが同じでした。
前任者の方はご自身のVSを使っていたようなので、評価版のVSをインストールし、VB(2008Express)を使用できるようにはしました。
前任者のPCのLocalSetting¥ApplicationData¥Microsoft¥VBExpressの中に在庫システムのexeファイルを見つけました。
ソースをみてもVBは少ししかわからないのですが、何が原因でアクセスの職員データがフォームに表示されないのでしょうか?
VBは初心者なので、どうぞよろしくお願いいたします。、
回答
-
対象の Access データベース ファイルは消耗品と職員で合わせて一つなのでしょうか?それとも、それぞれに一つずつあるのでしょうか?
また、実際に Access で開いて最新の職員データが入っていることを確認したデータベース ファイル以外に、同じようなファイルが他に存在していないでしょうか?
そもそも、件のアプリケーションは正しく動作できているけれども、肝心のデータとして別のものを読み込んでいて、データが空っぽという可能性もあると思います。
別のデータベース ファイルとか、実際に読み込んでいると思われるデータベース ファイルとかに、空の職員データが混じっていたりしませんか?
ソースがないとしても ILSpy のようなツールを使えばソース コードを生成することはできます。(残念ながら C# のみですが)
ソースを読みこなすスキルは必須ですが、アプリケーションがどういう動作をして、その結果職員データが空っぽになっているかを追うことはできます。
無償の逆コンパイラ「ILSpy」を利用するには?[C#] - @IT
http://www.atmarkit.co.jp/fdotnet/dotnettips/1055ilspy/ilspy.html
# 本当は前任者なり上司なりを捕まえて、根掘り葉掘り聞きだすのが筋なのでしょうが、上司は中身をまるで把握していないし、前任者は手の届かないところにいるということなのでしょうか。- 回答としてマーク 山本春海 2011年8月2日 5:39
すべての返信
-
職員データや部品データというのはテーブルのことでしょうか? もしそうだとすれば、Accessの他のテーブルは読めているのでしょうか?
また職員データのみ表示されないとありますが、その際に何かエラーが表示されるのでしょうか? それともエラーは表示されず、本来表示されるデータが表示されないということでしょうか?本当にそのAccessのデータベースを読みに行っているかは確認できていますでしょうか? 例えば、そのAccessのデータベースを削除した場合にVBで表示しようとすると、エラーが表示されますでしょうか?
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/ -
-
確認ですが、職員テーブル以外のデータはVBで問題なく表示されているのでしょうか?
今までいただいた情報を整理すると、
>エラーはでません。AccessのDBを同じフォルダから削除すると「DB Error」が表示されます。
以上より間違いなく当該のAccessのDBを見に行っていると思われます。
>エラーはでません。
VBから当該のテーブルもしくはビューを認識できていると思われます。もし認識できなければエラーが出るでしょう。
そうなると何らかの抽出条件が合っていないのかもしれません。ちなみにソースが無くてもアプリケーションの動作自体には問題ありません。AccessのVBAと違い、ソースをコンパイルして実行ファイルであるEXEが出来ているためです。
ただ、ソースがあると発行しているSQL等がわかりますので、問題解決に大いに役立ちます。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/ -
再度確認ですが、職員テーブル以外は表示できているのでしょうか?
もし全てのテーブルが表示できなのであれば、64bitの問題や、OLEDBの問題かもしれません。(エラーが出ていないのが引っ掛かりますが・・・)
(参考)
64bitOSで動作するアプリ作成の方法
http://social.msdn.microsoft.com/Forums/ja-JP/csharpexpressja/thread/0d2a3783-1263-4c9e-bc59-5fa15321d3dd/
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/ -
対象の Access データベース ファイルは消耗品と職員で合わせて一つなのでしょうか?それとも、それぞれに一つずつあるのでしょうか?
また、実際に Access で開いて最新の職員データが入っていることを確認したデータベース ファイル以外に、同じようなファイルが他に存在していないでしょうか?
そもそも、件のアプリケーションは正しく動作できているけれども、肝心のデータとして別のものを読み込んでいて、データが空っぽという可能性もあると思います。
別のデータベース ファイルとか、実際に読み込んでいると思われるデータベース ファイルとかに、空の職員データが混じっていたりしませんか?
ソースがないとしても ILSpy のようなツールを使えばソース コードを生成することはできます。(残念ながら C# のみですが)
ソースを読みこなすスキルは必須ですが、アプリケーションがどういう動作をして、その結果職員データが空っぽになっているかを追うことはできます。
無償の逆コンパイラ「ILSpy」を利用するには?[C#] - @IT
http://www.atmarkit.co.jp/fdotnet/dotnettips/1055ilspy/ilspy.html
# 本当は前任者なり上司なりを捕まえて、根掘り葉掘り聞きだすのが筋なのでしょうが、上司は中身をまるで把握していないし、前任者は手の届かないところにいるということなのでしょうか。- 回答としてマーク 山本春海 2011年8月2日 5:39
-
trapemiyaさん
>再度確認ですが、職員テーブル以外は表示できているのでしょうか?
はい、職員テーブルだけが表示されません。後媒体テーブル(CDやDVDなど)、在庫数テーブル、履歴テーブル、用途テーブル(保存用か送付用かなど)はすべて表示できますし
在庫数も計算はあってます。職員テーブルのみAccessではデータがありますが、VBのフォームには表示されません。
ただ、職員テーブルだけは、サーバーから異動があるたびにODBCで更新するようにはなっています。現在ちゃんと更新されたデータがAccessにあります。
totojoさん
AccessDBは1つのファイルです。全部併せて「消耗品DB」という名前です。同じようなDBはないと思います。exeファイルを保存しているフォルダにAccessDBを保存してますが
ほかにはありません。
前任者の方が辞めたので私が雇われたのですが、一応マニュアルはあるものの、画面ショットと、冒頭に記述している内容のものだけです。
前任者の方が使用していたと思われるノートを起動して、VBやVS関係のフォルダを探していますが、ソースファイル(プロジェクトファイル)が今のところ見あたらないのです。
DLLはたくさんありますが。どうにかならないんでしょうか?
お手数かけますが、よろしくお願いいたします。
-
> DLLはたくさんありますが。どうにかならないんでしょうか?
なので、それをtotojoさんのおっしゃっている「ILSpy」で
見てみれば、なにかわかるんじゃないでしょうか。
(今回の場合はexeをみることになりそうですが)
# Refletorは全部有償になってたんですね。知らなかった。
今後もメンテするならソースは絶対に必要ですし、
今回の不具合の検証も兼ねて新たにソースを用意するつもりで
腹をくくってやったほうがいいかもしれません。
不具合見つけても、ソース直した後に再コンパイルが必要でしょうし。
とりあえずC#になってしまいますけど、たしかVB.NETに変換するツールもあると思います。
現象からだけ推測するなら、職員データの検索条件が
あっていないと思うので、それはどういうSQL文でAccessDBから
持ってきているかわからないと解決しないように思います。