2012-04-18 6 views
1

私は、複数のユーザーが使用できるようにデスクトップアプリケーションを作成する段階です。私はこれに近づく最善の方法について何かアドバイスを求めています。同じファイルで作業する複数のユーザーのためのデザインに関するアドバイスを求める

スペック

に私は頻繁にマップされたネットワークドライブに使用されるファイルで私のモデルを持続します。 (これは道路や鉄道や川などの線形機能の設計用です)

さまざまなエンドユーザーがファイルに同時に接続して編集できる必要があります。例えば、ビリー・ボブはUS321という道路に取り掛かり、ルパートはI40に取り組んでいます。各道路のモデルは同じファイルに存在します。エンドユーザーは、申請者だけが所与の道路を編集できる道路名を「請求」することができます。 RupertはUS321を編集できませんが、Billy Bobはそれを主張していますが、RupertはUS321を参照することができます。ユーザーが道路データの編集を終了すると、ユーザーは申し立てを解除し、他のユーザーがそれを編集することができます。

シリアル化の制限?

シリアライゼーションについての私の理解は非常に限られています(私のプロフィールを参照)。しかし、オブジェクトとシリアライゼーションファイルの間に1対1の相関関係があるように思えます。したがって、私がこれを実装するためにシリアライゼーションを使用すると、その一部を要求することも、その一部だけを更新することもできないでしょう。 (これは正しいですか?ない場合は、その後、私は右、シリアル化を使用することができますか?)

ソリューション私はSQL Server Expressを使用して検討している、と私は社会の警告に興味があります、修正

を検討していますかこれについての肯定

エンドユーザーは、私がバックグラウンドでSQL Server Expressを使用していることを知る必要はありません。 (私はファイル拡張子を自分のアプリに適したものに変更するつもりだ)私はリストに道路をロードし、各道路は「主張可能」となるだろう。アプリケーションの他のインスタンスがそれに応じて反応するように、ロードを主張すると、それは複数の人が同時に編集できる共有MS Excelファイルのようなものですが(Excelに類似しています)、ロックすることができます個々のワークシート。

[編集]以下のMicah Armantroutの非常に有益な回答をご覧ください。だから私は中間のdbアプリケーションとしてMicrosoft Accessを使用することについて不思議です。

[編集]

結論彼らの役に立つ回答やコメントのみんなへ

感謝。ミカの答えは非常に役に立ちました。なぜなら、私は1つのサーバだけがファイルを制御することに制限されることに気付かなかったからです。今は完全に意味がありますが、私はそれを予期していませんでした。もし私がその道を歩いていたら、その方向に何時間も働いた後、私はそれを踏みにじりました。

私が最初にurbadaveのアイデアを読んだとき、私はそれを私がすでに考えていたものとして却下しました。しかし、それを考えた後、それは明らかに最も簡単なアプローチです。私はちょうどそれがファイルであるようにディレクトリを使用しますが、私のトップレベルのサブオブジェクトに対するユーザーの透過性を備えています。しかし、明らかに、私のモデル全体を単一のファイルにカプセル化するという魅力があります。

これは私が何をすべきかを決めたものです。urbadaveが示唆するように、ディレクトリに書き込むだけで始まります。その後、zipディレクトリに入れてテストし、ZipPackageクラスを使用して個々のシリアライズされたファイル(またはXMLファイル - ある日の別の決定)を抜き出して挿入します。

  • ポール
+0

SQLサーバーまたはデータベースエンジンはこのトリックを行いますが、行レベルのロックと、これをもっと簡単な方法で可能にするものがあります。 –

+0

すべての人がオフィスで同じネットワークに接続する予定ですか?このケースでは、ユーザーが「フィールド」に出てからオフィスに戻ることができるようにする必要がありますか? Access 2010の新しい「オフライン」機能は、ここで非常に役立つかもしれません。 –

+0

@ AlbertD.Kallal誰もが同時に接続されています。私は現在、チェックアウトを考えていません。 – philologon

答えて

1

