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

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

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

Re[2]: ADO.NET ライブラリ 検索結果を挿入するには?


(過去ログ 136 を表示中)

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

■79993 / inTopicNo.1)  ADO.NET ライブラリ 検索結果を挿入するには?
  
□投稿者/ とし (4回)-(2016/06/03(Fri) 11:31:17)

分類:[.NET 全般] 

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

以前にADO.NET ライブラリで直接Accessに挿入INSERTクエリ操作する質問をさせて頂いて
画面入力した内容を1行挿入は以下の内容にて出来ましたが・・・

'web画面で入力された値をControlにセット
YYYYMMDDControl = Session("YYYYMMDD")
HouControl = Session("Hou")
Naiyou1Control = Session("Naiyou1")
Naiyou2Control = Session("Naiyou2")

Dim cmd3 As New Data.OleDb.OleDbCommand("Insert Into [FAX(内容)] ([当YYYYMMDD], [報], [内容1],[内容2]) Values(?, ?, ?, ?)", con)

'ParametersコレクションのValueプロパティの正式記法
cmd3.Parameters.Add("@YYYYMMDD", Data.OleDb.OleDbType.VarWChar, 8)
cmd3.Parameters("@YYYYMMDD").Value = YYYYMMDDControl
cmd3.Parameters.Add("@Hou", Data.OleDb.OleDbType.VarWChar, 2)
cmd3.Parameters("@Hou").Value = HouControl
cmd3.Parameters.Add("@Naiyou1", Data.OleDb.OleDbType.VarWChar, 2)
cmd3.Parameters("@Naiyou1").Value = Naiyou1Control
cmd3.Parameters.Add("@Naiyou2", Data.OleDb.OleDbType.VarWChar, 2)
cmd3.Parameters("@Naiyou2").Value = Naiyou2Control

Try
cmd3.ExecuteNonQuery()
End Try


今回やりたい事は
他のテーブル検索した情報+画面に入力された情報で挿入したい。

画面に入力された日付で他のテーブル[内容情報]にある日付を検索して対象の内容を挿入するSQLがうまくいきません。
以下の内容で作成しました。

Dim cmd3 As New Data.OleDb.OleDbCommand("Insert Into [FAX(内容)] ([当YYYYMMDD], [報], [内容1],[内容2]) SELECT [当YYYYMMDD], [内容1], [内容2], , [SEQ] FROM [内容情報] WHERE ([当YYYYMMDD]=YYYYMMDDControl) Values([当YYYYMMDD], ?, [内容1], [内容2])", con)

cmd3.Parameters.Add("@Hou", Data.OleDb.OleDbType.VarWChar, 2)
cmd3.Parameters("@Hou").Value = HouControl

※[報]は画面に入力された情報を全レコードにセットしたい。


色々検索しましたが出来なくて困っています。
宜しくお願いします。
引用返信 編集キー/
■79996 / inTopicNo.2)  Re[1]: ADO.NET ライブラリ 検索結果を挿入するには?
□投稿者/ WebSurfer (927回)-(2016/06/03(Fri) 12:53:15)
No79993 (とし さん) に返信

全体的なシナリオを含めてどのようなことがやりたいのか書いていただけませんか?

例えば(あくまで例えば)、

(1) ページAに GridView と AccessDataSource を配置して [内容情報] テーブルの一覧
  を GridView に表示してユーザーに選択させる。

(2) ユーザーがページAの GridView 上のレコードを選択するとページBに遷移する。

(3) ページBには [FAX(内容)] テーブルに新たなレコードを追加するためのユーザー
  入力用の DetailsView + AccessDataSource が配置されている。

(4) DetailsView にはページAでユーザーが選択した [内容情報] テーブルのレコードの
  情報があらかじめ表示されている。

(5) ユーザーが追加情報を DetailsView に入力してボタンクリックすると、 [FAX(内容)]
  テーブルに DetailsView に入力した情報が INSERT される。

・・・というような感じで。

それと、[内容情報] テーブル、 [FAX(内容)] テーブルのスキーマを書いて、

> ※[報]は画面に入力された情報を全レコードにセットしたい。

というのは具体的にどういう意味か書いてください。


