• ベストアンサー

データセットのレコード更新がしたい

how-do-you-doの回答

回答No.3

こんな感じですかね   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

okkomu
質問者

補足

新規作成はできました。 更新は・・・ 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 = ??としなければならないと思いますが・・・何をしたら良いかわかりません。

関連するQ&A

  • レコードセットのデータを1行ごとに抽出したい

    いつもお世話になっております 今、VBを使用してツールを作成しているのですが DataGridにデータベースからレコードセットを 使用してデータを1行ずつ入れていこうと 思っているのですが、レコードセットで1行ずつ データを取れません。 どうか1行ずつのデータのとり方を教えて下さい! お願い致します。

  • レコードセットを保留中にするには?

    WINDOWSXP,VB6,SP5で開発しています。 レコードセットにデータをどんどん追加して、 最後にまとめてデータベースに追加する。 みたいなことしたいのですが、可能なのでしょうか? ちなみに、サーバはSQL使ってます。

  • レコードセットからレコードセットって作れますか?

    WindowsXP,VB6,SP5,で開発しています。 タイトルそのままなのですが、 ある事情で、まずはデータベース(Access)からレコードセットを作成しています。 そのレコードセットをもとに色々と抽出したいんです。 もし、データベースからSQL文で抽出するときみたいに、そのレコードセットを、 SUM(~とかGROUP化したりとかできればいいなあと思っているのですが、 その方法がわからず、2,3回遠回りしてレコードセットを作成してます。 レコードセットからレコードセットを作成することってできないのでしょうか? わかりにくくてすみませんが、どうぞよろしくお願いしますm(_ _)m

  • 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

  • VB2005でデータグリッドビューにTextBoxのセルとComboBoxのセルを表示

    はじめまして。プログラム開発初心者です。よろしくお願いいたします。 OSはWin2000、VB2005でプログラムを作成しています。 データベースはACCESS2000を使用しています。 今回はデザイナではなく、プログラムにてDatagridView.ROWS.ADDで行追加したいと思っています。 フォームにデータグリッドビューを配置し、三つのカラムにデータベースから持ってくるデータをを表示させたいと思っています。 ただし三つ目のカラムをコンボボックスにして 4つのデータを用意してデータを変更できるようにしたいと思っています。 DatagridView.ROWS.ADDにてテキストボックスカラムを二つ、コンボボックスの列を一つ行追加するにはどのようにしたらいいのでしょうか? またそのコンボボックスの中身の設定はどのようにしたらよいのでしょうか? テキストボックスのみの行追加はできるのですが。。。 テキストボックスカラム+コンボボックスのカラムを追加する方法を調べたのですが探しきれませんでした。 お知恵をおかしください。

  • 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

  • VB.NET データセットとADOレコードセットについて。

    最近.NETの勉強を始めました。質問なのですが (1)参考書として買った本にはデータセットが基本の構文がずらりと載っているのですが、 (2)勉強用に貰ったVBデータはADOで基盤が作ってあり、データセットは1つも出てきていません。例えばデータグリッド等は無しです。 (1)と(2)は、今後プログラムを書くにあたり、どうとらえていけばよいんでしょうか? 大きいシステムの流れはVBデータでつかめますが、細かい、(例えば、コンボボックスの値をデータから抽出したい)等の事が分からなくてネットでも見つける事ができません。データグリッドも使いたいのですが。 参考書には載っていますが、全てデータセットを使ってあります。 データセットとADOレコードセットは共に書くことは不可なのですか? テーブルごと仮で持ってくる時、こっちはデータセットでこっちは違うとかだやはり困りますよね。 実際のお仕事の現場ではどのようにされていますか? 明確なADOの使い道(こんな時はADOだ。など)も簡単に教えていただけるとありがたいです。

  • アクセス レコードセットを更新できません

    アクセスは初心者ですが、会社で少しずつ勉強しながら、会社のアクセスのシステムを管理しています。 先日から、突然既存のアクセスのシステムで、フォームを入力しテーブルに追加しようとすると「レコードセットを更新できません」とメッセージが出てきて、データを更新できなくなってしまっています。 特にアクセスを変更したりしていないのですが、突然なってしまいました。 今まで問題なく動いていたので、なぜそういったメッセージが出るのか分からず、困っています。 どういった対策をしたらよいでしょうか。 ご助言をお願いいたします。

  • データセットの違いにつきまして

    VB(2003)でADOアクセスのプログラムを作成しています。 データセットにつきまして、質問したき件ありまして 書き込みました。 私には、VBにデータセットが2種類あるように思われるのですが、 質問を以下に記述させていただきます。 質問が少し変かもしれませんが、どなたかアドバイス いただけるとありがたいです。 (1)ひとつめのデータセット DBのアクセスとかで下記の定義で定義して使う データセット Dim ds As New DataSet と (2)ふたつめのデータセット ソリューションエクスプローラの 追加ー>新規項目の追加で選択した[データセット] で追加されるデータセット dataset1.xsd が ありますが、この2つの関係はどのように捕らえたら よいのでしょうか? 質問がおかしいかもしれませんが、どなたか教えて いただけるとありがたいです。 ちなみに、私が作成したDBのアクセスのプログラムは (2)を使用しています。((1)は使用していないです)

  • データを判別してのテーブル処理

    データの内容を比較して、すでにあるデータ(キーで判別)は書き換え、ない場合はレコードの追加処理をしたいと思います。 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 <> ""  上記の命令ですと、すでにあるデータ(更新)処理はうまくいくのですが、新規データの場合矢印の場所で「オブジェクト参照がオブジェクトインスタンスに設定されておりません」とエラーになってしまいます。  どうしたらよろしいでしょうか?