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


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

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

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

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

宜しくお願いします。

回答の条件
  • 1人5回まで
  • 登録:2007/03/27 11:58:39
  • 終了:2007/04/03 12:00:04

回答(5件)

id:llusall No.1

llusall回答回数505ベストアンサー獲得回数612007/03/27 12:48:38

ポイント23pt

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

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


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

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" >

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

id:kgfjfdhgyf

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

今回質問にて「データベース」と書きましたが、サーバー上のデータベース等ではなく、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 %>")

2007/03/27 15:51:36
id:openseed No.2

openseed回答回数51ベストアンサー獲得回数62007/03/27 18:49:25

ポイント23pt

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

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

参考まで。

id:kgfjfdhgyf

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

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

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

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

2007/03/27 18:56:52
id:mj99 No.3

mj99回答回数138ベストアンサー獲得回数382007/03/27 21:27:02

ポイント22pt

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")
id:llusall No.4

llusall回答回数505ベストアンサー獲得回数612007/03/28 09:52:13

ポイント22pt

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

<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コントロールの初期化とスクリプト実行

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

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

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

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 llusall 505 474 61 2007-03-28 10:58:32

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません