• 締切済み

MDBの大量のフィールドへループでinsert

お世話になっております。 Visual Studio2013で、テキストボックスに入力された値をmdbへ挿入しようと思っています。 フォーム上にTextBox1~ TextBox100があり、それぞれの値を1つずつフィールド へ挿入したいのですが、INSERT文へ100個もフィールド名を書かないように ループさせる方法はあるのでしょうか? For i = 1 to 100 sSql = "INSERT INTO table1(???) VALUES('" & Me.Controls("TextBox" & i).Text & "');" のようなイメージです・・・。 初心者の質問で申し訳ありませんが、よろしくお願いします。

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

はっきり言ってないです。 NULL可能なフィールド以外は必ず値を入れなければなりません。 VALUESの場合はフィールド名も書かなければなりません。 SQL自体をループで生成することはできます。 例えばフィールド名が"X001"、"X002"、…、"X100"ならば 以下の通りです。 SQL = "INSERT INTO TABLE VALUES" For I = 1 To 100   SQL = SQL & IIf(I = 1, "(", ",")   SQL = SQL & "'" & Me.Controls("TextBox" & I) & "'"   SQL = SQL & " AS X" & Fromat(I, "000") Next SQL = SQL & ")" 同様のフィールドが100個あるというのはテーブルの設計が オカシイと思いますよ。親-子の関係のテーブルを考えるのが 本筋でしょう。

回答No.1

フィールドも100あるということですよね。 SQLでは、100個のフィールド名を書く必要があるとおもいます。 レコードセットを開いて、AddNewすればフィールドをループさせることができます。 rs.Open(・・・・・・) rs.AddNew() For i = 1 to 100   rs.Fields(i-1).Value = Me.Controls("TextBox" & i).Text Next rs.Update() rs.Close() TextBox1~ TextBox100 の値を、1列目から100列目にセットします。