今質問者さんが提供している情報だけではかなりの部分想像で答えねばならず、想像が間違っ
ていると混乱を招くばかりということになりかねません。

Session を使っているということは何か理由があるのですよね?
引用返信 編集キー/
■80007 / inTopicNo.3)  Re[2]: ADO.NET ライブラリ 検索結果を挿入するには?
□投稿者/ とし (5回)-(2016/06/03(Fri) 14:31:34)
No79996 (WebSurfer さん) に返信
> ■No79993 (とし さん) に返信
>
> 全体的なシナリオを含めてどのようなことがやりたいのか書いていただけませんか?
>
> 例えば(あくまで例えば)、
>
> (1) ページAに GridView と AccessDataSource を配置して [内容情報] テーブルの一覧
>   を GridView に表示してユーザーに選択させる。
>
> (2) ユーザーがページAの GridView 上のレコードを選択するとページBに遷移する。
>
> (3) ページBには [FAX(内容)] テーブルに新たなレコードを追加するためのユーザー
>   入力用の DetailsView + AccessDataSource が配置されている。
>
> (4) DetailsView にはページAでユーザーが選択した [内容情報] テーブルのレコードの
>   情報があらかじめ表示されている。
>
> (5) ユーザーが追加情報を DetailsView に入力してボタンクリックすると、 [FAX(内容)]
>   テーブルに DetailsView に入力した情報が INSERT される。
>
> ・・・というような感じで。
>
> それと、[内容情報] テーブル、 [FAX(内容)] テーブルのスキーマを書いて、
>
>>※[報]は画面に入力された情報を全レコードにセットしたい。
>
> というのは具体的にどういう意味か書いてください。
>
>
> 今質問者さんが提供している情報だけではかなりの部分想像で答えねばならず、想像が間違っ
> ていると混乱を招くばかりということになりかねません。
>
> Session を使っているということは何か理由があるのですよね?


分かりづらくて申し訳ありませんでした。

やりたい事は
1.ページAにて事前に
GridView と AccessDataSource を配置して [内容情報] テーブルの一覧を
GridView に当日YYYYMMDDの内容を表示しユーザーに情報を入力させる。
※テーブル[内容情報]にはYYYYMMDDの累積データが作成されている。(1日8レコード)


2.ページBにて
@YYYYMMDD:当日日付入力
A何報:ドロップダウンで選択(1〜10)
B内容1:ドロップダウンで選択(マスタの3文章から)
C内容2:ドロップダウンで選択(マスタの5文章から)
D登録ボタンをクリック(下部にGridViewで[内容情報]表示してありユーザーが入力しているのを確認して登録)
[テーブル[FAX]に1行登録される。

当日YYYYMMDDのテーブル[内容情報]の内容+Aで選択した何報かテーブル[FAX]の報を使ってテーブルに[FAX(内容)]を作成する。

3.ページCにて
GridView と AccessDataSource を配置してテーブル[FAX(内容)]とテーブル[FAX]の当日YYYYMMDDで一覧を表示する。
・当YYYYMMDDと報で紐付け

テーブル[FAX]
当YYYYMMDD テキスト型 8(自動設定)
報     テキスト型 2(入力アイテム)
内容1     テキスト型 255(入力アイテム)
内容2     テキスト型 255(入力アイテム)

テーブル[内容情報](別システムにて毎日作成)
当YYYYMMDD テキスト型 8
項目名称_漢字 テキスト型 26
FAX時間 テキスト型 50(入力アイテム)
予定時間 テキスト型 255(入力アイテム)

テーブル[FAX(内容)]
当YYYYMMDD テキスト型 8
報 テキスト型 2
項目名称_漢字 テキスト型 26
FAX時間 テキスト型 50
予定時間 テキスト型 255

SessionはページAで登録した後でページDで使用する予定のためです。

宜しくお願い致します。

引用返信 編集キー/
■80009 / inTopicNo.4)  Re[3]: ADO.NET ライブラリ 検索結果を挿入するには?
□投稿者/ WebSurfer (931回)-(2016/06/03(Fri) 16:04:05)
No80007 (とし さん) に返信

せっかく説明してもらったのにすみませんがまだ理解できません。

ページA、ページCは単なる確認用、ページDは今回の質問とは関係なく別の目的のもの
で、今回の質問の内容は全てページBにあるということでいいですか?

