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.
posted @ 2009-04-13 13:55  幽灵湖  阅读(953)  评论(0)    收藏  举报