Delphi 数据库数据集分页调用相关函数集
unit fc;
interface
uses
UnitDM,main,Classes,Controls,Variants,DB,SysUtils,StrUtils,StdCtrls,Math,dbisamtb;
type
TItemEx=class(TObject)
caption:string;
public
id:string;
item:string;
end;
procedure CreateMake(Box: TComboBox);
procedure CreateGroup(Box: TComboBox);
procedure CreatePart(Box: TComboBox;partgroup:string);
procedure CreateModeSet(Box: TComboBox;make:string);
function FormartSTR(Str:string;isChinese:Boolean=False):string;
function SearchNumber(sno:string;isFuzzy:Boolean;isFuzzyBegin:Boolean=False;isFuzzyEnd:Boolean=True;isChinese:Boolean=False):string;
procedure execSql;
procedure DoFilter;
procedure DoPage(newpage:Integer);
procedure ShowData(qryPro:TDBISAMQuery);
function getBoxItem(Sender: TObject):TObject;
procedure initGrid;
var
mainFrm: TFrmMain;
implementation
{init make}
procedure CreateMake(Box: TComboBox);
var
objItemEx:TItemEx;
begin
with DM.qryTmp do
begin
SQL.Clear;
SQL.Add('select * from make order by eng_name');
Open;
objItemEx:=TItemEx.Create;
objItemEx.caption := '';
objItemEx.id := '';
objItemEx.item := '';
Box.AddItem('',objItemEx);
while not Eof do
begin
objItemEx:=TItemEx.Create;
objItemEx.caption := VarToStr(FieldValues['eng_name']);
objItemEx.id := VarToStr(FieldValues['id']);
objItemEx.item := VarToStr(FieldValues['item']);
Box.AddItem(VarToStr(FieldValues['eng_name']),objItemEx);
Next;
end;
end;
end;
{init Group}
procedure CreateGroup(Box: TComboBox);
var
objItemEx:TItemEx;
begin
with DM.qryTmp do
begin
SQL.Clear;
SQL.Add('select * from partgroup order by eng_name');
Open;
objItemEx:=TItemEx.Create;
objItemEx.caption := '';
objItemEx.id := '';
objItemEx.item := '';
Box.AddItem('',objItemEx);
while not Eof do
begin
objItemEx:=TItemEx.Create;
objItemEx.caption := VarToStr(FieldValues['eng_name']);
objItemEx.id := VarToStr(FieldValues['id']);
objItemEx.item := VarToStr(FieldValues['item']);
Box.AddItem(VarToStr(FieldValues['eng_name']),objItemEx);
Next;
end;
end;
end;
{init Part}
procedure CreatePart(Box: TComboBox;partgroup:string);
var
objItemEx:TItemEx;
begin
Box.Clear;
with DM.qryTmp do
begin
SQL.Clear;
SQL.Add('select * from part where partgroup='''+partgroup+''' order by eng_name');
Open;
objItemEx:=TItemEx.Create;
objItemEx.caption := '';
objItemEx.id := '';
objItemEx.item := '';
Box.AddItem('',objItemEx);
while not Eof do
begin
objItemEx:=TItemEx.Create;
objItemEx.caption := VarToStr(FieldValues['eng_name']);
objItemEx.id := VarToStr(FieldValues['id']);
objItemEx.item := VarToStr(FieldValues['item']);
Box.AddItem(VarToStr(FieldValues['eng_name']),objItemEx);
Next;
end;
end;
end;
{init ModeSet}
procedure CreateModeSet(Box: TComboBox;make:string);
var
objItemEx:TItemEx;
begin
Box.Clear;
with DM.qryTmp do
begin
SQL.Clear;
SQL.Add('select * from ec_modeset where make='''+make+''' order by name');
Open;
objItemEx:=TItemEx.Create;
objItemEx.caption := '';
objItemEx.id := '';
objItemEx.item := '';
Box.AddItem('',objItemEx);
while not Eof do
begin
objItemEx:=TItemEx.Create;
objItemEx.caption := VarToStr(FieldValues['name']);
objItemEx.id := VarToStr(FieldValues['id']);
objItemEx.item := '';
Box.AddItem(VarToStr(FieldValues['name']),objItemEx);
Next;
end;
end;
end;
{格式化号码}
function FormartSTR(Str:string;isChinese:Boolean=False):string;
var
AllStr,C,Val:string;
pos:PChar;
i:integer;
begin
if isChinese then
begin
Val:=StringReplace(Str,' ','',[rfReplaceAll]);
Val:=StringReplace(Val,'-','',[rfReplaceAll]);
Val:=StringReplace(Val,'.','',[rfReplaceAll]);
Val:=StringReplace(Val,'/','',[rfReplaceAll]);
Val:=StringReplace(Val,'\\','',[rfReplaceAll]);
result:=Val;
end else begin
AllStr:='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
Val := Str;
for i:=0 to length(Str)-1 do
begin
C:=MidStr(Str,i+1,1);
pos := strpos(PChar(AllStr),PChar(C));
if pos = nil then Val := StringReplace(Val,C,'',[rfReplaceAll]);
end;
result:=UpperCase(Val);
end;
end;
{搜索指定号码,得到产品ID集}
function SearchNumber(
sno:string;
isFuzzy:Boolean;
isFuzzyBegin:Boolean=False; //模糊时是否加前 %
isFuzzyEnd:Boolean=True; //模糊时是否加后 %
isChinese:Boolean=False):string; //是否带中文号码搜索
var
ids:string;
FB,FE:string;
begin
sno:=FormartSTR(sno,isChinese);
ids:='';
if isFuzzyBegin then FB:='%' else FB:='';
if isFuzzyEnd then FE:='%' else FE:='';
with DM.qryTmp do
begin
SQL.Clear;
if isFuzzy then
SQL.Add('select item from partnumber where formatnumber like '''+FB+sno+FE+'''')
else
SQL.Add('select item from partnumber where formatnumber = '''+sno+'''');
Open;
while not Eof do
begin
ids:=ids+','+vartostr(FieldValues['item']);
Next;
end;
if ids='' then ids:='0'
else ids:=MidStr(ids,2,Length(ids));
end;
Result := ids;
end;
{装载数据}
procedure execSql;
begin
with mainFrm do
begin
if not qryPro.Active then
begin
qryPro.SQL.Clear;
qryPro.SQL.Add('select id,partgroup,part,makes,ec_modeset from product');
qryPro.Open;
end;
end;
end;
{执行过滤}
procedure DoFilter;
var
i:Integer;
begin
with mainFrm do
begin
qryPro.Filter := FilterStr;
qryPro.Filtered := True;
RecordCount := qryPro.RecordCount;
PageCount := ceil(RecordCount/DM.PageSize);
lbPageTotal.Caption := 'Total record: '+inttostr(RecordCount)+' , Total page: '+inttostr(PageCount);
cbbPage.Clear;
for i:=1 to PageCount do
begin
cbbPage.Items.Add(IntToStr(i));
end;
cbbPage.ItemIndex :=0;
qryPro.First;
page :=0;
DoPage(0);
end;
end;
{执行分页}
procedure DoPage(newpage:Integer);
var
i,row:Integer;
begin
with mainFrm do
begin
if DM.GridView = 'view' then
begin
for i:=0 to View.DataController.RecordCount-1 do
View.DataController.DeleteRecord(0);
end else begin
for i:=0 to Card.DataController.RecordCount-1 do
Card.DataController.DeleteRecord(0);
end;
if newpage<0 then newpage:=0;
if newpage>PageCount-1 then newpage:=PageCount-1;
cbbPage.ItemIndex :=newpage;
lbPageNo.Caption := inttostr(newpage+1)+' / '+inttostr(PageCount);
if newpage>=PageCount then exit;
if newpage<page then
begin
if page=PageCount-1 then
qryPro.MoveBy(-(page-newpage)*DM.PageSize)
else
qryPro.MoveBy(-(page-newpage+1)*DM.PageSize);
end else
begin
qryPro.MoveBy((newpage-page-1)*DM.PageSize);
end;
row:=0;
for i:=0 to DM.PageSize-1 do
begin
if not qryPro.Eof then
begin
ShowData(qryPro);
Inc(row);
qryPro.Next;
end;
end;
page:=newpage;
cxGrid1.Height := row*View.OptionsView.DataRowHeight+View.OptionsView.HeaderHeight+3;
end;
end;
{打印 Grid 数据}
procedure ShowData(qryPro:TDBISAMQuery);
var
Recno:Integer;
IMS:TMemoryStream;
tmpSize: LongInt;
pid,name,oe,myno,note,Pic: String;
begin
DM.qryTmp.SQL.Clear;
DM.qryTmp.SQL.Add('select eng_name,oe,mynumber,eng_note,imagesmall from product where id='+VarToStr(qryPro.FieldValues['id'])+' top 1');
DM.qryTmp.Open;
if VarToStr(DM.qryTmp.FieldValues['imagesmall'])<>'' then
begin
IMS:=TMemoryStream.Create;
TBlobField(DM.qryTmp.FieldByName('imagesmall')).SaveToStream(IMS);
IMS.Position :=0;
tmpSize := IMS.Size;
SetLength(Pic, tmpSize);
IMS.Read(Pic[1], tmpSize);
IMS.Free;
end;
pid := VarToStr(qryPro.FieldValues['id']);
name := VarToStr(DM.qryTmp.FieldValues['eng_name']);
oe := VarToStr(DM.qryTmp.FieldValues['oe']);
myno := VarToStr(DM.qryTmp.FieldValues['mynumber']);
note := VarToStr(DM.qryTmp.FieldValues['eng_note']);
{View}
if DM.GridView = 'view' then
begin
with mainFrm do
begin
View.DataController.AppendRecord;
Recno:=View.ViewData.RecordCount-1;
View.DataController.SetValue(Recno,cxcol_id.Index,pid);
View.DataController.SetValue(Recno,cxcol_name.Index,name);
View.DataController.SetValue(Recno,cxcol_myno.Index,myno);
View.DataController.SetValue(Recno,cxcol_oe.Index,oe);
View.DataController.SetValue(Recno,cxcol_note.Index,note);
View.DataController.SetValue(Recno,cxcol_pic.Index,Pic);
end;
end else begin
{Card}
with mainFrm do
begin
Card.DataController.AppendRecord;
Recno:=Card.ViewData.RecordCount-1;
Card.DataController.SetValue(Recno,cxcrd_id.Index,pid);
Card.DataController.SetValue(Recno,cxcrd_name.Index,name);
Card.DataController.SetValue(Recno,cxcrd_myno.Index,myno);
Card.DataController.SetValue(Recno,cxcrd_oe.Index,oe);
Card.DataController.SetValue(Recno,cxcrd_pic.Index,Pic);
end;
end;
end;
function getBoxItem(Sender: TObject):TObject;
var
objItemEx:TItemEx;
Box:TComboBox;
begin
Box := (Sender as TComboBox);
objItemEx:=TItemEx.Create;
objItemEx.caption := '';
objItemEx.id := '';
objItemEx.item := '';
if Box.ItemIndex>-1 then
objItemEx:=(Box.Items.Objects[Box.ItemIndex] as TItemEx);
Result := objItemEx;
end;
{初始化 Grid}
procedure initGridView; {View}
begin
with mainFrm do
begin
LevelView.Visible := True;
LevelCard.Visible := False;
end;
end;
procedure initGridCard; {Card}
begin
with mainFrm do
begin
LevelView.Visible := False;
LevelCard.Visible := True;
end;
end;
procedure initGrid;
begin
if DM.GridView = 'view' then
begin
initGridView;
with mainFrm do
begin
{使用滚动条
cxGrid1.Align := alNone;
cxGrid1.Width := cxGrid1.Width - 16;}
end;
end else begin
initGridCard;
end;
end;
end.
interface
uses
UnitDM,main,Classes,Controls,Variants,DB,SysUtils,StrUtils,StdCtrls,Math,dbisamtb;
type
TItemEx=class(TObject)
caption:string;
public
id:string;
item:string;
end;
procedure CreateMake(Box: TComboBox);
procedure CreateGroup(Box: TComboBox);
procedure CreatePart(Box: TComboBox;partgroup:string);
procedure CreateModeSet(Box: TComboBox;make:string);
function FormartSTR(Str:string;isChinese:Boolean=False):string;
function SearchNumber(sno:string;isFuzzy:Boolean;isFuzzyBegin:Boolean=False;isFuzzyEnd:Boolean=True;isChinese:Boolean=False):string;
procedure execSql;
procedure DoFilter;
procedure DoPage(newpage:Integer);
procedure ShowData(qryPro:TDBISAMQuery);
function getBoxItem(Sender: TObject):TObject;
procedure initGrid;
var
mainFrm: TFrmMain;
implementation
{init make}
procedure CreateMake(Box: TComboBox);
var
objItemEx:TItemEx;
begin
with DM.qryTmp do
begin
SQL.Clear;
SQL.Add('select * from make order by eng_name');
Open;
objItemEx:=TItemEx.Create;
objItemEx.caption := '';
objItemEx.id := '';
objItemEx.item := '';
Box.AddItem('',objItemEx);
while not Eof do
begin
objItemEx:=TItemEx.Create;
objItemEx.caption := VarToStr(FieldValues['eng_name']);
objItemEx.id := VarToStr(FieldValues['id']);
objItemEx.item := VarToStr(FieldValues['item']);
Box.AddItem(VarToStr(FieldValues['eng_name']),objItemEx);
Next;
end;
end;
end;
{init Group}
procedure CreateGroup(Box: TComboBox);
var
objItemEx:TItemEx;
begin
with DM.qryTmp do
begin
SQL.Clear;
SQL.Add('select * from partgroup order by eng_name');
Open;
objItemEx:=TItemEx.Create;
objItemEx.caption := '';
objItemEx.id := '';
objItemEx.item := '';
Box.AddItem('',objItemEx);
while not Eof do
begin
objItemEx:=TItemEx.Create;
objItemEx.caption := VarToStr(FieldValues['eng_name']);
objItemEx.id := VarToStr(FieldValues['id']);
objItemEx.item := VarToStr(FieldValues['item']);
Box.AddItem(VarToStr(FieldValues['eng_name']),objItemEx);
Next;
end;
end;
end;
{init Part}
procedure CreatePart(Box: TComboBox;partgroup:string);
var
objItemEx:TItemEx;
begin
Box.Clear;
with DM.qryTmp do
begin
SQL.Clear;
SQL.Add('select * from part where partgroup='''+partgroup+''' order by eng_name');
Open;
objItemEx:=TItemEx.Create;
objItemEx.caption := '';
objItemEx.id := '';
objItemEx.item := '';
Box.AddItem('',objItemEx);
while not Eof do
begin
objItemEx:=TItemEx.Create;
objItemEx.caption := VarToStr(FieldValues['eng_name']);
objItemEx.id := VarToStr(FieldValues['id']);
objItemEx.item := VarToStr(FieldValues['item']);
Box.AddItem(VarToStr(FieldValues['eng_name']),objItemEx);
Next;
end;
end;
end;
{init ModeSet}
procedure CreateModeSet(Box: TComboBox;make:string);
var
objItemEx:TItemEx;
begin
Box.Clear;
with DM.qryTmp do
begin
SQL.Clear;
SQL.Add('select * from ec_modeset where make='''+make+''' order by name');
Open;
objItemEx:=TItemEx.Create;
objItemEx.caption := '';
objItemEx.id := '';
objItemEx.item := '';
Box.AddItem('',objItemEx);
while not Eof do
begin
objItemEx:=TItemEx.Create;
objItemEx.caption := VarToStr(FieldValues['name']);
objItemEx.id := VarToStr(FieldValues['id']);
objItemEx.item := '';
Box.AddItem(VarToStr(FieldValues['name']),objItemEx);
Next;
end;
end;
end;
{格式化号码}
function FormartSTR(Str:string;isChinese:Boolean=False):string;
var
AllStr,C,Val:string;
pos:PChar;
i:integer;
begin
if isChinese then
begin
Val:=StringReplace(Str,' ','',[rfReplaceAll]);
Val:=StringReplace(Val,'-','',[rfReplaceAll]);
Val:=StringReplace(Val,'.','',[rfReplaceAll]);
Val:=StringReplace(Val,'/','',[rfReplaceAll]);
Val:=StringReplace(Val,'\\','',[rfReplaceAll]);
result:=Val;
end else begin
AllStr:='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
Val := Str;
for i:=0 to length(Str)-1 do
begin
C:=MidStr(Str,i+1,1);
pos := strpos(PChar(AllStr),PChar(C));
if pos = nil then Val := StringReplace(Val,C,'',[rfReplaceAll]);
end;
result:=UpperCase(Val);
end;
end;
{搜索指定号码,得到产品ID集}
function SearchNumber(
sno:string;
isFuzzy:Boolean;
isFuzzyBegin:Boolean=False; //模糊时是否加前 %
isFuzzyEnd:Boolean=True; //模糊时是否加后 %
isChinese:Boolean=False):string; //是否带中文号码搜索
var
ids:string;
FB,FE:string;
begin
sno:=FormartSTR(sno,isChinese);
ids:='';
if isFuzzyBegin then FB:='%' else FB:='';
if isFuzzyEnd then FE:='%' else FE:='';
with DM.qryTmp do
begin
SQL.Clear;
if isFuzzy then
SQL.Add('select item from partnumber where formatnumber like '''+FB+sno+FE+'''')
else
SQL.Add('select item from partnumber where formatnumber = '''+sno+'''');
Open;
while not Eof do
begin
ids:=ids+','+vartostr(FieldValues['item']);
Next;
end;
if ids='' then ids:='0'
else ids:=MidStr(ids,2,Length(ids));
end;
Result := ids;
end;
{装载数据}
procedure execSql;
begin
with mainFrm do
begin
if not qryPro.Active then
begin
qryPro.SQL.Clear;
qryPro.SQL.Add('select id,partgroup,part,makes,ec_modeset from product');
qryPro.Open;
end;
end;
end;
{执行过滤}
procedure DoFilter;
var
i:Integer;
begin
with mainFrm do
begin
qryPro.Filter := FilterStr;
qryPro.Filtered := True;
RecordCount := qryPro.RecordCount;
PageCount := ceil(RecordCount/DM.PageSize);
lbPageTotal.Caption := 'Total record: '+inttostr(RecordCount)+' , Total page: '+inttostr(PageCount);
cbbPage.Clear;
for i:=1 to PageCount do
begin
cbbPage.Items.Add(IntToStr(i));
end;
cbbPage.ItemIndex :=0;
qryPro.First;
page :=0;
DoPage(0);
end;
end;
{执行分页}
procedure DoPage(newpage:Integer);
var
i,row:Integer;
begin
with mainFrm do
begin
if DM.GridView = 'view' then
begin
for i:=0 to View.DataController.RecordCount-1 do
View.DataController.DeleteRecord(0);
end else begin
for i:=0 to Card.DataController.RecordCount-1 do
Card.DataController.DeleteRecord(0);
end;
if newpage<0 then newpage:=0;
if newpage>PageCount-1 then newpage:=PageCount-1;
cbbPage.ItemIndex :=newpage;
lbPageNo.Caption := inttostr(newpage+1)+' / '+inttostr(PageCount);
if newpage>=PageCount then exit;
if newpage<page then
begin
if page=PageCount-1 then
qryPro.MoveBy(-(page-newpage)*DM.PageSize)
else
qryPro.MoveBy(-(page-newpage+1)*DM.PageSize);
end else
begin
qryPro.MoveBy((newpage-page-1)*DM.PageSize);
end;
row:=0;
for i:=0 to DM.PageSize-1 do
begin
if not qryPro.Eof then
begin
ShowData(qryPro);
Inc(row);
qryPro.Next;
end;
end;
page:=newpage;
cxGrid1.Height := row*View.OptionsView.DataRowHeight+View.OptionsView.HeaderHeight+3;
end;
end;
{打印 Grid 数据}
procedure ShowData(qryPro:TDBISAMQuery);
var
Recno:Integer;
IMS:TMemoryStream;
tmpSize: LongInt;
pid,name,oe,myno,note,Pic: String;
begin
DM.qryTmp.SQL.Clear;
DM.qryTmp.SQL.Add('select eng_name,oe,mynumber,eng_note,imagesmall from product where id='+VarToStr(qryPro.FieldValues['id'])+' top 1');
DM.qryTmp.Open;
if VarToStr(DM.qryTmp.FieldValues['imagesmall'])<>'' then
begin
IMS:=TMemoryStream.Create;
TBlobField(DM.qryTmp.FieldByName('imagesmall')).SaveToStream(IMS);
IMS.Position :=0;
tmpSize := IMS.Size;
SetLength(Pic, tmpSize);
IMS.Read(Pic[1], tmpSize);
IMS.Free;
end;
pid := VarToStr(qryPro.FieldValues['id']);
name := VarToStr(DM.qryTmp.FieldValues['eng_name']);
oe := VarToStr(DM.qryTmp.FieldValues['oe']);
myno := VarToStr(DM.qryTmp.FieldValues['mynumber']);
note := VarToStr(DM.qryTmp.FieldValues['eng_note']);
{View}
if DM.GridView = 'view' then
begin
with mainFrm do
begin
View.DataController.AppendRecord;
Recno:=View.ViewData.RecordCount-1;
View.DataController.SetValue(Recno,cxcol_id.Index,pid);
View.DataController.SetValue(Recno,cxcol_name.Index,name);
View.DataController.SetValue(Recno,cxcol_myno.Index,myno);
View.DataController.SetValue(Recno,cxcol_oe.Index,oe);
View.DataController.SetValue(Recno,cxcol_note.Index,note);
View.DataController.SetValue(Recno,cxcol_pic.Index,Pic);
end;
end else begin
{Card}
with mainFrm do
begin
Card.DataController.AppendRecord;
Recno:=Card.ViewData.RecordCount-1;
Card.DataController.SetValue(Recno,cxcrd_id.Index,pid);
Card.DataController.SetValue(Recno,cxcrd_name.Index,name);
Card.DataController.SetValue(Recno,cxcrd_myno.Index,myno);
Card.DataController.SetValue(Recno,cxcrd_oe.Index,oe);
Card.DataController.SetValue(Recno,cxcrd_pic.Index,Pic);
end;
end;
end;
function getBoxItem(Sender: TObject):TObject;
var
objItemEx:TItemEx;
Box:TComboBox;
begin
Box := (Sender as TComboBox);
objItemEx:=TItemEx.Create;
objItemEx.caption := '';
objItemEx.id := '';
objItemEx.item := '';
if Box.ItemIndex>-1 then
objItemEx:=(Box.Items.Objects[Box.ItemIndex] as TItemEx);
Result := objItemEx;
end;
{初始化 Grid}
procedure initGridView; {View}
begin
with mainFrm do
begin
LevelView.Visible := True;
LevelCard.Visible := False;
end;
end;
procedure initGridCard; {Card}
begin
with mainFrm do
begin
LevelView.Visible := False;
LevelCard.Visible := True;
end;
end;
procedure initGrid;
begin
if DM.GridView = 'view' then
begin
initGridView;
with mainFrm do
begin
{使用滚动条
cxGrid1.Align := alNone;
cxGrid1.Width := cxGrid1.Width - 16;}
end;
end else begin
initGridCard;
end;
end;
end.


浙公网安备 33010602011771号