その理解でいいとして、まず、

> 2.ページBにて
> @YYYYMMDD:当日日付入力
> A何報:ドロップダウンで選択(1〜10)
> B内容1:ドロップダウンで選択(マスタの3文章から)
> C内容2:ドロップダウンで選択(マスタの5文章から)
> D登録ボタンをクリック(下部にGridViewで[内容情報]表示してありユーザーが入力しているのを確認して登録)
> [テーブル[FAX]に1行登録される。

で、@ 〜 C のステップでユーザーが入力した内容が、D の操作でテーブル[FAX] の
レコードとして一行 INSERT されるのですよね?(GridView が出てくるところが疑問ですが
それはちょっと置いといて)

分からないのは、その次の、

> 当日YYYYMMDDのテーブル[内容情報]の内容+Aで選択した何報かテーブル[FAX]の報を使ってテーブル
> に[FAX(内容)]を作成する。

というところです。

A で選択できるのは 1 報だけのはずですが、「何報か」と複数にみえます。どういう
意味ですか?

テーブル[内容情報] には同一 [当YYYYMMDD] のレコードが 8 レコードあるようですが、
テーブル[FAX(内容)] には 8 レコード INSERT するということですか?(つまり、
[当日YYYYMMDD], [報] が同じで、それ以外の [項目名称], [FAX時間], [予定時間]
はテーブル[内容情報] から 8 レコード分取得してきてそれらを INSERT する?)

引用返信 編集キー/
■80046 / inTopicNo.5)  Re[4]: ADO.NET ライブラリ 検索結果を挿入するには?
□投稿者/ とし (6回)-(2016/06/06(Mon) 16:43:52)
No80009 (WebSurfer さん) に返信
> ■No80007 (とし さん) に返信
>
> せっかく説明してもらったのにすみませんがまだ理解できません。
>
> ページA、ページCは単なる確認用、ページDは今回の質問とは関係なく別の目的のもの
> で、今回の質問の内容は全てページBにあるということでいいですか?
>
> その理解でいいとして、まず、
>
>>2.ページBにて
>>@YYYYMMDD:当日日付入力
>>A何報:ドロップダウンで選択(1〜10)
>>B内容1:ドロップダウンで選択(マスタの3文章から)
>>C内容2:ドロップダウンで選択(マスタの5文章から)
>>D登録ボタンをクリック(下部にGridViewで[内容情報]表示してありユーザーが入力しているのを確認して登録)
>>[テーブル[FAX]に1行登録される。
>
> で、@ 〜 C のステップでユーザーが入力した内容が、D の操作でテーブル[FAX] の
> レコードとして一行 INSERT されるのですよね?(GridView が出てくるところが疑問ですが
> それはちょっと置いといて)
>
> 分からないのは、その次の、
>
>>当日YYYYMMDDのテーブル[内容情報]の内容+Aで選択した何報かテーブル[FAX]の報を使ってテーブル
>>に[FAX(内容)]を作成する。
>
> というところです。
>
> A で選択できるのは 1 報だけのはずですが、「何報か」と複数にみえます。どういう
> 意味ですか?
>
> テーブル[内容情報] には同一 [当YYYYMMDD] のレコードが 8 レコードあるようですが、
> テーブル[FAX(内容)] には 8 レコード INSERT するということですか?(つまり、
> [当日YYYYMMDD], [報] が同じで、それ以外の [項目名称], [FAX時間], [予定時間]
> はテーブル[内容情報] から 8 レコード分取得してきてそれらを INSERT する?)
>


返事が遅くなり申し訳ありません。

テーブル[FAX(内容)] には 8 レコード INSERT するということですか?
その通りです。
テーブル[内容情報] の同一 [当YYYYMMDD] の 8 レコードを
テーブル[FAX(内容)]にINSERT するということです。
ただ、報アイテムについては
A何報:ドロップダウンで選択された(1〜10のいずれかの番号)を
8 レコード全てに設定して INSERTしたいです。

解りづらくて申し訳ありませんでした。





引用返信 編集キー/
■80047 / inTopicNo.6)  Re[5]: ADO.NET ライブラリ 検索結果を挿入するには?
□投稿者/ WebSurfer (934回)-(2016/06/06(Mon) 20:21:37)
No80046 (とし さん) に返信

引用は全文ではなくて必要な部分だけにするようにお願いします。上のように全文引用
されると見づらくなるだけです。

> テーブル[内容情報] の同一 [当YYYYMMDD] の 8 レコードを
> テーブル[FAX(内容)]にINSERT するということです。
> ただ、報アイテムについては
> A何報:ドロップダウンで選択された(1〜10のいずれかの番号)を
> 8 レコード全てに設定して INSERTしたいです。

D の操作でテーブル[FAX] に必要なレコードを INSERT した後、テーブル[FAX]
とテーブル[内容情報] を JOIN した SELECT クエリを使って必要な情報は抽出できるの
ではないですか?

表示するだけなら、その SELECT クエリから DataTable を作って、それを GridView に
データバインドすればいいと思います。

その DataTable からデータを取得してテーブル[FAX(内容)] に INSERT すること
はできます。でも、その必要はあるのですか? 誰かが元のテーブルの内容を変更する
と、3 つのテーブルのデータの間の不整合が問題になると思うのですが・・・

引用返信 編集キー/
■80048 / inTopicNo.7)  Re[6]: ADO.NET ライブラリ 検索結果を挿入するには?
□投稿者/ とし (7回)-(2016/06/07(Tue) 10:46:02)
No80047 (WebSurfer さん) に返信
> ■No80046 (とし さん) に返信
>
> 引用は全文ではなくて必要な部分だけにするようにお願いします。上のように全文引用
> されると見づらくなるだけです。
>
>>テーブル[内容情報] の同一 [当YYYYMMDD] の 8 レコードを
>>テーブル[FAX(内容)]にINSERT するということです。
>>ただ、報アイテムについては
>>A何報:ドロップダウンで選択された(1〜10のいずれかの番号)を
>>8 レコード全てに設定して INSERTしたいです。
>
> D の操作でテーブル[FAX] に必要なレコードを INSERT した後、テーブル[FAX]
> とテーブル[内容情報] を JOIN した SELECT クエリを使って必要な情報は抽出できるの
> ではないですか?
>
> 表示するだけなら、その SELECT クエリから DataTable を作って、それを GridView に
> データバインドすればいいと思います。
>
> その DataTable からデータを取得してテーブル[FAX(内容)] に INSERT すること
> はできます。でも、その必要はあるのですか? 誰かが元のテーブルの内容を変更する
> と、3 つのテーブルのデータの間の不整合が問題になると思うのですが・・・


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

データの流れは
@テーブル[内容情報]とテーブル[FAX]が毎日【報:1】で作成される。
A上記D登録ボタンをクリック(下部にGridViewで[内容情報]表示してありユーザーが入力しているのを確認して登録)報:2で作成
BGridViewで[内容情報]をユーザーが更新するたびに報:3→4→5カウントアップして登録する。
常に変更さた状態でテーブル[FAX(内容)]にデータを作成する。

最終的にWebSurferさんが書かれた様に
テーブル[FAX]とテーブル[FAX(内容)] を JOIN した SELECT クエリを使って必要な情報を表示する様になっています。
JOINは当YYYYMMDDと報で結ばないといけないので
テーブル[FAX(内容)]に INSERTしたいのです。

宜しくお願い致します。






引用返信 編集キー/
■80049 / inTopicNo.8)  Re[7]: ADO.NET ライブラリ 検索結果を挿入するには?
□投稿者/ WebSurfer (935回)-(2016/06/07(Tue) 12:08:45)
No80048 (とし さん) に返信

先のレスで "引用は全文ではなくて必要な部分だけにするようにお願いします。上のよう
に全文引用されると見づらくなるだけです。" と書きましたが読んでもらってますか?

あなたのやり方をそのまま真似ると以下のようになってしまうのですが、どう思います?

