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 | 正在执行命令中止. |