unit MachineMst; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, wItem, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Phys.PGDef, FireDAC.VCLUI.Wait, FireDAC.Comp.UI, FireDAC.Phys.PG, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client; type TMachineMst = class(TwItem) private { Private declarations } FMachCode: string; FMachDate: string; FCustName: string; FDescriptions: string; FProcType: string; FNickName: string; FManager: string; FDriver: string; FLocationPath: string; FqRepList: TList; protected { Protected declarations } public { Public declarations } constructor Create(AOwner: TObject);// override; destructor Destroy; override; class function xAddSqlMark(velStr: string): string; class function xGetStrSqlMachineMstList(AQuery: TFDQuery; kindStr, codeStr, nameStr: string): TList; class function LoadFromQuery(AQuery: TFDQuery): TList; class function xGetObjsMachineToRepairList(AQuery: TFDQuery; kindStr, codeStr, nameStr: string): TList; class function xGetObjsMachineToRepairList2(AQuery: TFDQuery; kindStr, codeStr, nameStr: string): TList; class function LoadFromQueryMachRepairList(AQuery: TFDQuery): TList; property qRepList: TList read FqRepList write FqRepList; published { Published declarations } property MachCode: string read FMachCode write FMachCode; property MachDate: string read FMachDate write FMachDate; property CustName: string read FCustName write FCustName; property Descriptions: string read FDescriptions write FDescriptions; property ProcType: string read FProcType write FProcType; property NickName: string read FNickName write FNickName; property Manager: string read FManager write FManager; property Driver: string read FDriver write FDriver; property LocationPath: string read FLocationPath write FLocationPath; end; implementation uses MachineRepair; { TMachineMst } constructor TMachineMst.Create(AOwner: TObject); begin FqRepList := TList.Create; end; destructor TMachineMst.Destroy; var i: Integer; tmpObj: TObject; begin if FqRepList <> nil then begin i := 0; while i < FqRepList.Count do begin tmpObj := FqRepList.Items[i]; if tmpObj <> nil then tmpObj.Free; tmpObj := nil; FqRepList.Delete(i); end; FqRepList.Free; FqRepList:=nil; end; inherited; end; class function TMachineMst.LoadFromQuery(AQuery: TFDQuery): TList; var curMach: TMachineMst; begin Result := TList.Create; while not AQuery.Eof do begin curMach := TMachineMst.Create(nil); curMach.OBID := AQuery.FieldByName('OBID').AsString; curMach.Name := AQuery.FieldByName('Name').AsString; curMach.wClassName := AQuery.FieldByName('wClassName').AsString; curMach.CreateDate := AQuery.FieldByName('CreateDate').AsString; curMach.CreateTime := FormatDateTime('hh:nn:ss', AQuery.FieldByName('CreateTime').AsDateTime); curMach.CreatorID := AQuery.FieldByName('CreatorID').AsString; curMach.IsValid := AQuery.FieldByName('IsValid').AsString; curMach.LcStatus := AQuery.FieldByName('LcStatus').AsString; curMach.MachCode := AQuery.FieldByName('MachCode').AsString; curMach.MachDate := AQuery.FieldByName('MachDate').AsString; curMach.CustName := AQuery.FieldByName('CustName').AsString; curMach.Descriptions := AQuery.FieldByName('Descriptions').AsString; curMach.ProcType := AQuery.FieldByName('ProcType').AsString; curMach.NickName := AQuery.FieldByName('NickName').AsString; curMach.Manager := AQuery.FieldByName('Manager').AsString; curMach.Driver := AQuery.FieldByName('Driver').AsString; curMach.LocationPath := AQuery.FieldByName('LocationPath').AsString; Result.Add(curMach); AQuery.Next; end; end; class function TMachineMst.LoadFromQueryMachRepairList(AQuery: TFDQuery): TList; var i, idx, nidx, nnidx: Integer; valName, fieName, obidVal: string; curMach, tmpMach: TMachineMst; curRepair: TMachineRepair; begin Result := TList.Create; AQuery.First; //Áߺ¹ Ä÷³ ½ÃÀÛÁöÁ¡ ã±â.. nidx := -1; for i := 0 to AQuery.FieldCount-1 do begin fieName := AQuery.Fields[i].FieldName; if Pos('_1',fieName) > 0 then begin nidx := i; Break; end; end; AQuery.First; while not AQuery.Eof do begin obidVal := AQuery.FieldByName('OBID').AsString; //Áߺ¹ °´Ã¼ ã±â.. idx := -1; for i := 0 to Result.Count - 1 do begin curMach := TMachineMst(Result[i]); if SameText(obidVal, curMach.OBID) then begin idx := i; Break; end; end; if idx = -1 then begin curMach := TMachineMst.Create(nil); for i := 0 to nidx-1 do begin fieName := AQuery.Fields[i].FieldName; valName := AQuery.Fields[i].AsString; if SameText(fieName, 'OBID') then curMach.OBID := valName else if SameText(fieName, 'Name') then curMach.Name := valName else if SameText(fieName, 'wClassName') then curMach.wClassName := valName else if SameText(fieName, 'CreateDate') then curMach.CreateDate := valName else if SameText(fieName, 'CreateTime') then curMach.CreateTime := valName else if SameText(fieName, 'CreatorID') then curMach.CreatorID := valName else if SameText(fieName, 'IsValid') then curMach.IsValid := valName else if SameText(fieName, 'LcStatus') then curMach.LcStatus := valName else if SameText(fieName, 'MachCode') then curMach.MachCode := valName else if SameText(fieName, 'MachDate') then curMach.MachDate := valName else if SameText(fieName, 'CustName') then curMach.CustName := valName else if SameText(fieName, 'Descriptions') then curMach.Descriptions := valName else if SameText(fieName, 'ProcType') then curMach.ProcType := valName else if SameText(fieName, 'NickName') then curMach.NickName := valName else if SameText(fieName, 'Manager') then curMach.Manager := valName else if SameText(fieName, 'Driver') then curMach.Driver := valName else if SameText(fieName, 'LocationPath') then curMach.LocationPath := valName; end; Result.Add(curMach); end else begin curMach := TMachineMst(Result.Items[idx]); end; curRepair := TMachineRepair.Create(nil); for i := nidx to AQuery.FieldCount-1 do begin fieName := StringReplace(AQuery.Fields[i].FieldName, '_1', '', [rfReplaceAll]); valName := AQuery.Fields[i].AsString; if SameText(fieName, 'OBID') then curRepair.OBID := valName else if SameText(fieName, 'Name') then curRepair.Name := valName else if SameText(fieName, 'wClassName') then curRepair.wClassName := valName else if SameText(fieName, 'CreateDate') then curRepair.CreateDate := valName else if SameText(fieName, 'CreateTime') then curRepair.CreateTime := valName else if SameText(fieName, 'CreatorID') then curRepair.CreatorID := valName else if SameText(fieName, 'IsValid') then curRepair.IsValid := valName else if SameText(fieName, 'LcStatus') then curRepair.LcStatus := valName else if SameText(fieName, 'OrdDate') then curRepair.OrdDate := valName else if SameText(fieName, 'RepairDetail') then curRepair.RepairDetail := valName else if SameText(fieName, 'Descriptions') then curRepair.Descriptions := valName; end; curMach.qRepList.Add(curRepair); AQuery.Next; end; end; class function TMachineMst.xAddSqlMark(velStr: string): string; begin Result := ''; Result := '''' + velStr + ''''; end; class function TMachineMst.xGetObjsMachineToRepairList(AQuery: TFDQuery; kindStr, codeStr, nameStr: string): TList; var sql: string; begin Result := nil; sql := 'SELECT obj0.*, obj2.* FROM "MachineMst"obj0, "MachMstMachRepairR"obj1, "MachineRepair"obj2'; sql := sql + ' WHERE obj0."IsValid"=' + xAddSqlMark('t'); if Length(Trim(kindStr)) > 0 then sql := sql + ' AND "ProcType"=' + xAddSqlMark(kindStr); if Length(Trim(codeStr)) > 0 then sql := sql + ' AND "MachCode"=' + xAddSqlMark(codeStr); if Length(Trim(nameStr)) > 0 then sql := sql + ' AND "Name"=' + xAddSqlMark(nameStr); sql := sql + ' AND obj1."IsValid"=' + xAddSqlMark('t'); sql := sql + ' AND obj1."LOBID"=obj0."OBID"'; sql := sql + ' AND obj2."IsValid"=' + xAddSqlMark('t'); sql := sql + ' AND obj2."OBID"=obj1."ROBID"'; try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetObjsMachineToRepairList Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; Result := LoadFromQueryMachRepairList(AQuery); end; class function TMachineMst.xGetObjsMachineToRepairList2(AQuery: TFDQuery; kindStr, codeStr, nameStr: string): TList; var sql: string; begin Result := nil; sql := 'SELECT obj0.*, obj2.* FROM "MachineMst" obj0 LEFT JOIN "MachMstMachRepairR" obj1 ON obj1."LOBID" = obj0."OBID"'; sql := sql + ' AND obj1."IsValid" = ' + xAddSqlMark('t'); sql := sql + ' LEFT JOIN "MachineRepair" obj2 ON obj2."OBID" = obj1."ROBID"'; sql := sql + ' AND obj2."IsValid" = ' + xAddSqlMark('t'); sql := sql + ' WHERE obj0."IsValid" = ' + xAddSqlMark('t'); if Length(Trim(kindStr)) > 0 then sql := sql + ' AND obj0."ProcType"=' + xAddSqlMark(kindStr); if Length(Trim(codeStr)) > 0 then sql := sql + ' AND obj0."MachCode"=' + xAddSqlMark(codeStr); if Length(Trim(nameStr)) > 0 then sql := sql + ' AND obj0."Name"=' + xAddSqlMark(nameStr); sql := sql + ' ORDER BY obj0."MachCode", obj2."OBID" NULLS LAST'; try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetObjsMachineToRepairList2 Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; Result := LoadFromQueryMachRepairList(AQuery); end; class function TMachineMst.xGetStrSqlMachineMstList(AQuery: TFDQuery; kindStr, codeStr, nameStr: string): TList; var sql: string; begin Result := nil; sql := 'SELECT * FROM "MachineMst"'; sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t'); if Length(Trim(kindStr)) > 0 then sql := sql + ' AND "ProcType"=' + xAddSqlMark(kindStr); if Length(Trim(codeStr)) > 0 then sql := sql + ' AND "MachCode"=' + xAddSqlMark(codeStr); if Length(Trim(nameStr)) > 0 then sql := sql + ' AND "Name"=' + xAddSqlMark(nameStr); try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetMachineMstAssign Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; Result := LoadFromQuery(AQuery); end; end.