HTMLで作成したフォーム上のドロップダウンリストにACCESS97のmdbのテーブルのあるフィールドを表示できるようにしたいのですが、VBscriptでコードを記述するのも初めてで、またmdbへの接続もADOを使っていますので、あまり良くわかりません。できましたら、コードの記述など具体的に教えていただけたら助かります。よろしくお願い致します。
こんな感じかな。
次の HTML をファイルに保存して、開いてみて下さい。
(データベース名を変更してからね。)
コンボボックスにテーブルの一覧が表示されます。
<!-- ここから -->
<?xml version="1.0" encoding="Shift_JIS"?>
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=x-sjis" />
<script language="VBScript"><!--
Option Explicit
Private Sub SetTableList()
On Error Resume Next
Const adSchemaTables = 20
Dim adoCn 'As ADODB.Connection
Dim adoRs 'As ADODB.Recordset
Dim opt 'As Object
Set adoCn = CreateObject("ADODB.Connection")
'* Data Source に mdb ファイルパスを指定して下さい。
adoCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\db1.mdb;"
Set adoRs = adoCn.OpenSchema(adSchemaTables)
Do While adoRs.EOF = False
Set opt = Document.CreateElement("option")
opt.Text = adoRs.Fields("TABLE_NAME").Value
opt.Value = ""
Form1.cmbTableName.Options.Add opt
Set opt = Nothing
adoRs.MoveNext
Loop
adoRs.Close: Set adoRs = Nothing
adoCn.Close: Set adoCn = Nothing
End Sub
-->
</script>
</head>
<body onLoad="SetTableList">
<form name="Form1">
<select name="cmbTableName" style="width:100pt;font-family:MS ゴシック" />
</form>
</body></html>
<!-- ここまで -->
ちょっと、勘違い (^^;
テーブル名じゃなくて、フィールド名でしたね。
まっ、同じような感じでできると思うので、
挑戦してみて下さい。
またまた、勘違いかな?
フィールド一覧じゃなくて、あるフィールドの値ですかね。
OpenSchema メソッドではなく
Execute メソッドで抽出クエリを実行して下さい。
おっちょこちょいで、申し分けありません。 <(_^_)>
ここまで書いていただいて大変恐縮ですが、具体的にテーブル名とフィールド名をご指示しますので、そのセット方法を教えてください。どうか初心者なものでよろしくお願い致します。
テーブル名:CAT
フィールド名:mode
# 少しは自分で考えましょう。
<!-- ここから -->
<?xml version="1.0" encoding="Shift_JIS"?>
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=x-sjis" />
<script language="VBScript"><!--
Option Explicit
Private Sub SetTableList()
On Error Resume Next
Const adOpenStatic = 3
Dim adoCn 'As ADODB.Connection
Dim adoRs 'As ADODB.Recordset
Dim opt 'As Object
Set adoCn = CreateObject("ADODB.Connection")
adoCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\db1.mdb;"
Set adoRs = CreateObject("ADODB.Recordset")
adoRs.open "select mode from CAT", adoCn, adOpenStatic
Do While adoRs.EOF = False
Set opt = Document.CreateElement("option")
opt.Text = adoRs.Fields(0).Value
opt.Value = ""
Form1.Combo1.Options.Add opt
Set opt = Nothing
adoRs.MoveNext
If err.Number <> 0 Then Exit Do
Loop
adoRs.Close: Set adoRs = Nothing
adoCn.Close: Set adoCn = Nothing
End Sub
-->
</script>
</head>
<body onLoad="SetTableList">
<form name="Form1">
<select name="Combo1" style="width:100pt;font-family:MS ゴシック" />
</form>
</body></html>
<!-- ここまで -->
とろさんありがとうございました。大変感謝しています。しかしまたハマッテしまいました。先ほど指定したテーブルを下記のようにグループ化して実行してみたのですが、コンボボックスには何も表示されません。mdb側にも、グループ化したクエリを作ってそれを参照するようにしてみたりしたのですが、うまくいきませんでした。下記の記述に誤りがあるのでしょうか?それとも、根本的に記述の方法が違うのでしょうか?たびたびすみませんが、教えてください。よろしくお願い致します。
dim strSQL
strSQL="SELECT * FROM CAT GROUP BY mode"
adoRs.open strSQL, adoCn, adOpenStatic
追加及び変更した箇所は上記の3行です。
SQL について勉強しましょう。
group by 句を使用した場合、
group by で指定したフィールド、あるいは
集計関数 max, sum, first を使用したもの以外、
select 句内に指定することはできません。
つまり
select mode from CAT group by mode
とろさん、できました!(次元が低くてすみませんでした。)ありがとうございました。(また、何かありましたらどうかよろしくお願い致します。)
ツイート | ![]() |