- ベストアンサー
データセットのレコード更新がしたい
VB .Netでデータベースの追加・変更をしています。 データセットのレコードを追加できたのですが、変更がわかりません。 追加は・・・dtrow = dttable.NewRowで始まり、追加したい項目を書いています。 そして終わりは・・・ ''行を追加 dttable.Rows.Add(dtrow) ''データソースを更新 oleDa.Update(dttable) 変更はどうしたらよいのでしょうか?
- okkomu
- お礼率35% (59/167)
- Visual Basic
- 回答数3
- ありがとう数10
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>データセットのレコード更新がしたい データセット?データセットにはレコードはありません データテーブルにレコードがあります こんな感じ Dataset └─DataTable └─DataRowCollection 新規追加ができているなら更新は簡単です まず更新したいレコードを検索する 検索できたら、そのレコードをDataRowにて取得する その後、対象フィールドを上書きしてからDataTableのUpdateメソッドにて更新する [例] Dim dRow As DataRow '主キーにて検索(※123は検索項目値) dRow = dTbl.Rows.Find(New Object() {123}) If Not dRow Is Nothing Then 'フィールド更新 dRow.Item("hogehoge") = "ほげほげ" dTbl.Update() End If
その他の回答 (2)
- how-do-you-do
- ベストアンサー率56% (59/104)
こんな感じですかね Dim strConn As String '接続文字列 Dim oleConn As OleDbConnection 'コネクション Dim oleDa As OleDbDataAdapter 'データアダプタ Dim oleCb As OleDbCommandBuilder 'コマンドビルダ Dim strSQL As String 'SQL Dim dttable As DataTable Dim dtrow As DataRow strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\test.mdb" oleConn = New OleDbConnection(strConn) strSQL = "SELECT * FROM " & TableName oleDa = New OleDbDataAdapter(strSQL, oleConn) oleCb = New OleDbCommandBuilder(oleDa) dttable = New dttable oleDa.Fill(dttable) oleDa.FillSchema(dttable) dtrow = dttable.NewRow dtrow("日付") = "20050401" ''行を追加 dttable.Rows.Add(dtrow) ''データソースを更新 oleDa.Update(dttable) コマンドビルダは、データアダプタの「SelectCommand」を基にして 「InsertCommand」「UpdateCommand」「DeleteCommand」に自動でSQLを設定してくれます まだ慣れないうちは、このコマンドビルダを使用してもよいでしょうが、 慣れてきたら個別に記述するのがよろしいでしょう HOME > VB.NET Tips HOME > コントロール > DataSet http://vbdotnet.fc2web.com/vbnet/control/DataSetMenu.htm
- how-do-you-do
- ベストアンサー率56% (59/104)
>Dataset >└─DataTable > └─DataRowCollection Dataset └─DataTableCollection └─DataRowCollection 間違えました orz
補足
新規追加できてると思ったらできていなかったです・・・。データソースを更新する時に、 更新には、新しい行を含む DataRow コレクションが渡されたとき、有効な InsertCommand が必要です。 のエラーが出ます。 追加したい項目の書き方は・・・ dtrow = dttable.NewRow dtrow("日付") = "20050401" ''行を追加 dttable.Rows.Add(dtrow) ''データソースを更新 oleDa.Update(dttable) ではダメですか? INSERT文でするのでしょうか?
関連するQ&A
- レコードセットのデータを1行ごとに抽出したい
いつもお世話になっております 今、VBを使用してツールを作成しているのですが DataGridにデータベースからレコードセットを 使用してデータを1行ずつ入れていこうと 思っているのですが、レコードセットで1行ずつ データを取れません。 どうか1行ずつのデータのとり方を教えて下さい! お願い致します。
- 締切済み
- Visual Basic
- レコードセットを保留中にするには?
WINDOWSXP,VB6,SP5で開発しています。 レコードセットにデータをどんどん追加して、 最後にまとめてデータベースに追加する。 みたいなことしたいのですが、可能なのでしょうか? ちなみに、サーバはSQL使ってます。
- ベストアンサー
- Visual Basic
- レコードセットからレコードセットって作れますか?
WindowsXP,VB6,SP5,で開発しています。 タイトルそのままなのですが、 ある事情で、まずはデータベース(Access)からレコードセットを作成しています。 そのレコードセットをもとに色々と抽出したいんです。 もし、データベースからSQL文で抽出するときみたいに、そのレコードセットを、 SUM(~とかGROUP化したりとかできればいいなあと思っているのですが、 その方法がわからず、2,3回遠回りしてレコードセットを作成してます。 レコードセットからレコードセットを作成することってできないのでしょうか? わかりにくくてすみませんが、どうぞよろしくお願いしますm(_ _)m
- ベストアンサー
- Visual Basic
- WEBアプリでデータを書き込む
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
- ベストアンサー
- Microsoft ASP
- VB2005でデータグリッドビューにTextBoxのセルとComboBoxのセルを表示
はじめまして。プログラム開発初心者です。よろしくお願いいたします。 OSはWin2000、VB2005でプログラムを作成しています。 データベースはACCESS2000を使用しています。 今回はデザイナではなく、プログラムにてDatagridView.ROWS.ADDで行追加したいと思っています。 フォームにデータグリッドビューを配置し、三つのカラムにデータベースから持ってくるデータをを表示させたいと思っています。 ただし三つ目のカラムをコンボボックスにして 4つのデータを用意してデータを変更できるようにしたいと思っています。 DatagridView.ROWS.ADDにてテキストボックスカラムを二つ、コンボボックスの列を一つ行追加するにはどのようにしたらいいのでしょうか? またそのコンボボックスの中身の設定はどのようにしたらよいのでしょうか? テキストボックスのみの行追加はできるのですが。。。 テキストボックスカラム+コンボボックスのカラムを追加する方法を調べたのですが探しきれませんでした。 お知恵をおかしください。
- ベストアンサー
- Visual Basic
- VB.NETでのデータベース書き込みについて
リストレビューに表示されているデータをデータベースに書き込む処理を追加したいのですが、データセットにメモリ上のテーブルを作成してデータベースへ書き込む方が良いのでしょうか? それとも直接データベースに書き込む方が良いのでしょうか? 前者のテーブル作成のコードは書きの通りです。 Public Function AddDataSetTable(ByVal kojo_cd() As String, ByVal kojo_name() As String, ByVal kojo_date() As String) Dim dtSet As New DataSet("DataSetTable") Dim dtTable As New DataTable("CalDatTable") Dim fmain As New FrmMain Dim i As Integer 'テーブルに列を追加 With dtTable.Columns .Add("コード") .Add("名称") .Add("日にち") End With 'テーブルに行を追加 With dtTable.Rows For i = 0 To UBound(kojo_cd) .Add(New Object() {kojo_cd(i), kojo_name(i), kojo_date(i)}) Next i End With 'データセットにテーブルを追加 dtSet.Tables.Add(dtTable) End Function
- ベストアンサー
- Visual Basic
- VB.NET データセットとADOレコードセットについて。
最近.NETの勉強を始めました。質問なのですが (1)参考書として買った本にはデータセットが基本の構文がずらりと載っているのですが、 (2)勉強用に貰ったVBデータはADOで基盤が作ってあり、データセットは1つも出てきていません。例えばデータグリッド等は無しです。 (1)と(2)は、今後プログラムを書くにあたり、どうとらえていけばよいんでしょうか? 大きいシステムの流れはVBデータでつかめますが、細かい、(例えば、コンボボックスの値をデータから抽出したい)等の事が分からなくてネットでも見つける事ができません。データグリッドも使いたいのですが。 参考書には載っていますが、全てデータセットを使ってあります。 データセットとADOレコードセットは共に書くことは不可なのですか? テーブルごと仮で持ってくる時、こっちはデータセットでこっちは違うとかだやはり困りますよね。 実際のお仕事の現場ではどのようにされていますか? 明確なADOの使い道(こんな時はADOだ。など)も簡単に教えていただけるとありがたいです。
- ベストアンサー
- Visual Basic
- アクセス レコードセットを更新できません
アクセスは初心者ですが、会社で少しずつ勉強しながら、会社のアクセスのシステムを管理しています。 先日から、突然既存のアクセスのシステムで、フォームを入力しテーブルに追加しようとすると「レコードセットを更新できません」とメッセージが出てきて、データを更新できなくなってしまっています。 特にアクセスを変更したりしていないのですが、突然なってしまいました。 今まで問題なく動いていたので、なぜそういったメッセージが出るのか分からず、困っています。 どういった対策をしたらよいでしょうか。 ご助言をお願いいたします。
- ベストアンサー
- その他(データベース)
- データセットの違いにつきまして
VB(2003)でADOアクセスのプログラムを作成しています。 データセットにつきまして、質問したき件ありまして 書き込みました。 私には、VBにデータセットが2種類あるように思われるのですが、 質問を以下に記述させていただきます。 質問が少し変かもしれませんが、どなたかアドバイス いただけるとありがたいです。 (1)ひとつめのデータセット DBのアクセスとかで下記の定義で定義して使う データセット Dim ds As New DataSet と (2)ふたつめのデータセット ソリューションエクスプローラの 追加ー>新規項目の追加で選択した[データセット] で追加されるデータセット dataset1.xsd が ありますが、この2つの関係はどのように捕らえたら よいのでしょうか? 質問がおかしいかもしれませんが、どなたか教えて いただけるとありがたいです。 ちなみに、私が作成したDBのアクセスのプログラムは (2)を使用しています。((1)は使用していないです)
- ベストアンサー
- Visual Basic
- データを判別してのテーブル処理
データの内容を比較して、すでにあるデータ(キーで判別)は書き換え、ない場合はレコードの追加処理をしたいと思います。 Me.PASSTableAdapter.Fill(Me.YOSAN_SYSDataSet.PASS) Dim UserData As YOSAN_SYSDataSet.PASSRow Dim newRow As DataRow = YOSAN_SYSDataSet.PASS.NewRow Do UserData = Me.YOSAN_SYSDataSet.PASS.FindByID(LogonUser(0, LogCount).Text) If UserData.Table.Rows.Count <> 0 Then <==ココで落ちる UserData.PASS = LogonUser(1, LogCount).Text UserData.NAME = LogonUser(2, LogCount).Text Else newRow(0) = LogonUser(0, LogCount).Text newRow(1) = LogonUser(1, LogCount).Text newRow(2) = LogonUser(2, LogCount).Text YOSAN_SYSDataSet.PASS.Rows.Add(newRow) End If Me.PASSTableAdapter.Update(Me.YOSAN_SYSDataSet.PASS) LogCount += 1 Loop While LogonUser(0, LogCount).Text <> "" 上記の命令ですと、すでにあるデータ(更新)処理はうまくいくのですが、新規データの場合矢印の場所で「オブジェクト参照がオブジェクトインスタンスに設定されておりません」とエラーになってしまいます。 どうしたらよろしいでしょうか?
- ベストアンサー
- Visual Basic
補足
新規作成はできました。 更新は・・・ oleCmd.CommandText = "SELECT * FROM ファイル WHERE 日付 = '20050320';" oleDa.SelectCommand = oleCmd oleDa.Fill(dttable) If dttable.Rows.Count > 0 Then dtrow.BeginEdit() End if dtrow.BeginEdit()でエラーがでます。 オブジェクト参照がオブジェクト インスタンスに設定されていません。 新規作成ではdtrow = dttable.NewRowとしているので更新の場合もdtrow = ??としなければならないと思いますが・・・何をしたら良いかわかりません。