1

如何访问 HTA 文件中的数据库?或者更好的是,访问任何 COM?我熟悉 AutoIt、AutoHotKey 和 Windows Script Host。有没有办法将这些中的任何一个包含在 HTA 应用程序中?

4

3 回答 3

1

您的操作方式与在 VBScript 中完全相同。下面是使用 Excel 创建电子表格的示例。

要访问数据库,您可以使用 ADODB 对象,要创建数据库,您可以使用 ADOX 对象。您需要知道所需数据库类型的正确连接字符串。

<html>

<!-- COMTest.hta -->

<head>
<hta:application 
  id="oHTA"     
  border="thick"     
  borderstyle="raised"
  caption="yes"   
  maximizebutton="no"   
  minimizebutton="yes"
  showintaskbar="yes"   
  singleinstance="yes"   
  sysmenu="yes"   
  version="0.1"
  windowstate="normal" 
/>

<title>COM Test</title>

<script language="VBScript">

sub say(s)
  output.innerHTML = output.innerHTML & s & "<br>"
end sub

sub ComTest()
  say "testing COM"

  xlFile = "c:\test\ExcelTest.xls"
  ' use .xslx if you have Office 2007 or greater

  set fso = CreateObject("Scripting.FileSystemObject")
  if fso.FileExists(xlFile) then
    say "deleting test file: " & xlFile
  end if

  say "creating Excel Application object and workbook"
  set oEx = CreateObject("Excel.Application")
  set oWb = oEx.Workbooks.Add() ' create a new workbook
  set oWs = oWb.Worksheets(1) ' point to first worksheet

  oWs.cells(1,1) = "Test Worksheet"
  oWs.cells(2,1) = "=now()"
  oWs.UsedRange.Columns.AutoFit

  say "saving test file: " & xlFile
  oEx.DisplayAlerts = false ' if file exists, overwrite it without prompting
  oWb.SaveAs xlFile

  oEx.Quit
  set oEx = nothing

  say "done"
end sub

</script>

<style type="text/css">
body {
  overflow: auto;
  background-color: "blanchedalmond";
}

#output {
  color: lightgreen;
  background-color: black;
  font-family: "Lucida Console";
  font-size: 9pt;
  padding: 3px;
}
</style>
</head>

<body>
<input type="button" value="test" onclick="ComTest">
<br>
<pre id="output"></pre>
</body>

<script language="vbscript">
sub ShowTitle()
  say document.Title
  say "command line=" & oHTA.commandLine
end sub

ShowTitle
</script>

</html>
于 2011-09-23T19:33:29.680 回答
0

要访问数据库,您将需要 ActiveXObject。

var conn    = new ActiveXObject("ADODB.Connection");
var rs      = new ActiveXObject("ADODB.Recordset");
conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=handbook.mdb");
rs.Open("select * from faq", conn, 3, 2);
if (!rs.BOF && !rs.EOF) {
    questionField.value = rs.fields('question').value;;
    answerField.value = rs.fields('answer').value; 
}
于 2011-11-04T16:34:12.280 回答
0

我拿了两个答案并将它们合并如下:

a) 我从 excel 测试更新了 ComTest() 以访问 oracle db
b) ActiveXObject 仅适用于 JScript,因此我按照以下方式将其转换为 VBscript:http: //msdn.microsoft.com/en-us/library/ms756007 (v=vs.85).aspx

sub ComTest()
  say "testing COM"

  dim conn, rs 
  set conn = CreateObject("ADODB.Connection")
  Set   rs = CreateObject("ADODB.Recordset")
  conn.Open("Provider=OraOLEDB.Oracle;Data Source=XXXX;User ID=XXXX;Password=XXXX")
  say "open conn"
  rs.Open "select sysdate from dual", conn
  say  "sqlResult =" & rs.Fields("sysdate").Value

  'Close connection and clean up objects
  conn.Close
  say "close conn"
  Set rs = Nothing
  Set conn = Nothing

  say "done"
end sub
于 2014-09-26T17:57:29.557 回答