• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:入力された値の動的取得方法について)

入力された値の動的取得方法について

このQ&Aのポイント
  • WINアプリ作成において画面上に非常に多くの項目が存在しており、その項目データ全てに対しMySQLを利用して保存したいと考えています。
  • 項目数が非常に多いため動的にクエリを作成できればと考えています。
  • 入力される項目に従属して列名にinsertされるようにしたいと思っています。

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

  • ベストアンサー
回答No.2

入力されていない項目に対して、 文字型なら '' 数値型なら 0 で INSERT すれば問題ないと思うんですけど・・・。 (この方法ならバインド変数を使う意味があります。) ご注文のように、入力されていない項目は、列名、値、共に省略するのでしたら、 Dim strColumns As String Dim strValues As String Dim strSql As String strColumns = "" strValues = "" If textbox1.Text <> "" Then  strColumns = "列名1"  strValues = "'" & textbox1.Text & "'" End If If textbox2.Text <> "" Then  If strColumns <> "" Then   strColumns = strColumns & ","   strValues = strValues & ","  End If  strColumns = strColumns & "列名2"  strValues = strValues & "'" & textbox2.Text & "'" End If If textbox3.Text <> "" Then  If strColumns <> "" Then   strColumns = strColumns & ","   strValues = strValues & ","  End If  strColumns = strColumns & "列名3"  strValues = strValues & "'" & textbox3.Text & "'" End If ... strSql = "INSERT INTO table名 (" & strColumns & ") Values (" & strValues & ")" のようにすればよいのではないでしょうか。 ちなみに、開発環境は VB6 ですか?

nika_
質問者

お礼

ありがとうございました。 なんとかなりました。

その他の回答 (1)

回答No.1

table名と列名は固定でしょうか? 固定であれば、 Dim strSql As String strSql = "INSERT INTO table名 (列名1,列名2...) VALUES (" '文字型の場合 strSql = strSql & "'" & textbox1.Text & "'," '数値型の場合 If textbox2.Text <> "" Then strSql = strSql & textbox2.Text Else strSql = strSql & "0," End If ... strSql = strSql & ")" のような感じで INSERT 文を組み立て、それを実行すればよいと思います。 table名が状況によって変わる場合は、table名によって列名も変わるでしょうから、all_tab_columns テーブルから列名を取得してやるとかしないといけないので、ちょっと面倒くさそうですね。 あと、Oracle とか MS-SQL だとバインド変数を使う方法もあるのですが(バインド変数を使用する方が SQL 文の解釈だとかの効率が良いらしいです。)、MySql ってバインド変数が使えるのでしょうか?

nika_
質問者

お礼

回答ありがとうございます。 >table名と列名は固定でしょうか?  tableが複数あり、其の中にそれぞれ特定のテキストボックス(列名)が存在しているようになっていますので、特定のテーブル単体では毎回列名は固定されています。 今回たとえば、一画面にAとBテーブルがあったとして、AとBのテーブル内に ○A→3つのテキストボックス(列名のこと) ○B→6つつのテキストボックス(列名のこと) があったとして、 まず、Aのテーブル内のテキストボックス2つに値を入力されたとします。(3つめのテキストボックスは入力されていない) また、同時にBテーブルのボックス3つに入力されたとします。(残り3ボックスは入力されていません) その際、入力されたAテーブルの2つのボックスに対応する列名とVALUESの値がINSERT文に記述されるような事を考えています。 また、Bテーブルでも同様にしたいと考えています。 つまり、入力されたボックスに焦点をあてて動的にINSERT文を作れないか?という事で、入力されていないテキストボックス名はINSERT文から省きたいと考えています。これを動的にしたいのです。 >strSql = strSql & "'" & textbox1.Text & "'," この文「 textbox1.Text  」を入力されたテキストボックスから動的に変更出来ないのかが気になっています。 例えば 、3つのテキストボックスがありそのうち、1番目と2番目に入力があったとき、変数をiとして 1 と 2 が入るようにしたいので以下のように文が書けるのだろうか?? 「 textbox[i].Text 」 という事が知りたいと思っています。 >MySql ってバインド変数が使える 調べてみたところ使えるようですが、いまいち良く分かりません。 ご教授お願い致します。