【问题标题】:Create table dynamically using Javascript to display a database SELECT query output使用 Javascript 动态创建表以显示数据库 SELECT 查询输出
【发布时间】:2016-01-02 19:29:29
【问题描述】:

我有以下代码:

<!doctype html>
<html>
<title>Search</title>
<script type="text/javascript">

function query() {
    var adVarWChar = 202;
    var adParamInput = 1;
    var pad = "C:\\Users\\azi!z\\Desktop\\Project\\Test.accdb";
    var cn = new ActiveXObject("ADODB.Connection");
    var strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pad;
    cn.Open(strConn);
    var cm = new ActiveXObject("ADODB.Command");
    cm.ActiveConnection = cn;
    cm.CommandText = "SELECT * FROM ImportFromExcel where TestCase LIKE ?";
    cm.Parameters.Append(cm.CreateParameter(
            "?", 
            adVarWChar, 
            adParamInput, 
            255, 
            "%" + document.getElementById("searchTerm").value + "%"));
    var rs = cm.Execute();  // returns ADODB.Recordset object
    if (rs.EOF) {
        document.write("<p>No data found.</p>");
    } else {
        while (!rs.EOF) {
        document.write("<p>" + rs.fields(0).value + ", ");
        document.write(rs.fields(1).value + ", ");
        document.write(rs.fields(2).value + ", ");
        document.write(rs.fields(3).value + ", ");
        document.write(rs.fields(4).value + ", ");
        document.write(rs.fields(5).value + ", ");
        document.write(rs.fields(6).value + ", ");
        document.write(rs.fields(7).value + ", ");
        document.write(rs.fields(8).value + ", ");
        document.write(rs.fields(9).value + ", ");
        document.write(rs.fields(10).value + ", ");
        document.write(rs.fields(11).value + ", ");
        document.write(rs.fields(12).value + ", ");
        document.write(rs.fields(13).value + ", ");
        document.write(rs.fields(14).value + ", ");
        document.write(rs.fields(15).value + ".</p>");
        var row = row.parentNode.rows[ ++idx ];
            document.write(rs.fields(1).value + ".</p>");
            rs.MoveNext();
        }
    }
    rs.Close();
    cn.Close();
}
</script>
</head>

<body>
<form method="get" name="SearchEngine" target="_blank">
<p style="text-align: center;"><span style="font-family:times new roman,times,serif;"><span style="font-size: 36px;"><strong>EA Search Engine</strong></span></span></p>
<p style="text-align: center;">&nbsp;</p>
<p style="text-align: center;"><input maxlength="300" id="searchTerm" name="KeywordSearch" size="100" type="text" value="Enter Your Keyword Here" /></p>
<p style="text-align: center;">&nbsp;</p>
<p style="text-align: center;"><input name="Search" type="button" value="Search" onclick="query();" /></p>
</form>
</body>
</html>

请帮助我修改代码,以便在单击“搜索”按钮时,必须创建一个包含 16 列和适当列标题的新表,并且应将搜索结果正确插入到表行中。

【问题讨论】:

  • 有具体问题吗?我在这里看到的只是您列出项目要求。如果您对此代码有特定问题(例如,它是否以某种特定方式出错并且您需要了解原因?)那么您应该针对该特定事物提出具体问题,并尽可能多地向我们提供尽可能详细地说明您的困惑、您期望发生的事情、正在发生的事情等。
  • 是的。我有一些具体的问题。对于问题#3,我不确定如何修改 document.getElementById("searchTerm").value 以考虑整个字符串(包括空格)。对于问题 #2,我尝试将 SELECT 查询更改为“SELECT * FROM ImportFromExcel WHERE col1 LIKE ? OR col2 LIKE ? OR col3 LIKE ?; ...”,但它不起作用。
  • 对于问题#1,尝试使用以下函数创建表和插入数据,但失败了。函数 addTable() { var table = document.createElement('TABLE'); table.border='1'; var tableBody = document.createElement('TBODY'); table.appendChild(tableBody); for (var i=0; i" + rs.fields(1).value + ", "); tr.appendChild(td); } } myTableDiv.appendChild(table); }
  • 这些绝对是独立的问题。他们甚至不是彼此相同的语言。您应该针对您遇到的每个特定问题提出单独的问题,并尝试将它们减少到仍然说明您遇到的问题的简单/少量代码。另一方面...看起来您实际上是在从客户端传递字符串以在服务器端作为数据库内容运行。如果这不是一个不公开的内部应用程序,那么它将完全结束并完成黑客攻击,其他人完全接管您的服务器。

标签: javascript html search sql-insert


【解决方案1】:

这是完成的一种方法,使用 HTML 表构建一个字符串...
另外,我循环fields 集合以获取列名和值。

function query() {
    var adVarWChar = 202;
    var adParamInput = 1;
    var pad = "C:\\Users\\azi!z\\Desktop\\Project\\Test.accdb";
    var cn = new ActiveXObject("ADODB.Connection");
    var strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pad;
    cn.Open(strConn);
    var cm = new ActiveXObject("ADODB.Command");
    cm.ActiveConnection = cn;
    cm.CommandText = "SELECT * FROM ImportFromExcel where TestCase LIKE ?";
    cm.Parameters.Append(cm.CreateParameter(
            "?",
            adVarWChar,
            adParamInput,
            255,
            "%" + document.getElementById("searchTerm").value + "%"));
    var rs = cm.Execute();  // returns ADODB.Recordset object

    var table = '';
    var tableRow = '';
    var headings = true;

    if (rs.EOF) {
        document.write("<p>No data found.</p>");
    } else {
        while (!rs.EOF) {
          if (headings) {
            tableRow = '';
            for (var i = 0; i < rs.fields.count; i++) {
              switch (i + 1) {
                case 1:
                case 3:
                case 4:
                case 6:
                case 8:
                case 9:
                  tableRow = tableRow + '<td>' + rs.fields(i).name + '</td>';
                  break;
              }
            }
            tableRow = '<tr>' + tableRow + '</tr>';
            table = table + tableRow;
            headings = false;
          }
          tableRow = '';
          for (var i = 0; i < rs.fields.count; i++) {
              switch (i + 1) {
                case 1:
                case 3:
                case 4:
                case 6:
                case 8:
                case 9:
                  tableRow = tableRow + '<td>' + rs.fields(i).value + '</td>';
                  break;
              }
          }
          tableRow = '<tr>' + tableRow + '</tr>';
          table = table + tableRow;
          rs.MoveNext();
        }
        document.write('<table>' + table + '</table>');
    }
    rs.Close();
    cn.Close();
}

【讨论】:

  • 这行得通。非常感谢你 :) 如果我只想显示一组列而不是所有列怎么办? eg:我只想看1、3、4、6、8、9列数据。
  • 您可以使用switch 声明,请参阅编辑。我加了 1,所以列号不会混淆。 (i = 0 = column 1)
猜你喜欢
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多