1、加入三个组件:

TFdconnection 、 TFdQuery 、 TFdphysMysqlDriverLink

双击 con1 配置好数据库连接

2、创建软件的时候指定DLL路径

fdphysmysqldrvrlnk1.VendorLib := ExtractFilePath(application.ExeName) + 'jj\libmySQL.dll';

3、连接数据库、断开数据库

//连接数据库
  form1.con1.Connected := True;
 //断开数据库
  form1.con1.Connected := False;

4、执行SQL语句

try
      sql := 'insert into niu_ip (ip) values (''' + ttIP[i] + '''); ';
      Form1.fdqry1.SQL.Clear; //一定先清理再添加,否则执行报错后就不清理了
      Form1.fdqry1.SQL.Add(sql);
      Form1.fdqry1.ExecSQL;
      j := j + 1;
    except
      on e: Exception do
        ierror := ierror + 1;
       // Form1.mmLog.Lines.Add('【' + sql + '】' + e.Message);
    end;

所用到的DLL文件 X64和X86都有:

下载:https://www.lanzoux.com/iqnF0diwo9g 密码:6qqb

报错信息:

[FireDAC][Phys][MySQL]-326. Cannot perform the action, because the previous action is in progress

原因是SQL还在执行当中,我们就给他设置SQL语句了,解决办法,在临界区中并且在query组件的状态不是csExecuting正在执行的时候

try
        FRWSync.BeginWrite; //执行临界写数据代码
          //如果是忙碌状态就休息半秒
        while Form1.fdqry1.Command.State = csExecuting do
        begin
          jjSleep(100);
        end;
        Form1.fdqry1.SQL.Text := sql;
        Form1.fdqry1.ExecSQL;
      finally
        FRWSync.EndWrite;
      end;

以下是一些参数注释:

General

程序员可以使用ResourceOptions.CmdExecMode属性在四种操作模式之间进行选择:

Mode Description
amBlocking 阻塞调用线程和GUI,直到操作完成为止
amNonBlocking 调用线程被阻塞,直到操作完成为止。 GUI没有被阻止。
amCancelDialog 调用线程和GUI被阻塞,直到操作完成。 FireDAC显示一个对话框,允许取消操作
amAsync 调用线程和GUI没有被阻止。 被调用的方法立即返回

应用程序检查TFDCommand.State或TFDAdaptedDataSet.Command.State是否为操作状态:

Status Description
csInactive 未准备命令。
csPrepared 已准备命令。 结果集不可访问。
csExecuting 命令执行正在进行中。
csOpen 命令执行完成。 结果集是可访问的,尚未完全获取.
csFetching 结果集提取正在进行中.
csAborting 正在执行命令中止.
Logo

一站式 AI 云服务平台

更多推荐