出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

複数のSELECTタグの連動   シーブリーズさん [2002/08/15 10:02:18] [2484]
  Re:複数のSELECTタグの連動   北岳さん [2002/08/15 18:17:17] [2485]
    Re:複数のSELECTタグの連動   シーブリーズさん [2002/08/16 10:19:07] [2486]
      Re:複数のSELECTタグの連動   くっくさん [2002/08/17 9:49:25] [2490]
        Re:複数のSELECTタグの連動   シーブリーズさん [2002/08/19 11:38:30] [2491]
          Re:分からないところがあって書込みしました   シーブリーズさん [2002/08/20 15:18:30] [2498]
            Re:分からないところがあって書込みしました   北岳さん [2002/08/20 17:44:48] [2502]
              Re:分からないところがあって書込みしました   シーブリーズさん [2002/08/20 17:58:26] [2503]

[2484] 複数のSELECTタグの連動
投稿者:シーブリーズさん 2002/08/15 10:02:18
はじめましてシーブリーズです。

ASPで入力フォームを作成しているのですが、
複数のSELECTタグについて分からなかったので、
掲示板に書きこみしました。

DBの部署情報テーブルからデータを取ってきて
まず、SELECTタグのBNAMEに重複したデータを削除して表示します。
次にBNAMEを選択したときに、BNAMEに表示された値を取って
BNAME値に該当するグループ列をSQL文でExecuteし、SELECTタグのB_GPに格納します。
最後にBNAMEとB_GPで選択した値を取って、2つの値に該当する所属コードをSQL文でExecuteし、<INPUT TYPE="hidden">のBu_CDに格納するというものを下記のようにプログラムしました。
しかし、Javascriptで取得した値をSQL文にキーとして格納するための書き方が分かりません。

掲示板をご覧になっている皆様!
アドバイスを宜しくお願い致します。


<SCRIPT LANGUAGE="Javascript">
function ChangeSelection1(selOBJ){
var v = document.My_Form.BName.options[selOBJ].value;
<%
Set oRSel = oCon.Execute("SELECT グループ FROM 部署情報 WHERE 部名 = '" & v & "'")
Do Until oRsel.EOF
%>
document.My_Form.B_GP.options.value = "<%=oRSel("グループ名")%>"
<%
oRSel.MoveNext
Loop
%>
}

function ChangeSelection2(selOBJ2){
var v = document.My_Form.BName[selOBJ].value;
var x = document.My_Form.B_GP[selOBJ2].value;
<%
Set oRSel = oCon.Execute("SELECT 所属コード FROM 部署情報 WHERE 部名 = '" & v & "' AND グループ = '" & x & "'")
%>
document.My_Form.Bu_CD.value = "<%=oRSel("所属コード")%>"
<%
oRSel.CLose
%>
}

</script>
<TR><TD>
所属部署名<BR>
<SELECT NAME="BName" onChange="ChangeSelction1(this)">
<OPTION VALUE=""></OPTION>
<%
Set oRSel = oCon.Execute("SELECT DISTINCT 部名 FROM 部署情報")
Do Until oRSel.EOF
%>
<OPTION VALUE="<%=oRSel("部名")%>"><%=oRSel("部名")%>
<%
oRSel.MoveNext
Loop
%>
</SELECT>
</TD>

<TD>
グループ<BR>
<SELECT NAME="B_GP" onChange="ChangeSelction1(this)">>
<OPTION VALUE=""></OPTION>
</SELECT>
</TD>
<TD>所属コード<BR>
<input type="hidden" name="Bu_CD">
</TD>
</TR></TABLE>

<%
oRsel.Close
%>

[2485] Re:複数のSELECTタグの連動
投稿者:北岳さん 2002/08/15 18:17:17
よく読んでいませんが、仮に、
 
@サーバ側でDBから部署名のリストを得てselect box内に一覧する。
Aクライアントが例えば「技術部」を選択する。
Bサーバ側でDBから技術部配下の全グループのリストを得てselect box内に一覧する。
Cクライアントが例えば「第1グループ」を選択する。
D「技術部第1グループ」をhidden変数に格納する。
 
ということをなさりたいなら、AB間で一回サーバにsubmitしないと不可能です。
 
submitなしで済ませるには、unibon氏の必殺ワザ、
「複数の SELECT タグを連動する(クライアントサイドスクリプト版) (unibon)」
http://www.geocities.co.jp/SiliconValley/4334/unibon/asp/selectexample.html
に従い、最初から全部の部署・グループ名をHTM(またはASP)に書き込んでおく必要があります。

[2486] Re:複数のSELECTタグの連動
投稿者:シーブリーズさん 2002/08/16 10:19:07
北岳さん、ありがとうございます。

そうですか、やはりsubmitしないとだめですか。
レス中のページに行ってプログラムを見てみたのですが、
このページのプログラムはselectedIndexで同じ配列の値を表示していますが、
自分で作るとしたらvalue値を取って配列の値を表示というふうに
なると思いますので、これは・・・難しいそうですね。
でも、submitなしだったらこれしかないですもんね。
何時間かかるかわからないけど、頑張って考えてみます。

北岳さんは、今回のケースのようなものは作成されましたか?

[2490] Re:複数のSELECTタグの連動
投稿者:くっくさん 2002/08/17 9:49:25
http://tryasp.winscom.co.jp/wbbs_qa.asp?TBL=W4_ASP_QA&CATE=&MODE=L_PARENT&NO=0&CTL_DISP=GROUP&CTL_NO=47515

こちらでも似たようなやり取りがあります。
どういう風に作られたのかが分かりませんが、もしかしたら何らかの参考になるかもしれませんね。

[2491] Re:複数のSELECTタグの連動
投稿者:シーブリーズさん 2002/08/19 11:38:30
くっくさんありがとうございました。
似たようなことしている人がいるんですね。

北岳さんから適切なアドバイスを頂きましたので、
これでやってみようと今日からまた作ろうとしているところです。

いろいろ検索エンジンで検索していたら
こういう質問って結構あるんですね。
同じ事で悩んでいる人がいるので、自分も頑張ろうって気持ちになりました。
ありがとうございました。

追伸:見事作成できたら報告しますね!

[2498] Re:分からないところがあって書込みしました
投稿者:シーブリーズさん 2002/08/20 15:18:30
シーブリーズです。

さて、あれからクライアントサイドスクリプトで作成してみました。
ところが、どうやら配列から値を取り出すのが上手くいかなくて
エラーになってしまうんです。
メッセージは「オブジェクトを指定してください」と表示されます。
自分では全く分からないので、どなたか添削していただければと思っています。

宜しくお願い致します。

<%
Dim oCon,sConStr,oRset,SQL,oRSel
Dim SQL1,SQL2,oRClnt1,oRClnt2,oRClnt3
Dim m,j,BB
Set oCon = Server.CreateObject("ADODB.Connection")
sConStr = Application.Contents("ConCustomer")
Set oRset = Server.CreateObject("ADODB.Recordset")
oCon.Open sConStr
%>
<html>
<head>
<title>情報登録・更新</title>
<SCRIPT LANGUAGE="Javascript">
var J_Bu = new Array();
var J_Gp = new Array();
var J_CD = new Array();
var J_NCD = new Array();
var J_men = new Array();
var J_ID = new Array();
<%
Set oCon = Server.CreateObject("ADODB.Connection")
sConStr = Application.Contents("ConCustomer")
oCon.Open sConStr
Set oRClnt1 = oCon.Execute("SELECT DISTINCT 部名 FROM 部署情報 ORDER BY 部名")
i = 1
Do Until oRClnt1.EOF
 BB = oRClnt1("部名")
%>
 J_Bu[<%=i%>] = "<%=oRClnt1("部名")%>";
<%
 set oRClnt2 = oCon.Execute("SELECT * FROM 部署情報 WHERE 部名='" & BB & "' ORDER BY 部署id")
 set oRClnt3 = oCon.Execute("SELECT COUNT(*) AS 件数 FROM 部署情報 WHERE 部名='" & BB & "'")
 j = oRClnt3("件数")
 Do Until oRClnt2.EOF
  For m=1 to j
%>
    J_Gp[<%=i%>][<%=m%>] = "<%=oRClnt2("グループ")%>";
    J_CD[<%=i%>][<%=m%>] = "<%=oRClnt2("所属コード")%>";
    J_NCD[<%=i%>][<%=m%>] = "<%=oRClnt2("氏名コード")%>";
    J_men[<%=i%>][<%=m%>] = "<%=oRClnt2("契約担当者")%>";
    J_ID[<%=i%>][<%=m%>] = "<%=oRClnt2("部署id")%>";
<%
    oRClnt2.MoveNext
  Next
 Loop
 i = i + 1
 oRClnt1.MoveNext
Loop
%>

function funcMain(b){
 If (document.My_Form.SelBusyo.selectedIndex==0){
  document.My_Form.Selgp.length = 1;
  document.My_Form.Selgp.selectedIndex = 0;
 }
 else{
  If (b) {
   document.My_Form.Selgp.length = 1;
   document.My_Form.Selgp.selectedIndex = 0;
   }

  var v = J_Gp[b.selectedIndex - 1];
  document.My_Form.Selgp.length = v.length + 1;
  for (var i=1;i<v.length;i++){
   var x=J_Gp[i].length
   for (var k=1;k<x;k++){
    document.My_Form.Selgp.options[i].value = J_Gp[i][k];
    document.My_Form.Selgp.options[i].text = J_Gp[i][k];
   }
  }
 }
}

function ChangeSec(selOBJ){
 var j = selOBJ.selectedIndex;
 var x=J_Gp[j].length
 for (k=1;k=x;k++){
  My_Form.TxtBusyo.value = J_Bu[j];
  My_Form.Txtgp.value = J_Gp[j][k];
  My_Form.TxtCD.value = J_CD[j][k];
  My_Form.TxtNCD.value = J_NCD[j][k];
  My_Form.Txtmen.value = J_men[j][k];
  My_Form.B_ID.value = J_ID[j][k];
 }
}
function ChkForm(){
 var n = document.My_Form.TxtBusyo.value;
 if (n==""){
  window.alert("部名を入力してください");
  return false;
 }
 n=""
 var n = document.My_Form.Txtgp.value;
 if (n==""){
  window.alert("グループを入力してください");
  return false;
 }
  n=""
  var n = document.My_Form.TxtCD.value;
 if (n==""){
  window.alert("所属コードを入力してください");
  return false;
 }
 var n = document.My_Form.TxtNCD.value;
 if (n==""){
  window.alert("氏名コードを入力してください");
  return false;
 }
 var n = document.My_Form.Txtmen.value;
 if (n==""){
  window.alert("契約担当者を入力してください");
  return false;
 }

 return true;
}
</SCRIPT>
</head>
<body bgcolor="#FFFFCC" TEXT="#ff6347" onLoad="funcMain(false)">
<CENTER>
<font size="+3">契約部署情報登録・更新 </font>
<p>

<table cellspacing="10" width="70%">
<tr><td colspan="3" align="right">
<TABLE>
<TR>
<TD><INPUT type="button" NAME="Btn_End" value="終了" onClick="location.href='index.asp'">
</TD>
<FORM METHOD="POST" NAME="My_Form" ACTION="busyo.asp">
<TD>
<INPUT type="submit" NAME="Btn_New" value="登録" onClick="if(confirm('部署情報に登録しますか?'))return ChkForm();else return false">
</TD>
<TD>
<INPUT type="submit" NAME="Btn_Up" value="更新" onClick="if(confirm('部署情報に更新しますか?'))return ChkForm();else return false">
</TD></TR></TABLE>
</TD></TR>
<TR>
<TD NOWRAP>部名<input type="text" name="TxtBusyo" size="46"></TD>
<TD NOWRAP>グループ<input type="text" name="Txtgp" size="16"></TD>
<TD NOWRAP>所属コード<input type="text" name="TxtCD" size="16"></TD>
</tr>
<TR><TD>
<SELECT NAME="SelBusyo" onChange="funcMain(true)">
<OPTION VALUE=""></OPTION>
<%
oRClnt1.MoveFirst
Do Until oRClnt1.EOF
%>
<OPTION VALUE="<%=oRClnt1("部名")%>"><%=oRClnt1("部名")%></OPTION>
<%
oRClnt1.MoveNext
Loop
%>
</SELECT>
</TD>
<TD>
<SELECT NAME="Selgp" onChange="ChangeSec(this)">
<OPTION VALUE="" SELECTED></OPTION>
<OPTION VALUE=""></OPTION>
<OPTION VALUE=""></OPTION>
</SELECT>
</TD>
<TD><FONT SIZE="-1">←既存の部署情報を閲覧する場合は、こちらから選択してください</FONT>
</TD></TR>
<tr>
<TD COLSPAN="3" NOWRAP>
<TABLE>
<TR>
<TD NOWRAP>氏名コード<BR><input type="text" name="TxtNCD" size="16"></TD>
<TD NOWRAP>契約担当者<BR><input type="text" name="Txtmen" size="16"></TD>
</TR></TABLE>
</td></tr></table>
<INPUT TYPE="text" NAME="B_ID">
</FORM>

<BR>
</CENTER>
</body>
</html>

[2502] Re:分からないところがあって書込みしました
投稿者:北岳さん 2002/08/20 17:44:48
>メッセージは「オブジェクトを指定してください」と表示されます。
 
エラー発生行の、ピリオドの前のオブジェクトが定義されていないことを意味します。
例えば oCon.Open sConStr で出るなら、後の sConStr がエラーの原因ではなく、
ピリオドの前の oCon が定義されていないことになります。
 
>自分では全く分からないので、どなたか添削していただければと思っています。
 
同じDBがない環境では、エラーが出るソースの添削は事実上不可能です。
(もっとも同じDBがあっても、ソースが長いので添削はしませんが。)

[2503] Re:分からないところがあって書込みしました
投稿者:シーブリーズさん 2002/08/20 17:58:26
北岳さんありがとうございました。

確認してみたところ、oCon,sConStrの部分ではなく違う個所のJavaScriptが間違えていましたので、修正致しました。

確かにソースが長すぎるので添削できませんよね。
大変失礼致しました。
まだ、Javascript初心者なので、分からないし、上手くいかずに掲示板に頼ってしまいましたが、頑張ってやってみます。
ありがとうございました。



TreeBBS For ASP V.0.1.3
Program By YasNet