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
No.2
- 回答日時:
mdbファイルはデータベースファイルですから、ODBCとかで接続して読みだす必要があります。
XMLファイルのようにテキストファイルを読み込むのとは違った手順が必要です。
そのあたりきちんと学習すれば、すくなくとも「別プロセスで~」なんてエラーはでなくなります。
このプログラムはXMLファイルならそれなりに動いてるんですかね?
であれば、データを追加する前に、読み込んだデータの中のIDの最大値をまず取得してそれに1足したIDをあたらしいデータにあたえればいいだけの話のような気がします。
ただし、Webアプリは複数の人が同時に操作することを前提に考えないといけないので、ほぼ同時にデータの追加が行われても同じIDが追加されたりしないように工夫する必要があります。
Application変数をうまく使ってロックかけたりするとか。
ま、本来的にはSQLサーバーのようなデータベースをきちんと使うほうがよいと思います。
そのほうが参考になる資料等も多くでてますしね。
ご回答ありがとうございます!
XMLファイルではそれなりに動いているのですが
IDを自動的にふる方法が分からず
mdbに逃げ込みました。
データベース形式としては
XMLファイルのほうがいいんだろうなと思いながらも。。。
SQLサーバーを利用したいとは思ってるのですが
まだそこまで手が届いていません。。。
(つたない知識で勉強しては挫折を繰り返しています。)
>データを追加する前に、読み込んだデータの中のIDの最大値をまず取得してそれに1足したIDをあたらしいデータにあたえればいいだけの話のような気がします。
上記方法試してみたいと思います!
そう大人数で頻繁に使うものではないので
対応できそうです!
ありがとうございました!!
No.1ベストアンサー
- 回答日時:
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を使った方がいいと思うのですが。。
ご回答ありがとうございます!
Aceess愛好者で多くの社内システムをAccessで作っていたので
思わずデータベースをmdbファイルにしてしまいました・・・。
いつかは行き詰まってしまいそうだと
薄々思ってはいたのですが・・・。
TableAdapter見てみます!
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DataGrdViewに関連付けたデータ...
-
GridViewにバインドせずにデー...
-
【Excel VBA】先頭の「0」飛び...
-
.NET SqlDataReader のレコー...
-
C# データ配列から画像を作成す...
-
GridViewを自動的にスクロール...
-
EXCEL2000のマクロ(ADO)にてCSV...
-
VBAでページ番号、ページ最終行...
-
Listviewのデータを上から順番...
-
VBによる可変長ファイルの読み書き
-
GASでスプレッドシートの一番上...
-
ExcelVBAを使って、値...
-
VB.NETで DataRow()を利用して...
-
count(*)で取得した値をJAVAの...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
データ数をカウントしたいのですが
-
テキストボックスのvalueとtext...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelで指定した日付から過去の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel VBA】先頭の「0」飛び...
-
DataGrdViewに関連付けたデータ...
-
Listviewのデータを上から順番...
-
GASでスプレッドシートの一番上...
-
VBAでページ番号、ページ最終行...
-
.NET SqlDataReader のレコー...
-
GridViewにバインドせずにデー...
-
【ASP.NET MVC】一覧編集画面
-
ASP C# データベースから1行取得
-
MSFlexGridのデータ表示位置の設定
-
コンパイルエラーSubまたは...
-
C# データ配列から画像を作成す...
-
エクセルマクロ小数点桁数
-
DataGridViewで表示に制限をつ...
-
スプレッドシート 一括でQRコー...
-
GridViewを自動的にスクロール...
-
DBへの重複更新を防ぐ方法について
-
エクセルVBA、数式の入ったセル...
-
GoogleEarthのKMLファイルでラ...
-
VB DataRepeaterにて条件で表示
おすすめ情報