You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Delphi构建对接MS Access数据库的本地注册登录网站

用Delphi实现带注册/登录功能的本地网站(对接MS Access)

核心逻辑说明

HTML属于静态前端技术,本身无法直接操作数据库,必须依赖后端逻辑完成数据交互。Delphi可以通过两种轻量方案实现本地Web服务+Access数据对接:一是基于VCL+Indy搭建简易Web服务器,二是用WebBroker框架构建规范的Web应用,两种方案都能满足你的需求。


步骤1:准备MS Access数据库

创建UserDB.accdb(旧版用.mdb),建立Users表,字段建议包含:

  • ID:自动编号(主键)
  • Username:文本(唯一约束,用户名)
  • Password:文本(存储哈希值,禁止明文)
  • Email:文本(可选)

步骤2:Delphi端连接Access数据库

使用Delphi自带的ADO组件完成连接:

  1. 在Form或DataModule中添加TADOConnection组件
  2. 配置连接字符串:
    ADOConnection1.ConnectionString := 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' + ExtractFilePath(ParamStr(0)) + 'UserDB.accdb;Persist Security Info=False;';
    
    (若为.mdb文件,驱动替换为Microsoft.Jet.OLEDB.4.0)
  3. 设置LoginPrompt := False,调用ADOConnection1.Connected := True完成连接

步骤3:实现注册功能

编写注册逻辑,先校验用户名是否重复,再插入新用户(密码哈希存储):

function RegisterUser(const Username, Password, Email: string): Boolean;
var
  ADOQuery: TADOQuery;
  HashPwd: string;
begin
  Result := False;
  if not ADOConnection1.Connected then Exit;

  // 校验用户名是否已存在
  ADOQuery := TADOQuery.Create(nil);
  try
    ADOQuery.Connection := ADOConnection1;
    ADOQuery.SQL.Text := 'SELECT COUNT(*) FROM Users WHERE Username = :Username';
    ADOQuery.Parameters.ParamByName('Username').Value := Username;
    ADOQuery.Open;
    if ADOQuery.Fields[0].AsInteger > 0 then Exit;

    // 密码SHA256哈希
    HashPwd := THashSHA2.GetHashString(Password);

    // 插入新用户
    ADOQuery.Close;
    ADOQuery.SQL.Text := 'INSERT INTO Users (Username, Password, Email) VALUES (:Username, :Password, :Email)';
    ADOQuery.Parameters.ParamByName('Username').Value := Username;
    ADOQuery.Parameters.ParamByName('Password').Value := HashPwd;
    ADOQuery.Parameters.ParamByName('Email').Value := Email;
    ADOQuery.ExecSQL;
    Result := True;
  finally
    ADOQuery.Free;
  end;
end;

步骤4:实现登录验证功能

校验用户名与哈希密码是否匹配:

function ValidateLogin(const Username, Password: string): Boolean;
var
  ADOQuery: TADOQuery;
  HashPwd: string;
begin
  Result := False;
  if not ADOConnection1.Connected then Exit;

  HashPwd := THashSHA2.GetHashString(Password);
  ADOQuery := TADOQuery.Create(nil);
  try
    ADOQuery.Connection := ADOConnection1;
    ADOQuery.SQL.Text := 'SELECT Password FROM Users WHERE Username = :Username';
    ADOQuery.Parameters.ParamByName('Username').Value := Username;
    ADOQuery.Open;
    if not ADOQuery.Eof then
      Result := (ADOQuery.FieldByName('Password').AsString = HashPwd);
  finally
    ADOQuery.Free;
  end;
end;

步骤5:搭建本地Web服务

方案A:Indy简易Web服务器

  1. 添加TIdHTTPServer组件到Form,设置DefaultPort := 8080,Active := True
  2. 处理OnCommandGet事件,解析前端请求并返回JSON结果:
    procedure TMainForm.IdHTTPServer1CommandGet(AContext: TIdContext;
      ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
    var
      Action, Username, Password, Email: string;
      RespJson: string;
    begin
      Action := ARequestInfo.Params.Values['action'];
      Username := ARequestInfo.Params.Values['username'];
      Password := ARequestInfo.Params.Values['password'];
      Email := ARequestInfo.Params.Values['email'];
    
      if Action = 'register' then
      begin
        if RegisterUser(Username, Password, Email) then
          RespJson := '{"status":"success","msg":"注册成功"}'
        else
          RespJson := '{"status":"error","msg":"用户名已存在或注册失败"}';
      end
      else if Action = 'login' then
      begin
        if ValidateLogin(Username, Password) then
          RespJson := '{"status":"success","msg":"登录成功"}'
        else
          RespJson := '{"status":"error","msg":"用户名或密码错误"}';
      end
      else
        RespJson := '{"status":"error","msg":"无效请求"}';
    
      AResponseInfo.ContentType := 'application/json';
      AResponseInfo.ContentText := RespJson;
    end;
    
  3. 前端HTML通过AJAX请求http://localhost:8080,携带action、username等参数,解析返回的JSON完成页面交互。

方案B:WebBroker规范Web应用

  1. 新建Web Application项目,选择Standalone模式(本地运行)
  2. 在Web模块添加ADO组件并配置数据库连接
  3. 创建RegisterAction和LoginAction,在OnActionExecute事件中调用注册/验证函数,返回JSON响应,适合更复杂的Web场景。

关键注意事项

  • 禁止明文存储密码,必须用哈希算法(Delphi自带System.Hash单元提供SHA256等实现)
  • Access数据库文件需放在程序可访问路径(如同目录)
  • Windows系统需确保安装了对应版本的Access驱动(Microsoft Access Database Engine)
  • 本地Web服务启动后,前端页面可直接本地打开,或用Delphi的TWebBrowser组件内嵌加载。

内容的提问来源于stack exchange,提问作者CatRanger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 21:20:08