

FDConnection1与FDQuery控件的使用
//判断数据库能否正常连接
procedure TMainfr.Button1Click(Sender: TObject);
begin
fcon1.Params.Clear; // 清除之前的参数设置,确保没有重复或冲突的参数
fcon1.Params.DriverID := 'MySQL';
fcon1.Params.Add('Server='+trim(edit1.Text));// fcon1.Params.Add('Server=localhost');
fcon1.Params.Add('Port='+trim(edit2.Text)); //默认端口可省略这行
fcon1.Params.Database := trim(edit3.Text);
fcon1.Params.UserName := trim(edit4.Text);
fcon1.Params.Password := trim(edit5.Text);
fcon1.Params.Add('CharacterSet=gbk');
fcon1.Params.Add('ConnectTimeout=5'); // 设置连接超时时间为10秒
FDPhysMySQLDriverLink1.VendorLib := 'libmysql.dll'; // FDPhysMySQLDriverLink1.VendorLib := '.\..\..\libmysql.dll';
try
fcon1.Open();
Label6.Caption:='连接数据库成功';
except on E: Exception do
Label6.Caption:='连接数据库失败'+e.Message;
end;
//使用FDquery控件查询mysql数据使用配合DataSouce并输出到DBGRid
if fcon1.Connected then fcon1.Close;
end;
if FDQuery1.active<>True then
begin
FDQuery1.Connection := fcon1;
FDQuery1.SQL.Add('select * from ct_txthtml');
DataSource1.DataSet := FDQuery1;
DBGrid1.DataSource := DataSource1;
try
fcon1.Open();//和下面一句是同样的效果
// FDConnection1.Connected := True;
FDQuery1.Active := True;
DBGrid1.Columns[0].Width:=50;
DBGrid1.Columns[1].Width:=50;
DBGrid1.Columns[2].Width:=450;
DBGrid1.Columns[3].Width:=450;
except on E: Exception do
ShowMessage(e.Message);
// ShowMessage 编译报错的话看看有没有声明 【uses Vcl.Dialogs;】
end;
end;
//执行指定的SQL语句
function runsql(con:TFDConnection; sql:string):string;
var
q1: TFDQuery;
begin
Result := '';
q1 := TFDQuery.Create(nil);
q1.Connection := con;
try
try
q1.SQL.Text := sql;
q1.ExecSQL; // 执行 SQL 语句插入数据
Result :='1'
except
on E: Exception do
begin
Result := '清空数据失败:' + E.Message;
end;
end;
finally
q1.Free;
end;
end;
//从数据库获取一些字段的值并输出到Sl列表
function GetDatabase(con: TFDConnection): TStringList;
var
q1: TFDQuery;
str: string;
begin
// 创建 TStringList 对象并将其赋值给 Result
Result := TStringList.Create;
q1 := TFDQuery.Create(nil);
try
q1.Connection := con; // 这里是修正为传入的 con 参数
try
q1.SQL.Text := 'select id, path, title, etime from ct_txthtml';
q1.Open; // 执行 SQL 语句
// 读取数据并添加到 TStringList
while not q1.Eof do
begin
str := q1.FieldByName('id').AsString;
str := str + '@' + q1.FieldByName('path').AsString;
....
Result.Add(str); // 添加到 Result
q1.Next;
end;
except
// 如果发生异常,清理资源并重新抛出异常
Result.Free;
end;
finally
q1.Free;
end;
end;
//使用FDquery循环上传多条数据
function updata(sl1: TStringList; Memo2: TMemo): TStringList;
var
q1: TFDQuery;
begin
q1 := TFDQuery.Create(nil);
try
q1.Connection := fcon1;
for i := 0 to sl1.Count - 1 do
begin
q1.SQL.Text := 'INSERT INTO ct_txthtml (path, title, html, etime, ltime) VALUES (:path, :title, :html, :etime, :ltime)';
q1.ParamByName('path').Value := ....;
......
q1.ParamByName('ltime').Value := Now();
q1.ExecSQL; // 执行 SQL 语句插入数据
end;
finally
q1.Free;
end;
end;