アプリ版:「スタンプのみでお礼する」機能のリリースについて

visual web developerを使用してwebアプリケーションを作っています。
住所氏名一覧表に、
あらたに住所氏名を加えていく入力フォームを作成しています。

すべてのデータにIDを自動出来に加えたいのですが
元データをXMLファイルにすると
自動でIDをふる方法がわかりません。

元データをACCESSファイルにすると
データの「登録」ボタンを押した際
”別のプロセスで使用されているため、プロセスはファイル××にアクセスできません。”
と出てしまいます。

できれば後者の方法(ACCESS形式)で運用したいのですが
のどようにすればいいのでしょうか?
教えてください!

以下は「登録」ボタンのコードです。

Protected Sub Button_Add_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button_Add.Click
' データベースファイルのパスを定義する
Dim UpFolder_URL As String = "~/Chap4/Upload_data/"
Dim UpFolder As String = Server.MapPath(UpFolder_URL)
Dim DBFile As String = UpFolder + "database.mdb"

' データベースのデータを読み込む
Dim albumDS As New Data.DataSet()
albumDS.ReadXml(DBFile)
Dim table As Data.DataTable = albumDS.Tables("item")

' 新しい行をテーブルに追加する
Dim newRow As Data.DataRow = Table.NewRow()
newRow("Date") = DateTime.Today.ToLongDateString()
newRow("Name") = Name.Text
newRow("Contents") = Contents.Text
newRow("Add") = Add.Text
newRow("Method") = Method.Text
table.Rows.Add(newRow)


' データをデータベースファイルに書き出す
albumDS.WriteXml(DBFile)

' GridViewの表示を更新する
GridView1.DataBind()

End Sub

A 回答 (2件)

mdbファイルはデータベースファイルですから、ODBCとかで接続して読みだす必要があります。


XMLファイルのようにテキストファイルを読み込むのとは違った手順が必要です。
そのあたりきちんと学習すれば、すくなくとも「別プロセスで~」なんてエラーはでなくなります。

このプログラムはXMLファイルならそれなりに動いてるんですかね?
であれば、データを追加する前に、読み込んだデータの中のIDの最大値をまず取得してそれに1足したIDをあたらしいデータにあたえればいいだけの話のような気がします。
ただし、Webアプリは複数の人が同時に操作することを前提に考えないといけないので、ほぼ同時にデータの追加が行われても同じIDが追加されたりしないように工夫する必要があります。
Application変数をうまく使ってロックかけたりするとか。

ま、本来的にはSQLサーバーのようなデータベースをきちんと使うほうがよいと思います。
そのほうが参考になる資料等も多くでてますしね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
XMLファイルではそれなりに動いているのですが
IDを自動的にふる方法が分からず
mdbに逃げ込みました。
データベース形式としては
XMLファイルのほうがいいんだろうなと思いながらも。。。

SQLサーバーを利用したいとは思ってるのですが
まだそこまで手が届いていません。。。
(つたない知識で勉強しては挫折を繰り返しています。)

>データを追加する前に、読み込んだデータの中のIDの最大値をまず取得してそれに1足したIDをあたらしいデータにあたえればいいだけの話のような気がします。

上記方法試してみたいと思います!
そう大人数で頻繁に使うものではないので
対応できそうです!

ありがとうございました!!

お礼日時:2011/11/11 16:00

WebアプリでACCESS MDBというのもアレですが、まあ手近に使えて、一般の方でもデータ操作が簡単ということで。


.NETのデータハンドリングについては、進化の歴史みたいなものがあって、新しいものから順番にざっと

■Entity Framework(VS2008 SP2/VS2010)
■LINQ(VS2008 SP2)
■DataSourceコントロール(VS2008)
■TableAdapter(VS2005 ADO.NET2.0)
■DataAdapter(VS2003 ADO.NET1.1)
■SQLConnection/SQLCommand

とあるんですが()、新しいもの2つはMDB未対応です。このころ、組込用途のSQLサーバが出たのでMDBはオワコンになりました。
DataADapter以降であればウィザード画面も用意してあり、非常に簡単に接続や定義が行えるようになっています。

コードを拝見したところ、DataTableをお使いのようなので、「慣れ」からいえばTableAdapterを使うのがベストマッチかと思います。
TableAdapterというのは、MDBへの接続情報、基本クエリ(追加・削除・更新)およびユーザが利用する各種の独自クエリ、およびそれによって生成されるDataTableをまとめたもので、テーブルやビューごとに作成でき、また制約なども定義できるという便利なものです。

こいつでTableアダプタクラスを作り、そのオブジェクトに作成しておいたクエリを打てば、当該のDataTableが返るので、あとは普通にプログラムします。
追加や更新の場合は、DataTableのオブジェクトをTableAdapterに渡してUpdateすれば、自動的にに判断されて処理されます。

ウィザード系の操作は、書籍やWebにリソースがありますので、以下の言葉でググってみてください。

TableAdapter ADO.NET2.0 DataSet DataTable 型付きデータセット

DataAdapterはVS2005時代のものなので、できればSQLDataBase CompactとEntity Frameworkを使った方がいいと思うのですが。。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
Aceess愛好者で多くの社内システムをAccessで作っていたので
思わずデータベースをmdbファイルにしてしまいました・・・。
いつかは行き詰まってしまいそうだと
薄々思ってはいたのですが・・・。

TableAdapter見てみます!
ありがとうございました!

お礼日時:2011/11/11 15:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!