DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jeff1314
今日帖子: 0
在线用户: 4
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2018/10/12 22:12:07
标题:
我写了一个mysql类, 帮看看, 是否需要优化? 浏览:916
加入我的收藏
楼主: unit mysql;

interface
uses System.Classes,System.SysUtils,FireDAC.Stan.Intf,
  Data.DB,FireDAC.Comp.DataSet,FireDAC.Comp.Client,FireDAC.Phys.MySQL
  ,FireDAC.Stan.Def, FireDAC.Stan.Error,FireDAC.Stan.Async,FireDAC.VCLUI.Wait,
  FireDAC.Comp.UI,qjson,FireDAC.DApt;

type
Tmysqli = class(TFDQuery)
    Data:TQJson;
    SQLC:TFDConnection;
    SQLD:TFDPhysMySQLDriverLink;
    public
        Dhost:string;
        Dport:string;
        Duser:string;
        Dpass:string;
        VendorLib:string;
        Error:string;
        constructor Create(AOwner: TComponent);override;
        Destructor Destroy; override;
        function isConnection:Boolean;
        function Close:Boolean;
        procedure query(const sqlstr:string);
        procedure reset;
        function fetch:Boolean;
        procedure fetch_all(TData:TQJson);
        procedure fetch_Field;
        function exec(const sqlstr:string):Integer;
        procedure seleDB(const DBname:string);
        procedure Connection_(DBinfo:TQJson);
    end;

implementation
uses uTools;

procedure Tmysqli.fetch_Field;
var
   I:Integer;
begin
   Data.Clear;
   for I := 0 to FieldList.Count-1 do begin
       Data.Add(IntToStr(I)).AsString := FieldList.Strings[I];
   end;
end;

function Tmysqli.Close: Boolean;
begin
    if isConnection then begin
       Connection.Close;
    end;
    Result := not isConnection;
end;

function Tmysqli.isConnection: Boolean;
begin
    Result := (Connection.Connected and Connection.Ping);
end;

procedure Tmysqli.Connection_(DBinfo:TQJson);
begin
  Dhost := DBinfo.ValueByName('api_mhost','');
  Dport := DBinfo.ValueByName('api_mprot','');
  Duser := DBinfo.ValueByName('api_muser','');
  Dpass := DBinfo.ValueByName('api_mpass','');
  with Connection.Params do begin
     Values['Server'] := Dhost;
     Values['Port'] := Dport;
     Values['User_Name'] := Duser;
     Values['Password'] := Dpass;
     Values['Database'] := 'mysql';
  end;

  try
    Connection.Connected := True;  // 连接开始.
  except
    on E:Exception do begin
       Error := E.Message;
    end;
  end;
end;

constructor Tmysqli.Create(AOwner: TComponent);
begin
   inherited;
   SQLD := TFDPhysMySQLDriverLink.Create(nil);
   SQLC := TFDConnection.Create(nil);

   // 独立的dll, 非mysql包.
   SQLD.DriverID := 'MySQL';
   SQLD.VendorLib :=BaseDir+'Data_lib\libmysql.dll';
   VendorLib := SQLD.VendorLib;

   SQLC.DriverName :=  'MySQL';
   SQLC.Params.DriverID :=  'MySQL';
   SQLC.Params.Values['CharacterSet'] := 'utf8mb4';
   Connection := SQLC;
   Data := TQJson.Create;
end;

Destructor Tmysqli.Destroy;
begin
   FreeAndNil(Data);
   FreeAndNil(SQLD);
   FreeAndNil(SQLC);
   inherited;
end;

function Tmysqli.exec(const sqlstr: string): Integer;
begin
   // 这是执行写入等.
   SQL.Clear;
   SQL.Add(sqlstr);
   try
      ExecSQL;
      Result := RowsAffected;
   except
      Result := 0;
   end;
end;

function Tmysqli.fetch:Boolean;
var
   I:Integer;
begin
   Data.Clear;
   for I := 0 to FieldList.Count-1 do begin
       Data.Add(FieldList.Strings[I]).AsVariant := Fields[I].AsVariant;
   end;
   Result := not Eof;
   if Result then begin
      Next;
   end else
      reset;
end;

procedure Tmysqli.fetch_all(TData:TQJson);
var
  I:Integer;
begin
   Tdata.clear;
   I := 0;
   while fetch do begin
      TData.Add(IntToStr(I)).asjson := Data.AsJson;
      Inc(I);
   end;
end;

procedure Tmysqli.query(const sqlstr: string);
begin
   Data.Clear;
   SQL.Clear;
   SQL.Add(sqlstr);
   Active := True;
end;

procedure Tmysqli.reset;
begin
   First;
end;

procedure Tmysqli.seleDB(const DBname:string);
begin
   SQLC.Params.Database := DBname;
end;

end.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2018/10/12 22:13:08
1楼: delphi连接mysql似乎也不复杂, 一个类就解决了啊.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 yxsoft (yxsoft) ★☆☆☆☆ -
盒子活跃会员
2018/10/13 0:06:51
2楼: 有空学习下,先顶
----------------------------------------------
Great!
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行67.87109毫秒 RSS