私は仕事で素敵なデータベースへのアクセス権を持っているが、私はあなたが使用する1つの記事を参照してくださいだろう私の個人的なプログラミングのほとんどはデータベースを使用していません。私が過去に使ったトリックの1つは、ファイル拡張子が意味を持つことだということです。あなたの場合は、ファイル拡張子を利用してクレームを示し、マスターファイルへの書き込みを制御することができます。

あなたはそうです。それぞれの道路オブジェクトを独自のファイルにシリアル化したいと思うでしょう。マスターファイルは、これらの個々の道路オブジェクトをすべて保持するコレクションオブジェクトのシリアライズです。

ユーザーは、これらの道路ファイルを選択して開くことができます。ファイルを開く前に、ユーザーのアプリは拡張子(おそらくユーザーのID)を追加してファイルの名前を変更します。このように、ディレクトリスキャンを使用して、要求されたファイルと要求されていないファイルを見つけることができます。

マスターファイルは、ユーザーが作業中の道路で主張を解除したときにのみ書き込まれます。ユーザーのアプリケーションはすべての道路ファイルを開き、道路オブジェクトを使用してマスターオブジェクトを組み立て、このオブジェクトをマスターファイルにシリアル化します。終了すると、ユーザーのアプリは道路ファイルの名前を変更してユーザーの主張を解除します。

マスターファイルに書き込む前に、ユーザーのアプリはそのファイルの名前を変更して、書き込む直前であることを示します。ユーザーのアプリケーションが書き込む必要がある場合、ファイルの名前が変更されているかどうかを確認し、ファイル名が書き込み可能な名前に復元されるのを待つことができます。

これは私がこの仕様をどのように攻撃するかのスケッチです。がんばろう。

+0

ありがとうurbadave。しかし、ファイルをグループ化する方法としてディレクトリの代わりにZipPackageを使うのはどうですか?私は何かが編集のために主張されたときにマークする方法としてファイル属性をめくることができました。このアプローチに関する意見については、TIA。 – philologon

+0

私はOPCを知らなかったので、私はそれを調べました。私にそれを回してくれてありがとう。私はこれが優れた解決策だと思います!書き込みロックを提供するには、ファイルシステムを使用します。 OPCを使用して、文書パーツとマスター文書の関係を維持します。何よりも、.NETにはすでに組み込まれています。 – urbadave

4

SQLサーバーは、あなたが探しているもののために動作しますが、あなたは、複数のユーザーを持つことになる場合には、サーバになるようにマシンのセットアップを持っている必要があります。 SQL Server Expressを各マシンにインストールしておくと良いことはありませんこれは、ユーザーマシンまたはSQLサーバーの実際のサーバーのいずれかである可能性があります。現状の外でアクセス可能に設定する必要がありますこれを行うには、このチュートリアルに従います。

過去のWindows XP SP2を使用している場合は、ファイアウォールのポートを開く必要があります。以下の手順に従います。これについては、以下のリンクでも説明しています。限りデータを共有しているように私は他の人々の仕事を見て意味

http://blogs.msdn.com/b/sqlexpress/archive/2005/05/05/415084.aspx

。サーバーにSQL Serverをインストールしたいされていない場合は、MS Accessを使用することができたときに

http://www.techrepublic.com/article/should-you-use-sql-server-express-edition-or-microsoft-access-for-your-small-business-applications/6140859

+0

うれしいです。 MS Accessにはこの制限/トポロジモデルはありません。私がAccessを使用するように切り替えると、私の計画は機能しますか? – philologon

+0

あなたはサーバーを使用している限りですか?ユーザーにデータを共有してもらいたいのですか? –

+0

ミカ、いいえ、サーバーレスになるということです。私は、ユーザーがファイル内のすべてのデータをいつでも読むことができるようにしたいと考えています。私たちはAccessでこれを常に行い、多くの人が標準インストールの一部としてそれを持っています。だから、 "データを共有する?"という言い方をすれば、他の人の仕事をみんなに見せることができますか?その答えは「はい」です。あなたがそれ以外の何かを意味したら、明確にしてください。 – philologon

関連する問題