勇者无畏咔咔 2024-07-24 16:49 采纳率: 25%
浏览 33
已结题

前端加access数据库

公司是内网,不能安装编程软件和其他软件,access是之前装的,可以通过邮件发送接收外网文件。现在外网笔记本用的vscode,html5。
现在要做一件事,要做一个单机动态网页收集数据写入access,同时也读取其中的数据,放在公共文件夹里(好像是个存储服务器,地址是数字),能否实现,本人对前端和对接,asp,api什么的不是很懂,而且电脑啥都装不了,只能写好网页通过邮件发送。

  • 写回答

29条回答 默认 最新

  • 杨同学* 2024-07-24 19:54
    关注
    获得0.15元问题酬金

    该回答结合ChatGPT4o及杨同学*共同作答, 如有帮助,还请采纳。
    在您的环境中,您希望通过单机动态网页进行数据收集,并将这些数据写入Access数据库,同时也能够从数据库中读取数据。由于内网电脑不能安装任何软件和外网访问受限,需要通过邮件传递文件。因此,我们需要找到一种在限制条件下实现这一目标的方法。以下是一个可能的解决方案。

    解决方案概述

    使用纯HTML和JavaScript与Access交互

    您可以使用HTML5和JavaScript构建一个网页,并通过内置的OLEDB驱动与Access数据库进行交互。由于您无法安装任何服务器软件,我们将使用VBS脚本来辅助进行数据库操作。

    注意:该方案假设您可以在公司内网环境中运行VBS脚本,并且数据库文件位于本地或网络共享文件夹中。

    实现步骤

    1. 准备Access数据库文件:确保Access数据库文件(.mdb.accdb)存放在公司内网的共享文件夹中,并确保用户具有读写权限。

    2. 创建HTML页面:使用HTML5和JavaScript创建一个简单的前端页面用于数据输入和显示。

    3. 使用VBS脚本处理数据库交互:使用Visual Basic Script (VBS) 来处理与Access数据库的交互。JavaScript将通过ActiveX调用VBS脚本。

    4. 网页和脚本的结合:将HTML页面、JavaScript和VBS脚本组合在一起,通过HTML页面控制VBS脚本操作数据库。

    实现步骤的详细说明

    1. Access数据库准备

    假设您的数据库文件是data.accdb,在数据库中有一个表Records,包含以下字段:

    • ID: 自动编号
    • Name: 文本
    • Email: 文本
    • Message: 文本

    2. 创建HTML页面

    创建一个基本的HTML表单用于输入数据。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Access Database Interaction</title>
        <script type="text/javascript">
            function insertData() {
                var name = document.getElementById('name').value;
                var email = document.getElementById('email').value;
                var message = document.getElementById('message').value;
    
                var vbsCode = `
                    Dim conn
                    Set conn = CreateObject("ADODB.Connection")
                    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\\\your-server\\path\\data.accdb"
                    Dim sql
                    sql = "INSERT INTO Records (Name, Email, Message) VALUES ('${name}', '${email}', '${message}')"
                    conn.Execute sql
                    conn.Close
                    Set conn = Nothing
                `;
    
                try {
                    var shell = new ActiveXObject("WScript.Shell");
                    shell.run("cmd.exe /c echo " + vbsCode + " > temp.vbs && cscript temp.vbs && del temp.vbs");
                    alert("Data inserted successfully");
                } catch (e) {
                    alert("ActiveXObject not supported or an error occurred.");
                }
            }
    
            function fetchData() {
                var vbsCode = `
                    Dim conn, rs
                    Set conn = CreateObject("ADODB.Connection")
                    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\\\your-server\\path\\data.accdb"
                    Set rs = conn.Execute("SELECT * FROM Records")
                    Dim output
                    output = ""
                    Do While Not rs.EOF
                        output = output & "ID: " & rs("ID") & ", Name: " & rs("Name") & ", Email: " & rs("Email") & ", Message: " & rs("Message") & vbCrLf
                        rs.MoveNext
                    Loop
                    rs.Close
                    conn.Close
                    Set rs = Nothing
                    Set conn = Nothing
                    WScript.StdOut.Write output
                `;
    
                try {
                    var shell = new ActiveXObject("WScript.Shell");
                    shell.run("cmd.exe /c echo " + vbsCode + " > temp.vbs && cscript //nologo temp.vbs > result.txt && del temp.vbs", 0, true);
                    setTimeout(() => {
                        fetch('result.txt')
                            .then(response => response.text())
                            .then(data => {
                                document.getElementById('result').innerText = data;
                            });
                    }, 1000); // delay to ensure file is written
                } catch (e) {
                    alert("ActiveXObject not supported or an error occurred.");
                }
            }
        </script>
    </head>
    <body>
        <h1>Access Database Interaction</h1>
        <div>
            <h2>Insert Data</h2>
            <form onsubmit="event.preventDefault(); insertData();">
                <label for="name">Name:</label>
                <input type="text" id="name" name="name" required><br><br>
                <label for="email">Email:</label>
                <input type="email" id="email" name="email" required><br><br>
                <label for="message">Message:</label>
                <textarea id="message" name="message" required></textarea><br><br>
                <input type="submit" value="Submit">
            </form>
        </div>
    
        <div>
            <h2>Fetch Data</h2>
            <button onclick="fetchData()">Fetch Data</button>
            <pre id="result"></pre>
        </div>
    </body>
    </html>
    

    关键步骤解释

    • ActiveXObject:在IE中使用ActiveX对象允许在客户端执行脚本。这在现代浏览器中通常不可行,但在某些企业内部环境下,IE及ActiveX仍然可用。
    • VBS脚本:用于在客户端执行对Access数据库的操作。
    • cmd.exe命令:通过shell命令执行VBS脚本,并将结果存入文本文件,随后通过JavaScript读取。

    注意事项

    • 浏览器限制:此方案在现代浏览器(如Chrome、Firefox等)中不会运行,因为ActiveX仅在IE中支持。
    • 安全问题:直接在客户端执行VBS脚本存在安全风险。建议在受信任的内网环境中进行,确保代码安全。
    • 路径配置:在VBS脚本中调整Access数据库的路径以适配网络共享。
    • 权限要求:确保用户在网络共享路径上拥有读写权限。

    结论

    在限制条件下,通过HTML和VBS结合,可以实现与Access数据库的简单交互。但需注意,这种方法在安全性和跨浏览器兼容性上存在限制,仅适用于特定企业内部环境。如果有其他资源可用(如安装IIS服务,或通过其他脚本语言如Python、PHP等),则建议考虑更现代化和安全的解决方案。

    评论

报告相同问题?

问题事件

  • 系统已结题 8月1日
  • 创建了问题 7月24日