関連するQ&A

  • INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい

    挿入するフィールドの内1つだけを他のテーブルから取ってきた値を使いたいのですが、 insert into table1 (field1, field2, field3) values('a', (select field2 from table2 where field4='xxx'), 'b'); Oracleだと↑の書き方でいけるのですが、PostgreSQL(6.5.3)だとエラーになってしまいます。 2回もDBにアクセスしにいくのはいやなので、1文で書きたいです。上記以外で他の書き方をご存知でしたら教えてください。よろしくお願いします。

  • OracleでINSERT文のループ

    INSERT文で何万件ものデータをテーブルに挿入したいのですが、 SUBSTRBまたはSUBSTR関数で何バイト分あるいは何文字分抽出して その部分の値をインクリメントさせる記述のしかたがわかりません。 INSERT INTO aaa (ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP) VALUES ('30000003000','2000','2','85000','001','55555','10','test','1'); INSERT INTO aaa (ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP) VALUES ('30000003001','2000','2','85001','001','55555','10','test','1'); INSERT INTO aaa (ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP) VALUES ('30000003002','2000','2','85002','001','55555','10','test','1'); INSERT INTO aaa (ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP) VALUES ('30000003003','2000','2','85003','001','55555','10','test','1'); ・ ・ ・ と、いう感じで、IDとNOのみ、値をインクリメントさせて大量のデータを 挿入したいのですが、SUBSTRB関数やループなどを使って効率的に行うやり方がわかりません。どなたか、ご教授ください。

  • 変数のinsertに関しまして

    MySQLのインサートに関して質問です。 2つの値を登録したい場合、 下記のように対応すれば、 データの挿入は通常どおり完了しますが、 insert into テーブル名 (フィールド1, フィールド2) values (値1, 値2);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 私の場合は、 「ken_name」と「machi_name」という変数を、 上記でいうところの、 「値1」と「値2」に入力したいと思っています。 変数の指す部分は、 それぞれ30文字程度の英数字です。 プログラム内で、 以下のように、 インサートのクエリー処理を行ってみたら、 DB接続も正常に出来ているし、 エラーとかも一切出ていないのですが、 DB内のテーブルに何も登録されていませんでした。 insert into テーブル名 (フィールド1, フィールド2) values (ken_name, machi_name);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ やり方としては、合っていますでしょうか? 何かアドバイスいただけると嬉しいです。 宜しくお願い致します。

  • int型フィールドにnullを登録できない・・・

    > insert into tbl_tst values (001,'',21000,,22,4400,'3~4日','∞') とすると syntax error になってしまいます。 > insert into tbl_tst values (001,'',21000,'',22,4400,'3~4日','∞') とすると out of range になってしまいます。 > insert into tbl_tst values (001,'',21000,0,22,4400,'3~4日','∞') は通常に登録できます。 > insert into tbl_tst values (001,'',21000,'0',22,4400,'3~4日','∞') も通常に登録できます。 4カラム目のフィールドなのですが、show fields で見ても int(11) Null→YES  Default→NULLとなっております。 NULLを登録(何も値を入れない)したいのですが、 どうすればよいでしょうか。 ご存知の方いらっしゃいましたらご教示願います。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • フィールドをデフォルト0にする

    フィールドをデフォルト0にする方法が知りたいです。 以下のようなサンプルがります。 drop table test_a; create table test_a ( name varchar2(10), a number(1), b number(1), c number(1) ) insert into test_a (name) values ('AAA'); insert into test_a (name,a) values ('BBB', NULL); insert into test_a (name,a,b) values ('CCC', NULL,NULL); select * from test_a; この状態では、a,b,cはNULLですが、a,b,cの値をデフォルト値で0にしたい為、 update test_a set a = 0, b = 0, c = 0; として、データを直して、次回から insert into test_a (name) values ('DDD'); とすると、nameがDDDの時もa,b,cが0となるようにテーブル定義を変えたいのですが 既存のテーブルをそのままで、途中から変更する方法が知りたいです。

  • テーブルにフィールド数以下の値を挿入しようとした時エラーが出ます

    テーブルのフィールド数が10あるとします。挿入したい値が3つしかないとします。 列名を指定せずに挿入するとします。 Insert Table Values('a','b','c') とやった時、フィールド数が足りませんといったようなエラーが表示されます。 列名を省略したやりかたでは、列名分の値を付け加える必要があるのでしょうか? 先頭の3フィールドのみにデータを追加したいと思うのですが、無理でしょうか?

  • VB2008、Insertのループをかけたいのですが・・・

    初の質問になりますが、よろしくお願いします。 現在、VB2008にて、DataGridViewに入力した内容を、Insertで登録処理をするという作業を行っているのですが、変わった現象が起きてしまうのです。 まず、ボタンクリックのイベントで、DataGridViewの内容を一行づつ取り込み、Insertのループを行うと言うものなのですが、 DataGridViewにある列は、'日付','出勤時間',退社時間','~~と続くのですが、日付だけしか一行づつ取り込めず、それ以外の列項目は、値の入っている列までしか取り込めないんです。 たとえば、二行目まで値を入れ、三行目からはすべてのCellをNullの状態にしてInsertのループをかけると、二行目にしか入らない値が、三行目以降まで続いてしまうんです。これってどういうことでしょうか、、、ちなみに日付だけはきちんとInsertされるのです。どなたかお分かりになる方いらっしゃらないでしょうか。 ちなみにこれがソースです。 For r As DataGridViewRow in DataGridView1.Rows 日付 = DataGridView1(0, r.Index).Value If IsDBNull (DataGridView1(9, r.Index).Value) = False Then 出勤時間 = DataGridView1(9, r.Index).Value Else If IsDBNull(DataGridView1(5. r.Index).Value) = False Then 出勤時間 = "0" End If '列が多いので、省略します。 'ここからInsert sql = "Insert into Time Seet" sql &= "Values (" sql &= "'" & 日付 & "'" : : Next r という形です。列が長いので、だいぶ省略しましたので伝わりにくいかと思いますが、よろしくお願いします。 ちなみに他のサイトでは、 ループの外側でパラメータクエリを作成して、ループの中ではパラメータの設定とSQLの実行のみにすればよいです。 と言われましたが、パラメータクエリというのがイマイチ理解できなかったので・・・ できればそれらに関する情報や考え方なども教えてくださるとうれしいのですが・・・よろしくお願いします。

  • 一括でINSERTする方法(PL/SQL)

    PL/SQLを利用して、下記3つのSQLを一括でinsertしたいと思います。 (値は、任意でありません。) PL/SQLに関して、初心者なので、どのように記述してよいか 分かりません。 サンプル的なソースを用いて解説して頂けるとありがたいです。 (1)INSERT INTO tb1(列1, 列2) VALUES('値1','値2') (2)INSERT INTO tb1(列1, 列2) VALUES('値3','値4') (3)INSERT INTO tb1(列1, 列2) VALUES('値5','値6')

  • insertを高速化させたい

    問題:insertが遅い。20件程度の情報をテーブルにinsertするのに、30秒以上かかる。 環境:Windows XP, MYSQL(TABLE1のidにはindexつき) 仕様:textdata.csvを開き、idを取得する。取得したidをgetid変数に入れる。    取得したidがTABLE1に無いか調べる。idが無ければinsert。    あれば読み飛ばす。textdata.csvのidが無くなれば終わり。 con = CREATEOLEOBJ("ADODB.Connection") //ここでCSVファイルを開き、idを取得しループさせる getidSQL = "Select * from TABLE1 where id = '" + getid + "';" RS = con.Execute(getidSQL) If RS.EOF Then //DB登録--------------------------------------------------------------------------------------- str = "INSERT INTO TABLE1 (id) values('" + getid + "');" con.Execute(str) //DB登録終了------------------------------------------------------------------------------------ endif //CSVループ ちなみに、DBにinsertせずに、かわりにテキストファイルに書き込む方法だと一瞬で挿入が完了します。 これをDBに書き込む時に高速化を図りたいのですが、何か良い方法はないでしょうか?

  • AUTO_INCREMENTのフィールドにインポートするには?

    データの入っていないテーブルにphpmyadminからテキストファイルをインポートしようとしています。 下記のようなinsert文が3000行ぐらいあります。 INSERT INTO `table` (`id`, `name`, `yomi`) VALUES (■,阿部,あべ); 上記のidフォールドにAUTO_INCREMENTが設定されています。 ■にはどのような値をいれればいいのでしょうか? 試しに連番で数字を振ってみたのですがエラーになってしまいました。

    • ベストアンサー
    • MySQL

専門家に質問してみよう