C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: GridViewで表示データを選択し他のテーブルに挿入


(過去ログ 124 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■73913 / inTopicNo.1)  GridViewで表示データを選択し他のテーブルに挿入
  
□投稿者/ とし (1回)-(2014/11/14(Fri) 10:10:35)

分類:[.NET 全般] 

固定資産台帳から部署で使用しているデータを選択して工程経費テーブルに登録する処理を作成したいです。
現在、Accessの2つのテーブルを使用して作成しています。

1つのテーブル(固定資産台帳)をGridView(AccessDataSource1)で表示しています。

登録ボタン(ButtonField)をクリックしたら
RowCommandで選択された必要なアイテムの値を取得して

Dim rowIndex As Integer = Convert.ToInt16(e.CommandArgument)
Dim gridView As GridView = DirectCast(e.CommandSource, GridView)
Dim row As GridViewRow = gridView.Rows(rowIndex)

    ・略
Dim shisan As String = row.Cells(3).Text
    ・略
shisanNoControl = shisan
    ・略

別の工程経費テーブル(AccessDataSource4)に新規データとして挿入をしたい。

AccessDataSource4.InsertParameters.Clear()
AccessDataSource4.InsertParameters.Add(New ControlParameter("資産No", TypeCode.String, shisanNoControl, "Text"))
AccessDataSource4.Insert()

実行すると
コントロール '01195' は ControlParameter '資産No' 内に見つかりませんでした。
エラーになります。


挿入先は以下の指定
AccessDataSource ID="AccessDataSource4" runat="server"
InsertCommand="INSERT INTO [AB工程経費] ([原価センタコード], [原価センタ名称], [工程ID], [工程名], [種別], [], [行], [資産], [識別], [科目], [科目名], [金額(年間)], [使用率], [削除CHK], [Count], [登録]) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"

<InsertParameters>
<asp:Parameter Name="原価センタコード" Type="String" />
<asp:Parameter Name="原価センタ名称" Type="String" />
<asp:Parameter Name="工程ID" Type="String" />
<asp:Parameter Name="工程名" Type="String" />
<asp:Parameter Name="種別" Type="String" />
<asp:Parameter Name="column1" Type="String" />
<asp:Parameter Name="行" Type="String" />
<asp:Parameter Name="column2" Type="String" />
<asp:Parameter Name="識別" Type="String" />
<asp:Parameter Name="科目" Type="String" />
<asp:Parameter Name="科目名" Type="String" />
<asp:Parameter Name="column3" Type="Double" />
<asp:Parameter Name="使用率" Type="Double" />
<asp:Parameter Name="削除CHK" Type="Boolean" />
<asp:Parameter Name="Count" Type="Double" />
<asp:Parameter Name="登録" Type="DateTime" />
</InsertParameters>

他のテーブルに挿入することは可能なのでしょうか?
色々調べたのですがわからず・・・
下記の参考URLはGridViewで同じテーブルにデータ挿入の例

参考URL
AccessデータのGridViewでの挿入法
http://kuri6005.sakura.ne.jp/aspnet/wiki/index.php?Access%A5%C7%A1%BC%A5%BF%A4%CEGridView%A4%C7%A4%CE%C1%DE%C6%FE%CB%A1
引用返信 編集キー/
■73915 / inTopicNo.2)  Re[1]: GridViewで表示データを選択し他のテーブルに挿入
□投稿者/ WebSurfer (383回)-(2014/11/14(Fri) 12:10:47)
No73913 (とし さん) に返信

質問する際には最初にご自分の環境を書いていただけませんか?

環境というのは、OS, .NET, Visual Studio, IIS, Access のバージョン、ASP.NET 開発
サーバー / IIS Express / IIS のどれを使っているか、使っているブラウザ・・・など
です。

面倒なことを言うと思うかもしれませんが、的を得た回答が得やすくなるということで、
質問者さんにメリットのあることです。

やりたいことは、GridView に表示された「固定資産台帳」テーブルからレコードを選択
して、別の「工程経費テーブル」にそのレコードのデータを INSERT するということと
理解しています。

「固定資産台帳」テーブルに主キーはありますよね? であれば、以下のような感じで実
装してはいかがですか?

(1) AccessDataSource と GridView で「固定資産台帳」テーブルのレコードの一覧を表示。

(2) GridView 表示された「固定資産台帳」一覧からユーザーがレコードを選択。

(3) [登録]ボタンクリックでポストバック。サーバー側でユーザーが選択したレコードの
  主キーを取得。この先は AccessDataSource, GridView は使用せず、 ADO.NET ライブ
  ラリで直接 Access を操作します。

(4) 上の (3) で選んだレコードが「工程経費テーブル」にあるか否かをチェック(重複チ
  ェック)。

(5) 重複がなければ、「固定資産台帳」に SELECT クエリをかけて、(3) で取得した主キ
  ーのレコードを取得する。

(6) 「工程経費テーブル」に INSERT クエリをかけて、上記 (5) で取得したレコードの
  データを新規登録する。

引用返信 編集キー/
■73916 / inTopicNo.3)  Re[2]: GridViewで表示データを選択し他のテーブルに挿入
□投稿者/ とし (3回)-(2014/11/14(Fri) 13:27:46)
WebSurfer さん回答ありがとうございます。

環境は以下の環境で行っています。
2003Server,IIS V6.0,Access2000,IE8
ASP.NET開発: Visual Web Developer2010

ASP.NETは初心者でADO.NET ライブラリは経験がなのでWebで検索して見てまます。
重複チェックと挿入の例が載っているサイトがあれば教えて頂ければ助かります。

調べて解らなかったらまた質問させてください。
宜しくお願い致します。

No73915 (WebSurfer さん) に返信
> ■No73913 (とし さん) に返信
>
> 質問する際には最初にご自分の環境を書いていただけませんか?
>
> 環境というのは、OS, .NET, Visual Studio, IIS, Access のバージョン、ASP.NET 開発
> サーバー / IIS Express / IIS のどれを使っているか、使っているブラウザ・・・など
> です。
>
> 面倒なことを言うと思うかもしれませんが、的を得た回答が得やすくなるということで、
> 質問者さんにメリットのあることです。
>
> やりたいことは、GridView に表示された「固定資産台帳」テーブルからレコードを選択
> して、別の「工程経費テーブル」にそのレコードのデータを INSERT するということと
> 理解しています。
>
> 「固定資産台帳」テーブルに主キーはありますよね? であれば、以下のような感じで実
> 装してはいかがですか?
>
> (1) AccessDataSource と GridView で「固定資産台帳」テーブルのレコードの一覧を表示。
>
> (2) GridView 表示された「固定資産台帳」一覧からユーザーがレコードを選択。
>
> (3) [登録]ボタンクリックでポストバック。サーバー側でユーザーが選択したレコードの
>   主キーを取得。この先は AccessDataSource, GridView は使用せず、 ADO.NET ライブ
>   ラリで直接 Access を操作します。
>
> (4) 上の (3) で選んだレコードが「工程経費テーブル」にあるか否かをチェック(重複チ
>   ェック)。
>
> (5) 重複がなければ、「固定資産台帳」に SELECT クエリをかけて、(3) で取得した主キ
>   ーのレコードを取得する。
>
> (6) 「工程経費テーブル」に INSERT クエリをかけて、上記 (5) で取得したレコードの
>   データを新規登録する。
>
引用返信 編集キー/
■73918 / inTopicNo.4)  Re[3]: GridViewで表示データを選択し他のテーブルに挿入
□投稿者/ WebSurfer (385回)-(2014/11/14(Fri) 14:28:01)
No73916 (とし さん) に返信

> 重複チェックと挿入の例が載っているサイトがあれば教えて頂ければ助かります。

ado.net access insert などをキーワードにして検索するといろいろ見つかると思
います。例えば下記:

マスターテーブルアクセスクラス[ADO.NET]
http://park5.wakwak.com/~weblab/clsDBIO.html

引用返信 編集キー/
■73919 / inTopicNo.5)  Re[4]: GridViewで表示データを選択し他のテーブルに挿入
□投稿者/ とし (4回)-(2014/11/14(Fri) 14:58:06)
No73918 (WebSurfer さん) に返信
> ■No73916 (とし さん) に返信

WebSurfer さん
URLまでありがとうございます。

最初の内容の
別の工程経費テーブル(AccessDataSource4)に新規データとして挿入をしたい。
の所で作成する重複チェックと挿入をCallすれば良いと思うのでやって見ます。
結果を報告に来ます。

ありがとうございました。
引用返信 編集キー/
■73977 / inTopicNo.6)  Re[5]: GridViewで表示データを選択し他のテーブルに挿入
□投稿者/ とし (5回)-(2014/11/19(Wed) 13:41:00)
No73919 (とし さん) に返信
> ■No73918 (WebSurfer さん) に返信
>>■No73916 (とし さん) に返信

WebSurfer さんに教えて頂いたURLを元にちょっとやってみましたがダメで

ここを参考に作成しました。
http://kuri6005.sakura.ne.jp/aspnet/wiki/index.php?AccessDB%A4%CEOleDb%A4%C7%A4%CE%C1%DE%C6%FE%A1%A6%B9%B9%BF%B7%A1%A6%C3%EA%BD%D0%A1%A6%BA%EF%BD%FC%CB%A1
CLASSの使い方が良く解らないのもありまして・・・

とりあえず重複チェックは正常に動作しましたが挿入の処理で下記エラーメッセージが出てうまく行きません。
1 つ以上の必要なパラメータの値が設定されていません。

ソースは以下の通りでパラメータの個数は何回も数えて合わせているのですが・・・
良く解りません。

'AccessDBにOleDbで接続
'OleDbでのパラメータ設定はPositional Parameter方式(Values(?, ?, ?))で設定
Dim cmd1 As New Data.OleDb.OleDbCommand("Insert Into [AB工程経費] ([SEQ],[原価センタコード], [原価センタ名称], [工程ID],[工程名],[種別],[],[行], [資産], [識別],[科目],[科目名],[金額(年間)],[使用率],[削除CHK],[Count], [登録]) Values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", con)


' パラメータの設定
'ParametersコレクションのValueプロパティの省略形記法
'cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@Seq", SeqControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@GenkaCode", GenkaCodeControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@GenkaName", GenkaNameControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@Koutei_id", Koutei_idControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@Koutei_Name", Koutei_NameControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@Syubetsu", SyubetsuControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@tanaNo", tanaNoControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@Gyou", GyouControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@ShisanNo", ShisanNoControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@Shikibetsu", ShikibetsuControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@Kamoku", KamokuControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@Kamoku_Name", Kamoku_NameControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@Kingaku", KingakuControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@Shiyou_Ritsu", Shiyou_RitsuControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@SakujoChkCon", SakujoChkControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@Cunt", CuntControl))
cmd1.Parameters.Add(New Data.OleDb.OleDbParameter("@Touroku", TourokuControl))


'クエリの実行(INSERTクエリの場合は結果セットを返さないExecuteNonQuery)
Try

cmd1.ExecuteNonQuery()


Catch b As Exception
message.Text = b.Message

End Try


見て頂けると助かります。
宜しくお願い致します。

引用返信 編集キー/
■73981 / inTopicNo.7)  Re[6]: GridViewで表示データを選択し他のテーブルに挿入
□投稿者/ WebSurfer (391回)-(2014/11/19(Wed) 15:15:22)
No73977 (とし さん) に返信

エラー(例外)はソースのどの行で出るのですか? それから、エラーメッセージには
重要な情報が含まれていることが多いので省略しないで全部コピペしましょう。

> 1 つ以上の必要なパラメータの値が設定されていません。

アップされているコードで、OleDbParameter のコンストラクタの第二引数に指定されて
いる SeqControl とか GenkaCodeControl などは何なのですか? それが値ではないから
「パラメータの値が設定されていません」というエラーが出るのではないですか?

参考にされている記事に書いてある「省略形記法」というのは、OleDbParameter クラス
の数あるコンストラクタの内、以下のオーバーロードです。

OleDbParameter コンストラクター (String, Object)
http://msdn.microsoft.com/ja-jp/library/2t2bd12y(v=vs.100).aspx

第一引数はパラメータ名、第二引数は「パラメータの値」でなければなりません。


なお、自分的には上記のコンストラクタを使うのはお勧めできません。上記の MSDN ライ
ブラリの解説にあるように曖昧さがあるからです。参考にされている記事の「正式記法」
の方を使うことをお勧めします。

引用返信 編集キー/
■73988 / inTopicNo.8)  Re[7]: GridViewで表示データを選択し他のテーブルに挿入
□投稿者/ とし (6回)-(2014/11/20(Thu) 14:13:19)
No73981 (WebSurfer さん) に返信
> ■No73977 (とし さん) に返信
>

WebSurfer さんいつもありがとうございます。

@エラーメッセージはb.Messageの内容です。
AParameterは正式記法に変更しました。
BxxxControlはそれぞれの挿入時の値を設定しています。

以下の対応をしたらうまく行きました。
SEQ(オートナンバー)はキーでパラメータから取って動作したらOKでした。
キー(オートナンバー)は指定するとうまくいかない事を他のページで書いてあるのを思い出して取ってみました。

実は、更新もやらないといけないので同じ要領でやって見ます。
躓いたらまたお願い致します。

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

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -