人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBScriptについて教えてください。

WEBページのテキストボックスにデータベース上の文字を自動入力させるプログラムを組もうとしています。

一部のテキストボックスはReadOnly属性で直接値を書きかえることが出来ません。
色々試したのですが、Sendkeysで直接書き込む事しか出来ないようです。
そこで質問なのですが、下記のようにSendkeysで打ち込むキーボードにデータベース上の値を代入することは出来るでしょうか?

objWShell.SendKeys("データベースの値")

もしくは、テキストのカーソル位置にデータベースの値を入力させるということは出来るでしょうか?

宜しくお願いします。

●質問者: kgfjfdhgyf
●カテゴリ:ウェブ制作
✍キーワード:VBScript Web カーソル キーボード テキスト
○ 状態 :終了
└ 回答数 : 4/5件

▽最新の回答へ

1 ● llusall
●23ポイント

通常、データベースにあるデータを表示するなどする場合は、

サーバーサイドでのプログラミングを行います。


それには次の様な 言語・方法 があります。

Webプログラミング入門

PerlScript CGI PHP ASP JSP Servlet ASP.NET など。


kgfjfdhgyfさんは、VBやVBScriptに馴染まれている様子ですので、ASPなどは如何でしょうか?

(ただし、ホスティング先の多くは、PHP等の利用が多いと思います)


ASP講座 1章 [ ASPとは ]

ASP とは


========================================

以下参考までに、ASPでの例です。

どうしても「SendKeys」を使用したいというのであれば、

ASPだとこのようになります。

<%

Dim HogeValue

HogeValue = "abc"'データベースからの値をセットしたつもり

%>

objWShell.SendKeys(<%=HogeValue%>)


通常は次のように記述します。

<%

Dim HogeValue

HogeValue = "abc"'データベースからの値をセットしたつもり

%>

<input type="text" value="<%=HogeValue%>" readonly="readonly" >

※赤字の部分が指定した文字になります。

◎質問者からの返答

ご回答ありがとうございます。

今回質問にて「データベース」と書きましたが、サーバー上のデータベース等ではなく、accessにて作成したローカルPC内のデータをweb上のページに自動入力しようとしています。

目的のページ自体は私が管理している訳ではないので、サーバー上にプログラムを組むことが出来ません。

試しに下記のように組んでみたのですが、やはりうまくいきませんでした。

Dim objADOCon

Dim objADORs

Dim strSQL

Dim lngError

Set objADOCon = CreateObject("ADODB.Connection")

On Error Resume Next

objADOCon.Open "Driver={Microsoft Access Driver (*.mdb)};" & _

"DBQ=d:\work\database.mdb;"

lngError = Err.Number

On Error GoTo 0

If lngError > 0 Then

WScript.Echo "接続に失敗しました。"

WScript.Echo Err.Description

Else

strSQL = "select * from ファイル名テーブル"

Set objADORs = objADOCon.Execute(strSQL)


<%

Dim Field1Value

Field1Value = "objADORs.Fields("フィールド1")" 'データベースのフィールド1にあるデータの値をセットしたつもり

%>

<%

Dim Field2Value

Field1Value = "objADORs.Fields("フィールド2")" 'データベースのフィールド2の値をセットしたつもり

%>

<%

Dim Field3Value

Field1Value = "objADORs.Fields("フィールド3")" 'データベースのフィールド3の値をセットしたつもり

%>

'ファイル名入力

objWShell.SendKeys("<%=Field1Value %>")

objWShell.SendKeys("{TAB}")

objWShell.SendKeys("<%=Field2Value %>")

objWShell.SendKeys("{TAB}")

objWShell.SendKeys("<%=Field3Value %>")


2 ● openseed
●23ポイント

Sendkeys を利用しないで、IE の指定のエレメントに値を書き込むことも可能です。

http://www.ken3.org/cgi-bin/group/vba_ie.asp

参考まで。

◎質問者からの返答

ご回答ありがとうございます。

私もこちらのURLを参考にして、指定のエレメントに値に書き込もうとしたのですが、ReadOnly属性で直接値を書きかえることが出来ないようでした。

【参考】下記URLの私の質問と回答にこれまでの流れがあります。

http://q.hatena.ne.jp/1174608179


3 ● mj99
●22ポイント

SendKeysで出来そうな感じです。

例えば、テストとして、

下記のHTMLがあるとします(c:\test.htm)

<title>テストフォーム</title>
<form>
<input type=file>
</form>

そこで、下記コードでfileに値をセットします。

Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "c:\test.htm"

dt = Now()
Do Until objIE.readyState = 4 ' 完了するまで待つ
 If DateAdd("s", 3, dt) < Now() Then ' 3秒すぎたらアウト
 WScript.Quit
 End If
Loop

Set objSh = CreateObject("WScript.Shell")
objSh.AppActivate objIE.document.title ' ここがミソ
objSh.SendKeys("{TAB}")
objSh.SendKeys("{TAB}")
objSh.SendKeys("xxxx.txt")

4 ● llusall
●22ポイント

以下のサンプルで正常に動作確認できました。

<html>

<body>

テスト<input type="text" value="" readonly="readonly" id="idHoge">

</body>

<SCRIPT LANGUAGE="VBScript"> 

Option Explicit

    Dim objADOCon

    Dim objADORs

    Dim strSQL

    Dim lngError

    Set objADOCon = CreateObject("ADODB.Connection")

'   On Error Resume Next

    objADOCon.Open "Driver={Microsoft Access Driver (*.mdb)};" & _

    "DBQ=d:\work\database.mdb;"

    lngError = Err.Number

'   On Error GoTo 0

    If lngError > 0 Then

        MsgBox "接続に失敗しました。"

        MsgBox Err.Description

    Else

        strSQL = "select * from ファイル名テーブル"

        Set objADORs = objADOCon.Execute(strSQL)

        If objADORs.EOF Then

            MsgBox "レコードなし。"

        Else

            document.getElementById("idHoge").Value = objADORs("フィールド名称").Value

        End If

        objADORs.Close

        objADOCon.Close

        Set objADORs = Nothing

        Set objADOCon = Nothing

    End If

</SCRIPT>

</html>

※kgfjfdhgyfさんの環境では、IEのセキュリティの設定で動作していないのだと思われます。

まずは、On Error Resume Next をコメントにしてエラー内容を確認されてはいかがでしょうか?

私の環境では、セキュリティレベルを落とさないと、

エラー:このコンピュータの安全性の設定により、ほかのドメインのデータソースへのアクセスは禁止されています。

となります。


なお、上記サンプルの動作にあたり、次のような設定をしました。

IEのメニューから[ツール]-[インターネットオプション]-[セキュリティ]タブ-[レベルのカスタマイズ]より、

ドメイン間でのデータソースのアクセス

を「ダイアログを表示する」または、「有効にする」

それでも駄目な場合は、以下を追加

スクリプトを実行しても安全だとマークされていないActiveXコントロールの初期化とスクリプト実行

を「ダイアログを表示する」または、「有効にする」

それでも駄目な場合は、以下を追加

セキュリティソフトをオフにしてみてください。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