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;
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;