• ベストアンサー

データベースの不具合について

初歩的なことをお聞きします。 過去に、データベース(MDB)を使用したアプリを外注に作ってもらったのですが、なかなかうまくいきません。 現象はMDBが壊れたり、MDBのテーブルやクエリ自体がすべて消えてしまったりしています。なんでだからさっぱり分かりません。 過去にMDBが壊れやすいというのは聞いたことがあります。ただ、スタンドアローンで使用していますしそれほど付加をかけていないように思われます(外注談)。また、外注からはソフトでDBを壊すことは出来ないという回答も頂き、Windows2000のSP3にして様子を見てくれといわれました。 元々設計から開発まで外注任せにしていたせいもあり、そのソフトの構造を良く理解しておりません。 まず、どういった調査が必要か、または外注にどういうふうに言って対応してもらったら良いか教えて頂けないでしょうか。(過去の経験談でも構いません) 開発言語はVB6(SP5)です。(Jetを使っています) 何卒宜しくお願いします。

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

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 VCでMDBのDBを操作するプログラムを作っています。  外注の人に以下の点を確認してみてください。 1.プログラムのどこかでVCからMDBを最適化していないか。 2.例外処理時やエラー時のクローズ等は完璧か。 3.ビギンセッションとコミット(ロールバック)を正しく行っているか。  1については、MDBは「最適化をVCから行ってはいけません」。テーブル情報以外の情報がすべて失われてしまいます。  2については、「例外」と呼ばれる特殊なエラーが発生したときに、正式な手順を踏まずに強引に終了したりすると、MDBのテーブル構造が壊れる可能性があります。  3については、マイクロソフトのライブラリの仕様だかバグだかにより、これやんないとMDBに正しく読み書きできないことがあります。  また、実際にMDBを運用している人に、定期的に最適化を行っているかも確認してみてください。  MDBは使ってるうちにゴミが溜まっていくので、ファイルが肥大化するごとに定期的に最適化する必要があります。  それから、「ソフトでDBを壊すことは出来ない」というこの言葉は、ちょっと自信過剰なんじゃないかと思います。  どういう経由でMDBを開いてるのか知りませんが、壊れるときは壊れます。

i-miyo
質問者

補足

早速の回答ありがとうございます。以下に補足させて頂きます。 1.についてソフトの開発言語はVBですがVBで最適化するのもまずいんですかね。 現在の仕様では一日一回行っております。詳しい情報と回避方法があれば教えて下さい。 3.良く分かりません。詳しい説明があるところを教えて頂けないでしょうか。

その他の回答 (6)

  • driverII
  • ベストアンサー率27% (248/913)
回答No.7

#6の回答は少し質問の趣旨とずれてしまったようですね。 失礼しました。

  • driverII
  • ベストアンサー率27% (248/913)
回答No.6

このケースはまず障害をうまく切り分ける必要があると思います。 「MDBが壊れたり、MDBのテーブルやクエリ自体がすべて消えてしまったりしています」。 ここで、どのタイミングで壊れるのか。必ずか、たまにか。 出来れば日時の記録をとって、外注と話をしましょう。 Windows2000のSP3にして・・・ マシン環境が書かれていないので、状況が良く見えませんが。 サービスパックの所為にして逃げるのはへっぽこSEの常套手段です。 契約上出来れば外注を呼び出し、直るまで缶詰ですね。

noname#25358
noname#25358
回答No.5

>DAO、ADO?で用意されているメソッドでは問題ないんですかね。  それは分かりません(^_^;  Win32APIというのは、DAO、ADO、RDOその他含めてという意味でした。

noname#25358
noname#25358
回答No.4

1.についてですが、VBでも、MDBを操作するには結局Win32APIなどを利用することになり、これらはCと変わりません。  VBとVCを読み間違え、例外の話をしてしまいましたが、VBに例外エラーはありません。すいません(^_^;  3は、これはプログラマーでないと話が通じないと思います。  つまり、MDBの操作手順として定められた正しい手順を使っているかどうか、ということです。

i-miyo
質問者

補足

度々で申し訳ありませんが再度質問があります。 先程Win32APIとありましたが、これはWin32APIの問題であって、DAO、ADO?で用意されている メソッド(RepairDatabaseメソッド、CompactDatabaseメソッド )では問題ないんですかね。 宜しくお願いします。

  • driverII
  • ベストアンサー率27% (248/913)
回答No.3

外注任せにしているというのは、不安材料ですね。 結局、構造を理解できていないと、外注を責めることもできません。 また保守もできませんね。 MDBが壊れやすいというのは、よく言われていますが大抵の場合原因があります。ユーザの誤操作や、プログラムの不具合によるメッセージに対してのユーザの誤操作が原因になることが多かったようです。 プログラム納品時には、通常設計資料などを納入する契約があるはずですが、それらはどうなっているのでしょうか?設計資料があれば構造もわかると思います。 無ければ、そのソフトによって業務が止まるなどの問題が起きている場合にはその状況(問題が起こる頻度等)を書面にして、外注に責任を取ってもらうしかないでしょうね。上司や会社の営業などに相談するのも良いかもしれません。

i-miyo
質問者

お礼

早速の回答ありがとうございます。 確かに構造を理解していないと、色々と厄介ですね。(反省してます) また、相手からの納品物で、構造仕様書(とあるがほとんど機能仕様書)とモジュールぐらいです。ソースを解析するには手間暇が掛かりすぎるので実際行っておりませんが、最悪のことを考えて今から準備が必要ですかね。トホホ。

  • redsky
  • ベストアンサー率18% (66/360)
回答No.2

まず、契約書を見直してみたらどうでしょうか? 契約書の中にはバグ発生時の処置や保守についての項目があると思います。 それに沿った形で対応してもらえばいいと思います。 MDBがどういう条件のときの壊れるかは、マイクロソフトでさえよくわかって ないです。いわんや、その業者がわかるわけないです。 自衛策としては、定期的にバックアップをとっておいて、壊れたときに 備えるしかないです。

i-miyo
質問者

お礼

早速の回答有難うございます。 契約書の方確認してみます。といっても何処にあるのやら(笑) やはり壊れる時は壊れると考え、壊れた時の対処方法を重んじるべきなんですかね。

関連するQ&A

  • データベースアクセスで。

    VBとAccessを使用してデータのやりとりを行っています。 Data1を貼り、DatabaseNameを設定するところまではうまくいきましたが、RecordSourceプロパティをクリックすると「データベースの形式'C:\xxx\xxx.mdb'を認識できません」と表示されてしまいます。 別DBを設定すると上記の現象がでないので、Accessが原因だとは思いますが、VBを使用する際の注意点などあるのでしょうか? 【環境】WinXP SP2 VB6.0 / Access2000です。

  • VB6かVB.netか

    初歩的なことですが教えて下さい。 現在、VB6(SP5)で開発したアプリ(製品)があります。これはJet(Access2000)を使用したDBや自作のActiveXを使用して構築されております。今度この製品の改良を行う予定で、新規開発(但し使えるものは流用したい)を考えています。ここで使用する開発言語をVB6かVB.netのどちらにするべきか悩んでいます。世の中の流れが.netに進んでいる為.netで開発した方が良いとも思いますし、その反面VB6で開発したアプリが今後発売されるOSなどの環境で使用できなくならないのであれば使い慣れたVB6にしようかなとも思っていいます。何か良きアドバイスなどあれば教えて下さい。

  • mdbがとじれない

    VB6で開発をしています。 DB変数A = OpenDatabase(【mdb名】) Set QUERY変数B = DB変数A.CreateQueryDef("") QUERY変数B.SQL = SQL文 QUERY変数B.Execute (中略) Set レコード変数C = DB変数A.OpenRecordset(SQL文2) (中略) Set DB変数A = Nothing といった処理を行っています。 この処理を繰り返すのは問題ないのですが、 この処理で使用している【mdb名】はレコードロックされたままになってしまいます。 どのように修正したらよいのでしょう?

  • Visual Studio 2015 無償版

    Visual Studio 2015 無償版をインストールしました。 目的はVB6 pro で作成したアプリがあってC# へ移植するつもりです。 しばらく離れていたので、開発環境の時代推移が良く判っていません。 移植しようとするアプリには jet DBengineを多用しています。 Visual Studio 2015 で jet DBengine は使えないようです。 データーベースそのものを .mdb から別のものに移すことはやぶさかではありません。 問題はVisual Studio 2015 には jet DBengine に代わる engine があるのでしょうか。 デスクトップアプリなので一般のwindowsユーザーが使用できないと困ります。 固定長ファイルを作成して独自のDBを組むの避けたい。 昔の概念で恐縮ですが、VB6時代はプロフェッショナル版を買わないとDBを扱えなかったので 今でも同じような状況なのか把握していません。 Visual Studio のプロフェッショナル版や有料のソフトを買う気はありません。 アドバイスを頂ければ助かります。

  • webサーバーにデータベースを置いて処理したい

    VB6.0で作成したソフト(DBはAccessのmdb)があり、 それを、ネットワークに対応させたいのですが、 どうすればいいでしょうか? イメージとしては次のようなことが出来るようになればと思っています。 端末Aと端末Bの両方からwebサーバーの同じDBを更新 (端末AのIEを使ってHPからwebサーバーのDBの更新 端末BのVBで作成したソフトでwebサーバーのDBの更新) 端末A[IE]←→webサーバー[HPとDB]←→端末B[VBで作成したソフト] なるべく元のプログラムを変更したくないので、 DBとの接続処理だけの変更ですめば嬉しいです。 よろしくお願い致します。

  • クライアントとサーバーの接続確認方法について

    VB2005とSQLとSERVER2005の接続について 以下のような環境で動作するクライアントのプログラムを開発しています。 「DBサーバー」 WindowsXPSP3 DB:SQL-SERVER2005 「クライアント」 WindowsXPSP3 開発:VB2005 上記、クライアントでたまに、スタンドアローンで動作させる必要があるため、 スタンドアローンの場合、サーバーへはアクセスしないようにしたいのですが クライアントとサーバーが接続しているか確認したいのですが VB2005でどうすればいいでしょうか? 現状ですと、スタンダローンで動作していても、サーバーにアクセスしにいき タイムアウト(?)するまで、待っている状態でいます。 待つことをやめたいので、スタンドアローンで動作している場合、はアクセスしに 行かないようにしたいのですが。 どうか御教授ください。よろしくお願いします。

  • データベースロック(VB)

    お世話になってます。 VB6.0+ACCESS97 ADOを使用してます。 複数ユーザーで使用する為、データベースにロックをかけたいのですが いろいろ本なので調べましたところDAOなら set db = DBEngine.OpenDatabase("c:\~~.mdb",True) というようにExclusiveプロパティをTrueに設定すれば いいみたいですが。これと同じことをADOでは どのようにすればよろしいのでしょうか? VB初心者の為、ADOしかわからないもので(^_^; なにか良いアドバイスがあればお願いします。

  • テーブルのコピーについて

    VB初心者質問です。 開発環境 VB6 SP6 WIN2000  VB6を使用しテーブルをコピーしようと思っています。 サイトが見つけられませんのでどなたかアドバイスお願います。 (内容) a.mdbとb.mdbの2つがあり、それぞれaaaテーブル があります。(構造は同一です) a.mdbのaaaテーブルをb.mdbのaaaテーブルに上書きコピーするにはどのようにすればよろしいですか? よろしくお願いします。

  • 顧客データベースの開発環境の選択について教えてください

    現在、ある特定業界向けに顧客管理と営業支援を兼ねたパッケージソフトを企画しております。パッケージソフト開発ははじめての経験でお尋ねします。 ユーザーが使用するレコード数は最大で5万件程度と考えております。 想定 販売価格 30万円程度、年間販売想定数 50本くらい 使用するユーザー LAN環境で使用することを想定 5~10名/パッケージ その場合、いくつか選択枝があるのですが、どれを選んでいいのかもうひとつわかりません。以下のような選択枝があると思うですが、特にパッケージソフトの開発の観点から教えていただくと助かります。 ■選択枝1 データベースソフトオンリーで開発 ●アクセスやファイルメーカーで開発 その場合配布に問題がでそうです ■選択枝2 DBソフト+SQL系DBで開発 例 access + MYSQL or PostgreSQL or SQL sever ■選択枝3 プログラミング言語 + +SQL系DBで開発 例 VB + access(DBのみ) この場合どのような組み合わせがよいのか? ソフト開発のプログラミング言語は、delphiがよいという話も聞いております。 DBについては、コストを抑えたいので、オープンソース系のDBやaccessでどうかな?と思ってします。 以上ご教示いただけます様お願い申し上げます。

  • VBでデータベース構築

     このたび、配布型データベースを構築する事になり、質問させていただきます。  今まで私は、某カード型データベースソフトを使用しておりましたが、新たに新規から作り直すことになりました。システムが古くなり、近いうちに作り直さなければならない事、ソフトウエアに既存するシステムしか作れない事(使用環境としてそのソフトが入っていないといけない)などが原因です。  上記理由によりDB構築に使用するソフトを検討しているのですが、まずデータベースソフトということで真っ先に浮かんだのがAccessなのですが、配布型ということで目をつけたのがVBです。今までにテキスト加工ソフト等作成・配布でVBプログラムの経験はあります。  そこで質問なのですが、下記条件を満たすソフトとしてVBは妥当か等ご意見や、VBのこのバージョンで使用できるなどご助言を頂ければ幸いです。よろしくお願いします。 ●データ入力は親DBにて行い、定期的に不特定多数の子DBにテキストもしくはエクセル形式にてデータ配信を行う。 ●子DBはネットワーク内外を問わず、時にネット環境を持たない端末での使用も想定する。(その場合はデータの受け渡しはフロッピーなど記憶端末を使用する) ●子DB使用時に、このソフトが入っていないと動かないなど制限をつけない。 ●子DBにおいて、検索・抽出、一覧表作成、集計など一般的なDB機能をつける。 ●データ件数は何万件もある事を想定する。 ※ 現状環境としてはVB6.0 LE、Access2000がインストールされていますが、バージョンアップも視野に入れております。