> ■No80047 (WebSurfer さん) に返信
>>■No80046 (とし さん) に返信
>>
>>引用は全文ではなくて必要な部分だけにするようにお願いします。上のように全文引用
>>されると見づらくなるだけです。
>>
> >>テーブル[内容情報] の同一 [当YYYYMMDD] の 8 レコードを
> >>テーブル[FAX(内容)]にINSERT するということです。
> >>ただ、報アイテムについては
> >>A何報:ドロップダウンで選択された(1〜10のいずれかの番号)を
> >>8 レコード全てに設定して INSERTしたいです。
>>
>>D の操作でテーブル[FAX] に必要なレコードを INSERT した後、テーブル[FAX]
>>とテーブル[内容情報] を JOIN した SELECT クエリを使って必要な情報は抽出できるの
>>ではないですか?
>>
>>表示するだけなら、その SELECT クエリから DataTable を作って、それを GridView に
>>データバインドすればいいと思います。
>>
>>その DataTable からデータを取得してテーブル[FAX(内容)] に INSERT すること
>>はできます。でも、その必要はあるのですか? 誰かが元のテーブルの内容を変更する
>>と、3 つのテーブルのデータの間の不整合が問題になると思うのですが・・・
>
>
> WebSurferさんありがとうございます。
>
> データの流れは
> @テーブル[内容情報]とテーブル[FAX]が毎日【報:1】で作成される。
> A上記D登録ボタンをクリック(下部にGridViewで[内容情報]表示してありユーザーが入力しているのを確認して登録)報:2で作成
> BGridViewで[内容情報]をユーザーが更新するたびに報:3→4→5カウントアップして登録する。
> 常に変更さた状態でテーブル[FAX(内容)]にデータを作成する。
>
> 最終的にWebSurferさんが書かれた様に
> テーブル[FAX]とテーブル[FAX(内容)] を JOIN した SELECT クエリを使って必要な情報を表示する様になっています。
> JOINは当YYYYMMDDと報で結ばないといけないので
> テーブル[FAX(内容)]に INSERTしたいのです。
>
> 宜しくお願い致します。
>
>
>
>
>
>

意味が分かりません。

「JOIN した SELECT クエリを使って必要な情報を表示」ということはその時点で必要な情報は取得できている
ということで、それをテーブル[FAX(内容)] に INSERT できないはずはないと思うのですが?
引用返信 編集キー/
■80050 / inTopicNo.9)  Re[1]: ADO.NET ライブラリ 検索結果を挿入するには?
□投稿者/ Jitta (194回)-(2016/06/07(Tue) 13:25:21)
No79993 (とし さん) に返信

「出来なくて」を、説明してください。
コンパイルでエラーになるとか、
実行時にエラーになるとか、
実行したら期待していない値が入るとか。

INSERT文の構文が間違っているように思います。
insert into TABLE select ... values (...)
なんてできるんだっけ?
固定値をselectしたら、固定値になりますよね。
引用返信 編集キー/
■80051 / inTopicNo.10)  Re[2]: ADO.NET ライブラリ 検索結果を挿入するには?
□投稿者/ とし (8回)-(2016/06/07(Tue) 15:40:51)
No80050 (Jitta さん) に返信
> ■No79993 (とし さん) に返信
>
> 「出来なくて」を、説明してください。
> コンパイルでエラーになるとか、
> 実行時にエラーになるとか、
> 実行したら期待していない値が入るとか。
>
> INSERT文の構文が間違っているように思います。
> insert into TABLE select ... values (...)
> なんてできるんだっけ?
> 固定値をselectしたら、固定値になりますよね。

WebSurferさん
Jittaさん
有難う御座います。

INSERT文の構文をもう一度確認して、以下の内容で
当YYYYMMDDで抽出し[報]に指定した数字が入り追加する事が出来ました。

Dim cmd1 As New Data.OleDb.OleDbCommand("INSERT INTO [緊急FAX(項目)] ([当YYYYMMDD], [報], [項目名称_漢字], [FAX時間], [予定時間], [SEQ]) SELECT [当YYYYMMDD], ?, [項目名称_漢字], [FAX時間], [予定時間], [SEQ] FROM [迅速項目情報] WHERE ([当YYYYMMDD] = ?)", con)

cmd1.Parameters.Add("@Hou", Data.OleDb.OleDbType.VarWChar, 2)
cmd1.Parameters("@Hou").Value = HouControl
cmd1.Parameters.Add("@YYYYMMDD", Data.OleDb.OleDbType.VarWChar, 8)
cmd1.Parameters("@YYYYMMDD").Value = YYYYMMDDControl

色々有難う御座いました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -