unit ProductMst; 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 TProductMst = class(TwItem) private { Private declarations } FProdCode: string; FDescriptions: string; FMatKind: string; FMatType: string; FModel: string; FInternal: string; FProdExternal: string; FThickness: string; FProdLength: string; FManufact: string; FMatItem: string; FProdSpec: string; FmatList: TList; protected { Protected declarations } public { Public declarations } class function xAddSqlMark(velStr: string): string; class function xAddSqlDoubleMark(velStr: String): String; class function xGetStrSqlProductMstList(AQuery: TFDQuery; codeStr, nameStr: string): TList; class function LoadFromQuery(AQuery: TFDQuery): TList; class function xGetStrsGroupByColumn(AQuery: TFDQuery; column: string): TStrings; class function LoadFromStringsQuery(AQuery: TFDQuery; column: string): TStrings; class function LoadFromStringQuery(AQuery: TFDQuery; column: string): string; property matList: TList read FmatList write FmatList; class function xGetStrMaterialWithSameNameAsMe(AQuery: TFDQuery; prodName: string): string; published { Published declarations } property ProdCode: string read FProdCode write FProdCode; property Descriptions: string read FDescriptions write FDescriptions; property MatKind: string read FMatKind write FMatKind; property MatType: string read FMatType write FMatType; property Model: string read FModel write FModel; property Internal: string read FInternal write FInternal; property ProdExternal: string read FProdExternal write FProdExternal; property Thickness: string read FThickness write FThickness; property ProdLength: string read FProdLength write FProdLength; property Manufact: string read FManufact write FManufact; property MatItem: string read FMatItem write FMatItem; property ProdSpec: string read FProdSpec write FProdSpec; end; implementation { TProductMst } class function TProductMst.LoadFromQuery(AQuery: TFDQuery): TList; var curProd: TProductMst; begin Result := TList.Create; while not AQuery.Eof do begin curProd := TProductMst.Create(nil); curProd.OBID := AQuery.FieldByName('OBID').AsString; curProd.Name := AQuery.FieldByName('Name').AsString; curProd.wClassName := AQuery.FieldByName('wClassName').AsString; curProd.CreateDate := AQuery.FieldByName('CreateDate').AsString; curProd.CreateTime := FormatDateTime('hh:nn:ss', AQuery.FieldByName('CreateTime').AsDateTime); curProd.CreatorID := AQuery.FieldByName('CreatorID').AsString; curProd.IsValid := AQuery.FieldByName('IsValid').AsString; curProd.LcStatus := AQuery.FieldByName('LcStatus').AsString; curProd.ProdCode := AQuery.FieldByName('ProdCode').AsString; curProd.Descriptions := AQuery.FieldByName('Descriptions').AsString; curProd.MatKind := AQuery.FieldByName('MatKind').AsString; curProd.MatType := AQuery.FieldByName('MatType').AsString; curProd.Model := AQuery.FieldByName('Model').AsString; curProd.Internal := AQuery.FieldByName('Internal').AsString; curProd.ProdExternal := AQuery.FieldByName('ProdExternal').AsString; curProd.Thickness := AQuery.FieldByName('Thickness').AsString; curProd.ProdLength := AQuery.FieldByName('ProdLength').AsString; curProd.Manufact := AQuery.FieldByName('Manufact').AsString; curProd.MatItem := AQuery.FieldByName('MatItem').AsString; curProd.ProdSpec := AQuery.FieldByName('ProdSpec').AsString; Result.Add(curProd); AQuery.Next; end; end; class function TProductMst.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 TProductMst.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 TProductMst.xAddSqlDoubleMark(velStr: String): String; begin Result := ''; Result := '"' + velStr + '"'; end; class function TProductMst.xAddSqlMark(velStr: string): string; begin Result := ''; Result := '''' + velStr + ''''; end; class function TProductMst.xGetStrMaterialWithSameNameAsMe(AQuery: TFDQuery; prodName: string): string; var sql, column: string; begin Result := ''; sql := 'SELECT "MatKind" FROM "ProductMst"'; sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t'); if Length(Trim(prodName)) > 0 then sql := sql + ' AND "Name"=' + xAddSqlMark(prodName); sql := sql + ' LIMIT 1'; try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetStrMaterialWithSameNameAsMe Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; column := 'MatKind'; Result := LoadFromStringQuery(AQuery, column); end; class function TProductMst.xGetStrsGroupByColumn(AQuery: TFDQuery; column: string): TStrings; var sql: string; begin Result := nil; sql := 'SELECT DISTINCT ' + xAddSqlDoubleMark(column) + ' FROM "ProductMst"'; sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t'); try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetStrsGroupByColumn Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; Result := LoadFromStringsQuery(AQuery, column); end; class function TProductMst.xGetStrSqlProductMstList(AQuery: TFDQuery; codeStr, nameStr: string): TList; var sql: string; begin Result := nil; sql := 'SELECT * FROM "ProductMst"'; sql := sql + ' WHERE "IsValid"=' + xAddSqlMark('t'); if Length(Trim(codeStr)) > 0 then sql := sql + ' AND "MatKind"=' + xAddSqlMark(codeStr); if Length(Trim(nameStr)) > 0 then sql := sql + ' AND "Name"=' + xAddSqlMark(nameStr); sql := sql + ' ORDER BY "Name"'; try AQuery.Close; AQuery.SQL.Text := sql; AQuery.Open; except on E: Exception do ShowMessage('xGetStrSqlProductMstList Äõ¸® ½ÇÇà ¿À·ù: ' + E.Message); end; Result := LoadFromQuery(AQuery); end; end.