お世話になっております。
わたしは、以前からの続きでDBの構築をSAVERはsql2000、ColdFusionとjsを使って社内WEBを構築しております。
そこで、皆様のお力をお借りしたいのですがよろしくお願いいたします。
それは、普通(?)でしたら、社員名簿と1件づつINPUTしていくのが、開発していく上では楽なのですが、担当者が、部署ごとに一気に15件を入力してまとめてINPUTできるようにして欲しいと依頼され、困って降ります。
そこで、配列を使って入力すればいいのかと思い、coldfusionのリファレンスを見たのですがよく分かりません^^;
そこで、どういうロジックで配列を組んでいけばよいか、どなたか教えてください。
項目は、一番上に「部署」フィールドがありそこの一箇所に入力します。
そして、下には15件分のデータを入力するフィールドが存在し、「氏名」「役職」「E-Mail」「tel」の項目があります。登録ボタンを押すと全てのレコードがDBに落ちるようにしたいのですが、どのようにしたらよろしいのかお願いいたします。
長文になってしまい、申し訳ございませんm(_ _)m
No.1ベストアンサー
- 回答日時:
そこまで仕様が決まっているのであれば、そのまま作ればできると思いますけど。
(笑)15件の部分をどうSQLにセットすればいいかがわからないってことでしょうか?
一番簡単な方法でしたら、
1.15件の入力フィールドのそれぞれの名前を同じにする。
(例えば、Telを入力するフィールドは15件すべて"strTel"というNameを付ける)
2.全部がキチンと入力されているかを、JavaScriptでチェック
3.OKだったら、アクションページへSubmit
4.アクションページで変数を取得
5.取得した変数は、同じ名前だとカンマ区切りの変数になっているので、それをListToArray関数を使って配列化する。
6.配列のレングス分、SQLをループで回す。
という手順でしょうか?
1.で複数のテキストボックスに同じ名前を付けると、4.のところで取得する変数は
Form.strHensu=1,2,3,4,5
という形の受け取りになるんですね。
ですので、その変数を配列化します。
リストを配列にするには、ListToArrayを使います。
上記の変数ですと、
<CFSET setArray=ArrayNew(1)> <--- 配列を作成
<CFSET setArray=ListToArray(Form.strHensu)> <--- 配列にセット
とすると、setArrayという配列の中に、カンマ区切りの値が一つづつ格納されます。
そして、最後にSQLをこの配列分回してやればいいわけです。
<CFLOOP INDEX="i" FROM="1" TO="#ArrayLen(setArray)#">
<CFQUERY ~>
実行するINSERT SQL
この時、セットする変数を、
setArray[#i#]
で指定してあげればいいです。
外側を#でくくらなければいけないときはEvaluate関数を使います。
#Evaluate("setArray[#i#]")#
</CFQUERY>
</CFLOOP>
これで、15件分のデータを一気に書き込めます。
他のやり方もありますよ。
例えば、フォームの内容を書き出すときにすでに<CFLOOP>を使って、番号付きの名前のフィールドを自動生成して、SQLもそれをつかうとか。
・・・って、文字で書くとややこしいですけど、こちらも簡単です。配列使わなくて済みます。
速度的には配列を使った方が早いかもしれないけど、15件程度なら大した差はないでしょう。
ちなみにもっと大量のデータであれば、既存のCSVファイルを作成して、<CFHTTP>タグを使ってファイル毎uploadって事もできます。
こちらの方法であれば、100件単位でも可能です。
(ただ、この方法を文章で教えろといわれても、できかねますが・・・。(^^;;)
参考URLにオンラインマニュアルのURLを載せておきます。
上記のタグも関数も載っていますので、参考になさってください。
がんばってくださいね~。
参考URL:http://202.33.114.61/docs/CFML_Language_Referenc …
この回答への補足
お世話になっておりますm(_ _)m
アドバイスいただきましたようにリファレンスをみながらがんばっているのですがいくつか、分からないところがありますのでよろしくお願いいたします。
(1)strTelというのがsabmitされたときにFORM.strHensuというのは、strTelに対応しているのでしょうか?
(2)他の項目も同じ手順で繰り返してsetしていけばいいのでしょうか?同じようにしてみたりしたのですが、うまくいかず頭が爆発しそうです(><)
できましたならば、cfloop間のロジックを私にでもわかるようにお願いしたいのですが・・・すみません、生意気いってm(_ _)m
なにとぞよろしくお願いします。
ありがとうございます。
あれからとにかくこうしてみようと思って組んでいきましたら完成することができました。これからも、自分で考えた上で分からないことが出ましたら投稿させていただきますのでよろしくお願いします。
ほんとに、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- Visual Basic(VBA) VBA エクセル 条件の設定 1 2022/03/28 10:24
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) VBAで重複データを確認したい 5 2022/10/07 16:24
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで、絶対値の平均を算...
-
Excelのセルの色指定をVBAから...
-
Excel オートフィルタのリスト...
-
ExcelのINDEXとMATCH関数でスピ...
-
[エクセル]連続する指定範囲か...
-
配列がとびとびである場合の書き方
-
エクセルでエラーを無視して一...
-
【VBA】ユーザーフォーム リス...
-
Split関数でLong配列に格納する...
-
array関数で格納した配列の型を...
-
CSVファイルの読み込みと表示(V...
-
VBA 配列に格納した値の平均の...
-
【VBA】 動的な変数(定数)の指定
-
Datatableへの代入
-
[VBA]改行入りのセルの値を配列...
-
【VBScript】Dictionaryの項目(...
-
.NET - 配列変数を省略可能の引...
-
VBA listBoxについて
-
DataSetから、DataTableを取得...
-
読み込みで一行おきに配列に格納
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
array関数で格納した配列の型を...
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
VBA listBoxについて
-
エクセルで、絶対値の平均を算...
-
配列がとびとびである場合の書き方
-
DataSetから、DataTableを取得...
-
[VBA]改行入りのセルの値を配列...
-
VBA 配列に格納した値の平均の...
-
配列のSession格納、及び取得方...
-
【VBA】ユーザーフォーム リス...
-
エクセルでエラーを無視して一...
-
SUMPRODUCT関数を用いた最小値
-
Excel VBA 配列の分割について
-
Excelのオートフィルタで抽出し...
-
VB6.0 ファイルの一括読込み
-
Excel オートフィルタのリスト...
-
VBAで指定期間の範囲を抽出し、...
おすすめ情報