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

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

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

Re[10]: 既存のデータと一致の場合テキストボックスに相当するデータを


(過去ログ 39 を表示中)

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

■20641 / inTopicNo.1)  既存のデータと一致の場合テキストボックスに相当するデータを
  
□投稿者/ キキ (12回)-(2008/06/13(Fri) 13:38:01)

分類:[.NET 全般] 

いつもお世話になっております!

TextBox1にコードになる値を入れ、TextBox2に移動した時にデータベースからTextBox1に入れたコードを検索し、既存のデータがあったならTextBox2にそのコードの列の名前を表示してあげる物を作りたいのですが、うまくいきません…

テキストボックス1に入れたコードを入れてあげる変数を用意し、SQLのWHERE文で使えるようにしたつもりなのですが・・・

Private Sub TextBox2_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.PreRender

Dim code1 as string

Try
code1 = TextBox1.Text
conn.ConnectionString = "User Id=scott;Password=tiger;Data Source=horiemon;"
conn.Open()
cmd.Connection = conn
cmd.CommandText = "select name from dept where code = 'code1'"
rd = cmd.ExecuteReader

While (rd.Read)
TextBox2.Text = rd("name")
End While

conn.Close()
Finally
End Try

End Sub

まず、イベントが発生するタイミングが悪いのか、SQL分の記述が悪いのかがわかりません。
エラーは出ないのですが、TextBox1に記入したコードに相当する名前をとってきてくれません;;
何方か原因を教えていただけないでしょうか;;お願いします!
引用返信 編集キー/
■20642 / inTopicNo.2)  Re[1]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ bad14mg (6回)-(2008/06/13(Fri) 13:44:00)
No20641 (キキ さん) に返信
> cmd.CommandText = "select name from dept where code = 'code1'"

これだと、変数のcode1の値で検索するのではなく、
『code1』という文字列での検索になりますよね。

引用返信 編集キー/
■20644 / inTopicNo.3)  Re[1]: 既存のデータと一致の場合テキストボックスに相当
□投稿者/ はつね (782回)-(2008/06/13(Fri) 13:46:50)
はつね さんの Web サイト
2008/06/13(Fri) 13:48:02 編集(投稿者)

No20641 (キキ さん) に返信
> TextBox1にコードになる値を入れ、TextBox2に移動した時にデータベースからTextBox1に入れたコードを検索し、

その操作性って次の事を考慮していますか?
(1) TextBox1にコードを要れずにTextBox2にフォーカスを移動してきたときの動作
(2) TextBox1からTextBox2以外にフォーカスを移動したときの動作

> Handles TextBox2.PreRender

PreRenderという事はASP.NETですか?
PreRenderイベントはどういうタイミングで発生する事を期待しているのでしょうか。
AJAXすら使わずに、WEBでフォーカス移動しただけでDBアクセスはレスポンス悪すぎかと。


> まず、イベントが発生するタイミングが悪いのか、SQL分の記述が悪いのかがわかりません。

イベント発生していますか?
そして、発生して該当コードに入ってきたときに、各変数にはどのような値がはいっているか確認してみましたか?


> "select name from dept where code = 'code1'"

TextBox1の値を使っているようには見えませんが。
ということで↓のデータ取得あたりをみてみてください(特にParameterオブジェクトあたり)。
http://blogs.wankuma.com/hatsune/archive/2008/06/09/142448.aspx



引用返信 編集キー/
■20649 / inTopicNo.4)  Re[2]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ キキ (13回)-(2008/06/13(Fri) 14:10:49)
>bad14mg さん

「'」で区切ると文字列になってしまいますね;;盲点でした・・・
やはりSQLで条件文を書くのは間違いってことですかね…

>はつねさん
>(1) TextBox1にコードを要れずにTextBox2にフォーカスを移動してきたときの動作
>(2) TextBox1からTextBox2以外にフォーカスを移動したときの動作
どちらも何も起こさず、TextBox2にカーソルが当たった時に
TextBox1に入力があり、なおかつ入力された文字と同じ物がデータベース上に存在する場合は同じ列の名前を取得するという動作をしたいのです。分かりづらくて申し訳ありません。
ASP.NETでWEBアプリケーションを作成しています。
まずカーソルを移動した というのがどの記述がなのか分からないです…
描画前に当たるPreRenderではありませんでしたね・・・
引用返信 編集キー/
■20650 / inTopicNo.5)  Re[3]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ επιστημη (1088回)-(2008/06/13(Fri) 14:21:29)
επιστημη さんの Web サイト
> まずカーソルを移動した というのがどの記述がなのか分からないです…

"フォーカスが飛び込んだとき"であれば Enter はいかがでしょうか

引用返信 編集キー/
■20652 / inTopicNo.6)  Re[4]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ キキ (14回)-(2008/06/13(Fri) 14:33:03)
No20650 (επιστημη さん) に返信
>>まずカーソルを移動した というのがどの記述がなのか分からないです…
>
> "フォーカスが飛び込んだとき"であれば Enter はいかがでしょうか
>
Textboxのイベントの中にEnterというイベントは存在しませんでした;;
DataBinding,Disposed,Init,Load,PreRender,TextChanged,Unload …
どれもうまくいきません・・・
引用返信 編集キー/
■20656 / inTopicNo.7)  Re[5]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ eternia (23回)-(2008/06/13(Fri) 14:48:40)
No20652 (キキ さん) に返信

>TextBox2にカーソルが当たった時
どーしてもこのタイミングじゃないとダメなんでしょうか?

TextBox2に入力ができると仮定して、
TextBox2→TextBox1の順で入力されると
データがあったとしてもコードの列の名前は表示されないと思いますが。

TextBox1のTextChangedで処理したほうが楽な気がします。

引用返信 編集キー/
■20658 / inTopicNo.8)  Re[5]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ はつね (783回)-(2008/06/13(Fri) 15:11:01)
はつね さんの Web サイト
No20652 (キキ さん) に返信
> >>まずカーソルを移動した というのがどの記述がなのか分からないです…
>>
>>"フォーカスが飛び込んだとき"であれば Enter はいかがでしょうか
>>
> Textboxのイベントの中にEnterというイベントは存在しませんでした;;

ASP.NETだからEnterイベントはありませんね。
JavaScript の onFocusあたりと組合せないとダメだと思います。
面倒だし、完成しても操作性悪いので良い事は1つもないと思うけど。

とりあえず、ボタンを配置してそのボタンを押したときにTextbox1の値で検索してTextbox2に値を設定する
という形で完成させていみたら?


引用返信 編集キー/
■20673 / inTopicNo.9)  Re[6]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ キキ (15回)-(2008/06/13(Fri) 16:26:41)
eterniaさん、はつねさん、有難うございます!
とりあえず目的はTextBox2に名前を表示させる事だったので、ボタンを作り実行出来たので
TextBox1_TextChanged(TextBoxのAutoPostBackがTrueだという事が前提)で実行してみることにしました。

Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

Try

conn.ConnectionString = "User Id=scott;Password=tiger;Data Source=horiemon;"
conn.Open()

cmd.Connection = conn
cmd.CommandText = "select name from dept where code = '" & TextBox1.Text & "'"
cmd.CommandType = CommandType.Text

rd = cmd.ExecuteReader

While (rd.Read)
TextBox2.Text = rd("name")
End While
conn.Close()

Finally
End Try

bad14mgさんが教えてくれた通り、文字列と判断されない為には "" で囲い、変数ではなく直接的にTextBox1.Textを入れたら出来ました!!
色々勉強になりました!協力して下さった方々ありがとうございました(´ω`*)
引用返信 編集キー/
■20674 / inTopicNo.10)  Re[7]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ キキ (16回)-(2008/06/13(Fri) 16:27:40)
解決チェック忘れました^^;
解決済み
引用返信 編集キー/
■20679 / inTopicNo.11)  Re[7]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ bad14mg (7回)-(2008/06/13(Fri) 16:32:26)
2008/06/13(Fri) 17:38:39 編集(投稿者)
2008/06/13(Fri) 16:45:28 編集(投稿者)

No20673 (キキ さん) に返信
> "select name from dept where code = '" & TextBox1.Text & "'"

これでも実現は出来ていますが、No20541の記事でも話題なっていますが、
SQLインジェクションの問題が発生します。
はつねさんがNo20644で紹介されているページ等を参考に、
SQLを修正することをお勧めします。

追記
No20541 null
http://bbs.wankuma.com/index.cgi?mode=al2&namber=20541
引用返信 編集キー/
■20681 / inTopicNo.12)  Re[7]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ はつね (784回)-(2008/06/13(Fri) 16:57:05)
はつね さんの Web サイト
No20673 (キキ さん) に返信
> TextBox1_TextChanged(TextBoxのAutoPostBackがTrueだという事が前提)で実行してみることにしました。

これ、一文字入力されるたびにWEBサーバまで通信が行われ、さらにDBまで接続されてSELECT文が発行されます。
実験ならばいいですが、業務システムでこの手法でやろうとすると、利用人数が増えたときに極端に処理速度が低下するなど「使えないシステム」となる事をお忘れなく。

SQLインジェクションについては、bad14mgさんのコメントを参考にしてください。

解決済み
引用返信 編集キー/
■20696 / inTopicNo.13)  Re[8]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ eternia (24回)-(2008/06/13(Fri) 17:39:04)
No20681 (はつね さん) に返信
> これ、一文字入力されるたびにWEBサーバまで通信が行われ、さらにDBまで接続されてSELECT文が発行されます。
> 実験ならばいいですが、業務システムでこの手法でやろうとすると、利用人数が増えたときに極端に処理速度が低下するなど「使えないシステム」となる事をお忘れなく。

あれ?AutoPostBackって入力後フォーカス外れた時じゃなかったですっけ?
イベント走るのもこのタイミングだったと思いましたが。

#検証できる環境がないので記憶違いかもしれませんが^^;

解決済み
引用返信 編集キー/
■20699 / inTopicNo.14)  Re[9]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ bad14mg (8回)-(2008/06/13(Fri) 17:43:08)
2008/06/13(Fri) 17:43:40 編集(投稿者)

No20696 (eternia さん) に返信
> ■No20681 (はつね さん) に返信
>>これ、一文字入力されるたびにWEBサーバまで通信が行われ、さらにDBまで接続されてSELECT文が発行されます。
>>実験ならばいいですが、業務システムでこの手法でやろうとすると、利用人数が増えたときに極端に処理速度が低下するなど「使えないシステム」となる事をお忘れなく。
>
> あれ?AutoPostBackって入力後フォーカス外れた時じゃなかったですっけ?
> イベント走るのもこのタイミングだったと思いましたが。

VS2005(VB)で試してみました。入力後フォーカスが外れたときに
発生しているようです。
解決済み
引用返信 編集キー/
■20709 / inTopicNo.15)  Re[10]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ eternia (25回)-(2008/06/13(Fri) 18:29:52)
No20699 (bad14mg さん) に返信
>
> VS2005(VB)で試してみました。入力後フォーカスが外れたときに
> 発生しているようです。

おお。検証していただいてありがとうございます。

となるとそんな頻繁にはイベントが走るわけではないですし、
「使えないシステム」ってことにはならないのではないかなーと思った次第です。
同時実行での処理速度の低下はボタンのクリックイベントでも大して変わらない気がするのですが……

#解決したスレですいません。気になってしまったもので。

解決済み
引用返信 編集キー/
■20730 / inTopicNo.16)  Re[10]: 既存のデータと一致の場合テキストボックスに相当するデータを
□投稿者/ はつね (785回)-(2008/06/14(Sat) 08:18:50)
はつね さんの Web サイト
No20699 (bad14mg さん) に返信
> VS2005(VB)で試してみました。入力後フォーカスが外れたときに
> 発生しているようです。

失礼いたしました。

自分でTextChangeイベントのプロシージャだと引用しておきながら、発生タイミングを勘違いしておりました。
# すっかり頭の中で、Javascript使って1文字入力のタイミングでチェックと思ってしまっていました。

フォローありがとうございます。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -