• ベストアンサー

VB.NETからアクセス

お世話になります。ちょっと急ぎでお聞きしたいのですが、アクセスの、あるテーブルに新しい行を追加したくて次のように記述すると、「更新には、新しい行を含むDataRowコレクションが渡されたとき、有効なINSERT COMMANDが必要です。」とでました。 Dim rw As DataRow rw = DataSet11.Tables(1).NewRow rw.Item("年") = "2004" rw.Item("月") = "10" DataSet11.Tables(1).Rows.Add(rw) OleDbDataAdapter1.Update(DataSet11) なにか良い解決方法はあるでしょうか?  すみません、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nanimania
  • ベストアンサー率36% (34/93)
回答No.1

UpDateの前に、Fillが必要だったような気がします。 違ってたらごめんなさい(汗)

YSK-Dream
質問者

お礼

ありがとうございました=。

その他の回答 (1)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

http://support.microsoft.com/default.aspx?scid=kb;ja;821765 のDataGridに表示するとこるまでは出来ていますか? DataAdapter.UpdateCommandは自動生成されていますか? 構成ウイザードの途中でエラーが表示されませんか?

YSK-Dream
質問者

お礼

実は DataGrid は使用していないんです。 でも、やっぱりselect以外のコマンドは生成されていません=。 やりなおしてみます!ありがとうございました===。

関連するQ&A

  • データベースのDataRowの使い方について

    環境: Windows7 MicrosftVisualStudio 2013 SQLServer 2014 言語 C# .Net 通常以下のようにしてDataRowを作って使用しますが、 DataSet ds = new DataSet(); DataTable dt = new DataTable("Table1"); dt.Columns.Add("商品番号"); dt.Columns.Add("商品名"); dt.Columns.Add("価格"); ds.Tables.Add(dt); DataRow datarow = ds.Tables["Table1"].NewRow(); データソースと同じ列を使用したいので データセット  : MAINDataSet データテーブル : MASTERDataTable MAINDataSet.MASTERDataTable dtMaster = new MAINDataSet.MASTERDataTable(); として新規作成を行ったのですが、このままではレコード数が0で、上記の DataRow datarow = dataset.Tables["Table1"].NewRow(); にあたる処理 DataRow dr = MAINDataSet.MASTERDataTable.NewRow(); がわかりません。 現状では この1行の代わりに以下のようなことを毎回しなければ ならないのでしょうか? MAINDataSet.MASTERDataTable dt = new MAINDataSet.MASTERDataTable(); DataSet ds = new DataSet(); DataTable dt = new DataTable("Table1"); for(int inum = 0; inum < dt.Columns.Count; inum++) { dt.Columns.Add(dt.Columns[inum].ColumnName); } ds.Tables.Add(dt); DataRow datarow = ds.Tables["Table1"].NewRow();

  • vbでDataTableの抽出コピー

    vbでDataTableの抽出コピー DataTableから条件抽出したデータで別のDataTableを作成したい ・DataTable1から条件抽出したデータで別のDataTableを作成したい ・データの件数が違うだけでヘッダーなどの内容は同じにしたい Dim DataTable1 As DataTable ' 既にテーブルデータが入っているとする Dim DataTable2 As DataTable ' これに一部のデータとヘッダーを複写 Dim DataRow1 As DataRow ' DataRowの一時領域1 Dim DataRow2 As DataRow ' DataRowの一時領域2 <試作1:NG DataRowの使いまわしがきかない> DataTable2 = DataTable1.Clone For Each DataRow1 In DataTable1.Select(条件, ソート) DataTable2.Rows.Add(DataRow1) Next DataRow1 <試作2:NG ワンクッションかましただけではダメ> DataTable2 = DataTable1.Clone For Each DataRow1 In DataTable1.Select(条件, ソート) DataRow2 = DataRow1 DataTable2.Rows.Add(DataRow2) Next DataRow1 もしかして、個別セット以外に道はないのでしょうか? DataTable2 = DataTable1.Clone For Each DataRow1 In DataTable1.Select(条件, ソート) DataRow2 = DataTable2.NewRow DataRow2("item1") = DataRow1("item1") DataRow2("item2") = DataRow1("item2") DataRow2("item3") = DataRow1("item3") DataRow2("item4") = DataRow1("item4") DataRow2("item5") = DataRow1("item5") DataRow2("item6") = DataRow1("item6") DataRow2("item7") = DataRow1("item7") DataRow2("item8") = DataRow1("item8") DataTable2.Rows.Add(DataRow2) Next DataRow1 何か良い方法はありませんか?

  • DataGridViewでitemを指定してデータ

    DataGridViewでitemを指定してデータを取得する事はできますか? 下記のように座標を指定して取得する方法はわかります。 Dim IntItem1 As Integer = DataGridView1(j, i).Value DataSetの場合は、DataRowに落として取れます。 Dim DataRow1 As DataRow = DataSet1.Tables("Table1").Rows(0) Dim IntItem1 As Integer = DataRow1("Item1") 同じノリで DataGridViewからアイテムを指定してデータを取得したいのですが下記のような事はできませんでした。 Dim DataGridViewRow1 As DataGridViewRow = DataGridView1.Rows(0) Dim IntItem1 As Integer = DataGridViewRow1("Item1") ← エラー 書き方があれば教えて下さい。

  • カンマ区切りの文字列をDatasetに登録するには?【VB.NET2005】

    テキストファイルを読込んでカンマ区切りでDatasetに登録する際は 以下の方法で行っていました。 Dim tfp As New TextFieldParser(fileName, System.Text.Encoding.GetEncoding("Shift_JIS")) Dim dt As New DataTable Dim dr As DataRow tfp.TextFieldType = FieldType.Delimited tfp.SetDelimiters(",") While Not tfp.EndOfData dr = dt.NewRow dr.ItemArray = tfp.ReadFields dt.Rows.Add(dr) End While tfp.Close() ds.Tables.Add(dt) これをファイルではなくDim str As String = "123,aaa" という文字列に対して行いたいのですが、 上記のReadFieldsの用に使える物は無いでしょうか?

  • 【ASP.NET】DataSetをSqlDataSourceに組み込めますか?

    ASP.NET Visual Studio 2005で開発を行っています。 GridViewのページングの機能を使用するには、「SqlDataSource」や「ObjectDataSource」を使用しないと有効にならないと思いますが、データベースがDataSetになっています。 この状態から、GridViewにデータをバインドし、ページングを有効にさせるには、どうしたらよいでしょうか?? SqlDataSourceにDataSetを持っていくという方法が調べても、分かりませんでした。 以下が使用しているソースです。 これですと、ページングが有効にならず、エラーになる状態です。 ============================================= Dim dSet As Data.DataSet = New Data.DataSet("データ") Dim dTbl As Data.DataTable Dim dRow As Data.DataRow dTbl = dSet.Tables.Add("データ") dTbl.Columns.Add("aaa", Type.GetType("System.String")) dRow = dTbl.NewRow() dRow("aaa") = "bbb" dTbl.Rows.Add(dRow) Me.GridView1.DataSource = dTbl Me.GridView1.DataBind() ====================================== どうぞ、宜しくお願いします。

  • コンボボックスに固定値をセットして表示する方法

    お世話になります。さっそくですが、質問です。 現在、VB.NET 2008で開発を行ってます。 質問の目的は、 実行プログラムにおいて、 画面に配置したコンボボックスをクリックした際、 以下の値を選択肢として表示させることです。 (【性別】の選択肢) ・男性 ・女性 Form_Load()時に、コンボボックスに上記の値を固定でセットしています。 ------------------------------------------------- Public Function getDataField1() As DataSet '変数宣言 Dim ds As DataSet Dim dt As New DataTable Dim dr As DataRow dt.Columns.Add("DataTextField", GetType(String)) dt.Columns.Add("DataValueField", GetType(String)) '空白セット dr = dt.NewRow() dr("DataTextField") = "      " dr("DataValueField") = ",,,," dt.Rows.Add(dr) dr = dt.NewRow() dr("DataTextField") = "1" dr("DataValueField") = "男性" dt.Rows.Add(dr) dr = dt.NewRow() dr("DataTextField") = "2" dr("DataValueField") = "女性" dt.Rows.Add(dr) ds = New DataSet ds.Tables.Add(dt) Return ds End Function Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim ds As DataSet '性別の取得 ds = getDataField1() For i As Integer = 0 To 2 cmb_性別.Items.Add() ds.Tables(0).Rows(i).Item("DataValueField").ToString() Next i End Sub ------------------------------------------------- 上記内容の場合、コンボボックスをクリックしても 選択肢としては"空白"しか表示されません。 セットした値をコンボボックスの選択肢として表示させる方法を ご存知の方がいらっしゃいましたら、ご教授願えますでしょうか?

  • VB6.0で、CSVファイルのデータをデータベースに格納する方法

    VBもプログラミングも初心者です。 VB6.0を用いて、CSVファイルをデータベースに格納するプログラムを作成したいのですが、 やり方がわからず、困っております。 ネット上にあります、サンプルプログラム (http://www.atmarkit.co.jp/fdotnet/basics/adonet05/adonet05_02.html) を参考にしつつ、途中まで作成してみたのですが、 *********に囲んであるところをどのようにしたら良いのかが分かりません。 以下に、途中まで作成したプログラムと、CSVファイルを示します。 ++++ CSVファイル ++++ (CSVファイルは、カラム数、行数共に変化します。) 001,1行目,1番 002,2行目,2番 003,3行目,3番 004,4行目,4番 'プログラム Dim sqlSTR As String Dim connStr As String connStr = "Server=xxxxxxxxxxxxx" + "Trusted_Connection=yes;" + "database=testdb"; da_A = New System.Data.SqlClient.SqlDataAdapter(sqlStr, connStr) ds_A = New System.Data.DataSet() ************************* 'sql文を定義 sqlStr = "insert into" ************************* Dim Tables As New DataTable Dim nr_A As DataRow nr_A ds_A.Tables("testdb").NewRow() ************************************* nr_A("column1") = "001" nr_A("column2") = "1番目" '上記ネット上のサンプルプログラムでは、ここに直書きをしているのですが、 'ファイルの行を読み込み、指定するやり方がわかりません。 ************************************* Tables.Rows.Add(nr_A) da_A.Update(ds_A, "testdb") 'プログラム終わり どうか、よろしくお願い致します。

  • 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

  • 「テーブルに主キーがありません。」というエラーが出て困ってます。

    VisualStudioでASP.NETをやってます。初心者です。 データグリッドの削除ボタンを押して行を削除したいのですが、 テーブルに主キーがありません。というエラーが出てしまいます。 テーブルに主キーはあるんですけれども、原因がわかりません。 Dim mytable As DataTable Dim myrow As DataRow Dim key As String SqlDataAdapter1.Fill(DataSet11) key = DataGrid1.DataKeys(e.Item.ItemIndex) mytable = DataSet11.Tables("テーブル名") ↓ここでエラーになるようです。 myrow = mytable.Rows.Find(key) myrow.Delete() ご存知の方いらっしゃいましたら、よろしくお願いします。

  • この行は既に別のテーブルに属しています

    以下のソースで、「この行は既に別のテーブルに属しています。」というエラーが出てしまいますが、対処方法がわかりません。 どのようにしたらよろしいでしょうか? VS2003のVBです。     Dim Table1 As DataTable = Me.DS1.Tables("データベース1")     Dim Table2 As DataTable = Me.DS1.Tables("データベース2")     Dim Row1 As DataRow     Dim Row2 As DataRow     Row1("データ1") = 1     Row1("データ2") = 2     Row1("データ3") = 3     Row2("データ1") = 2     Row2("データ2") = 3     Row2("データ3") = 4     Table2.Rows.Add(Row2) ←ここでエラー     Table1.Rows.Add(Row1) 'System.ArgumentException' のハンドルされていない例外が system.windows.forms.dll で発生しました。 追加情報 : この行は既に別のテーブルに属しています。

専門家に質問してみよう