unit MaterialMst; 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 TMaterialMst = class(TwItem) private { Private declarations } FMatCode: string; FDescriptions: string; FMatType: string; FCustName: string; FUnitt: string; FUnitAmo: string; protected { Protected declarations } public { Public declarations } class function xAddSqlMark(velStr: string): string; class function xGetStrSqlMaterialMstList(AQuery: TFDQuery; codeStr, nameStr: string): TList; class function LoadFromQuery(AQuery: TFDQuery): TList; class function xGetStrMatKindSameMatCode(AQuery: TFDQuery; matCode: string): string; class function LoadFromStringQuery(AQuery: TFDQuery; column: string): string; class function xGetObjLikeMeMatCode(AQuery: TFDQuery; matCode: string): TMaterialMst; class function xGetStrsDistinctMainMaterialName(AQuery: TFDQuery): TStrings; class function xAddSqlDoubleMark(velStr: String): String; class function LoadFromStringsQuery(AQuery: TFDQuery; column: string): TStrings; published { Published declarations } property MatCode: string read FMatCode write FMatCode; property Descriptions: string read FDescriptions write FDescriptions; property MatType: string read FMatType write FMatType; property CustName: string read FCustName write FCustName; property Unitt: string read FUnitt write FUnitt; property UnitAmo: string read FUnitAmo write FUnitAmo; end; implementation { TMaterialMst } class function TMaterialMst.LoadFromQuery(AQuery: TFDQuery): TList; var curMat: TMaterialMst; begin Result := TList.Create; while not AQuery.Eof do begin curMat := TMaterialMst.Create(nil); curMat.OBID := AQuery.FieldByName('OBID').AsString; curMat.Name := AQuery.FieldByName('Name').AsString; curMat.wClassName := AQuery.FieldByName('wClassName').AsString; curMat.CreateDate := AQuery.FieldByName('CreateDate').AsString; curMat.CreateTime := FormatDateTime('hh:nn:ss', AQuery.FieldByName('CreateTime').AsDateTime); curMat.CreatorID := AQuery.FieldByName('CreatorID').AsString; curMat.IsValid := AQuery.FieldByName('IsValid').AsString; curMat.LcStatus := AQuery.FieldByName('LcStatus').AsString; curMat.MatCode := AQuery.FieldByName('MatCode').AsString; curMat.Descriptions := AQuery.FieldByName('Descriptions').AsString; curMat.MatType := AQuery.FieldByName('MatType').AsString; curMat.CustName := AQuery.FieldByName('CustName').AsString; curMat.Unitt := AQuery.FieldByName('Unitt').AsString; curMat.UnitAmo := AQuery.FieldByName('UnitAmo').AsString; Result.Add(curMat); AQuery.Next; end; end; class function TMaterialMst.LoadFromStringQuery(AQuery: TFDQuery; column: string): string; var valStr: string; begin Result := ''; while not AQuery.Eof do begin valStr := AQuery.FieldByName(column).AsString; Result := valStr; AQuery.Next; end; end; class function TMaterialMst.LoadFromStringsQuery(AQuery: TFDQuery; column: string): TStrings; var valStr: string; begin Result := TStringList.Create; while not AQuery.Eof do begin valStr := AQuery.FieldByName(column).AsString; Result.Add(valStr); AQuery.Next; end; end; class function TMaterialMst.xAddSqlDoubleMark(velStr: String): String; begin Result := ''; Result := '"' + velStr + '"'; end; class function TMaterialMst.xAddSqlMark(velStr: string): string; begin Result := ''; Result := '''' + velStr + ''''; end; class function TMaterialMst.xGetObjLikeMeMatCode(AQuery: TFDQuery; matCode: string): TMaterialMst; var i: Integer; sql: string; tmpList: TList; tmpMat: TMaterialMst; begin Result := nil; sql := 'SELECT * FROM "MaterialMst"'; sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t'); sql := sql + ' AND "MatCode" = ' + xAddSqlMark(matCode); try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetObjLikeMeMatCode Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; tmpList := LoadFromQuery(AQuery); if tmpList.Count > 0 then begin Result := TMaterialMst(tmpList.Items[0]); tmpList.Delete(0); end; i:=0; while tmpList.Count > i do begin tmpMat := TMaterialMst(tmpList.Items[i]); tmpMat.Free; tmpList.Delete(i); end; tmpList.Free; end; class function TMaterialMst.xGetStrMatKindSameMatCode(AQuery: TFDQuery; matCode: string): string; var sql, column: string; begin Result := ''; sql := 'SELECT "Name" FROM "MaterialMst"'; sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t'); if Length(Trim(matCode)) > 0 then begin sql := sql + ' AND "MatCode"=' + xAddSqlMark(matCode); end; sql := sql + ' LIMIT 1'; try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetStrMatKindSameMatCode Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; column := 'Name'; Result := LoadFromStringQuery(AQuery, column); end; class function TMaterialMst.xGetStrsDistinctMainMaterialName( AQuery: TFDQuery): TStrings; var sql, colName: string; begin Result := nil; sql := 'SELECT DISTINCT "Name" FROM "MaterialMst"'; sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t'); sql := sql + ' AND ' + xAddSqlDoubleMark('LcStatus') + '=' + xAddSqlMark('MAIN'); sql := sql + ' ORDER BY "Name"'; try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetStrsDistinctMainMaterialName Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; colName := 'Name'; Result := LoadFromStringsQuery(AQuery, colName); end; class function TMaterialMst.xGetStrSqlMaterialMstList(AQuery: TFDQuery; codeStr, nameStr: string): TList; var sql: string; begin Result := nil; sql := 'SELECT * FROM "MaterialMst"'; sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t'); if Length(Trim(codeStr)) > 0 then begin codeStr := '%' + codeStr + '%'; sql := sql + ' AND "MatCode" LIKE ' + xAddSqlMark(codeStr); end; if Length(Trim(nameStr)) > 0 then begin nameStr := '%' + nameStr + '%'; sql := sql + ' AND "Name" LIKE ' + xAddSqlMark(nameStr); end; sql := sql + ' ORDER BY "LcStatus", "MatCode"'; // sql := sql + ' ORDER BY ("LcStatus" = ''ÁÖ¿ø·á'') DESC, "MatCode"'; try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetStrSqlMaterialMstList Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; Result := LoadFromQuery(AQuery); end; end.