⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 whereform.cpp

📁 科思ERP部分源码及控件
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include "WhereForm.h"
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#pragma link "SDComboBox"
#pragma link "DateEdit"
#pragma link "SDEdit"
#pragma resource "*.dfm"

TWhereStrForm *WhereStrForm;
//---------------------------------------------------------------------------
__fastcall TWhereStrForm::TWhereStrForm(TComponent* Owner,TKSCDSet *DSet,AnsiString FixFilter)
        : TForm(Owner)
{
  ClientFilter=FixFilter;
  l_DSet=DSet;
  l_DataSetType=1;
  l_DSet->Open();
  sFields=new TStringList();
  sFieldType=new TStringList();
  sFieldQueryStr=new TStringList();
  sWhere=new TStringList();
  int iType;
  for(int i=0;i<l_DSet->MasterFieldCount;i++)
  {
    LFields->Items->Strings[i]=l_DSet->MasterFields->Fields[i]->DisplayName;
    sFields->Add(l_DSet->MasterFields->Fields[i]->FieldName);
    iType=l_DSet->MasterFields->Fields[i]->DataType;
    switch(iType)
    {
     case 2,3,4,5,6:
      sFieldType->Add("NUMBER");
      break;
     case 11:
      sFieldType->Add("DATE");
      break;
     default:
      sFieldType->Add("CHAR");
      break;
    }
    sFieldQueryStr->Add(""); //暂缺字段查询语句
  }
  LFields->ItemIndex=0;
  LFieldsClick(LFields);
  scLogic->AddItems("等于","=");
  scLogic->AddItems("大于",">");
  scLogic->AddItems("小于","<");
  scLogic->AddItems("不大于","<=");
  scLogic->AddItems("不小于",">=");
  scLogic->AddItems("不等于","<>");
  scLogic->AddItems("最接近","like");
  scLogic->ItemIndex=0;
  scRelate->AddItems(" 无", "     ");
  scRelate->AddItems("或者"," or  ");
  scRelate->AddItems("并且"," and ");
  scRelate->ItemIndex=0;
  ecValue->AddItems(" 是 ","1");
  ecValue->AddItems(" 否 ","0");
  ecValue->ItemIndex=0;
}
//---------------------------------------------------------------------------
__fastcall TWhereStrForm::TWhereStrForm(TComponent* Owner,TKSCRSet *RSet,AnsiString FixFilter,TStringList *FieldList)
        : TForm(Owner)
{
  AnsiString tmpstr,tmpstr2;
  int iPos;
  ClientFilter=FixFilter;
  l_RSet=RSet;
  l_DataSetType=2;
  if(l_RSet != NULL)
   l_RSet->Open();
  sFields=new TStringList();
  sFieldType=new TStringList();
  sFieldQueryStr=new TStringList();
  sWhere=new TStringList();
  for(int i=0;i<FieldList->Count;i++)
  {
   tmpstr=FieldList->Strings[i];
   iPos=tmpstr.AnsiPos("\t");
   tmpstr2=tmpstr.SubString(1,iPos-1);
   sFields->Add(tmpstr2);  //字段名
   tmpstr=tmpstr.SubString(iPos+1,tmpstr.Length()-iPos);
   iPos=tmpstr.AnsiPos("\t");
   tmpstr2=tmpstr.SubString(1,iPos-1);
   LFields->Items->Add(tmpstr2); //字段中文说明
   tmpstr=tmpstr.SubString(iPos+1,tmpstr.Length()-iPos);
   iPos=tmpstr.AnsiPos("\t");
   tmpstr2=tmpstr.SubString(1,iPos-1);
   sFieldType->Add(tmpstr2);  //字段类型
   sFieldQueryStr->Add(tmpstr.SubString(iPos+1,tmpstr.Length()-iPos)); //字段查询语句
  }
  LFields->ItemIndex=0;
  LFieldsClick(LFields);
  scLogic->AddItems("等于","=");
  scLogic->AddItems("大于",">");
  scLogic->AddItems("小于","<");
  scLogic->AddItems("不大于","<=");
  scLogic->AddItems("不小于",">=");
  scLogic->AddItems("不等于","<>");
  scLogic->AddItems("最接近","like");
  scLogic->ItemIndex=0;
  scRelate->AddItems(" 无", "     ");
  scRelate->AddItems("或者"," or  ");
  scRelate->AddItems("并且"," and ");
  scRelate->ItemIndex=0;
  ecValue->AddItems(" 是 ","1");
  ecValue->AddItems(" 否 ","0");
  ecValue->ItemIndex=0;
}
//---------------------------------------------------------------------------

void __fastcall TWhereStrForm::FormDestroy(TObject *Sender)
{
  delete  sFields;
  delete  sWhere;
}
//---------------------------------------------------------------------------
void __fastcall TWhereStrForm::bbAddClick(TObject *Sender)
{
  TListItem *pItem;
  AnsiString TStr1,TStr2,Value;
  if(lvWhereStr->Items->Count==0&&scRelate->ItemIndex!=0)
  {
    MessageBox(Handle,"不能选取与或关系.","错误提示",MB_ICONERROR);
    return;
  }
  if(lvWhereStr->Items->Count>0&&scRelate->ItemIndex==0)
  {
    MessageBox(Handle,"只能选取与或关系.","错误提示",MB_ICONERROR);
    return;
  }
  if(etValue->Visible)
   Value=etValue->Text;
  if(ecValue->Visible)
   Value=ecValue->ItemData[1];
  if(edValue->Visible)
   Value=edValue->Text;
  TStr1=sFields->Strings[LFields->ItemIndex]; //字段名
  TStr2=sFieldType->Strings[LFields->ItemIndex]; //字段类型
  if(TStr2=="NUMBER" || TStr2=="BOOL")
  {
    if(Value.IsEmpty())
    {
      MessageBox(Handle,"数字类型,值不能为空.","错误提示",MB_ICONERROR);
      return;
    }
    if(scLogic->ItemData[1]=="like")
     TStr2=" "+scRelate->ItemData[1]+" "+TStr1+" = "+Value;
    else
     TStr2=" "+scRelate->ItemData[1]+" "+TStr1+" "+scLogic->ItemData[1]+" "+Value;
  }
  else
  {
    if(scLogic->ItemData[1]=="like")
     TStr2=" "+scRelate->ItemData[1]+" "+TStr1+" "+scLogic->ItemData[1]+" '%"+Value+"%'";
    else
     TStr2=" "+scRelate->ItemData[1]+" "+TStr1+" "+scLogic->ItemData[1]+" '"+Value+"'";
  }
  sWhere->Add(TStr2);
  pItem=lvWhereStr->Items->Add();
  pItem->Caption=scRelate->Text;
  pItem->SubItems->Add(LFields->Items->Strings[LFields->ItemIndex]+scLogic->Text+Value);
  lvWhereStr->Items->Item[lvWhereStr->Items->Count-1]->Selected=true;
  scRelate->ItemIndex=1;
  LFields->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TWhereStrForm::bbReMoveClick(TObject *Sender)
{
  if(lvWhereStr->Selected)
  {
   int i=lvWhereStr->Selected->Index;
   lvWhereStr->Items->Delete(i);
   sWhere->Delete(i);
   if(i==0&&lvWhereStr->Items->Count>0)
   {
     lvWhereStr->Items->Item[i]->Caption="无";
     sWhere->Strings[i]=sWhere->Strings[i].SubString(6,sWhere->Strings[i].Length());
     lvWhereStr->Items->Item[i]->Selected=true;
   }
   if(i>0&&lvWhereStr->Items->Count>0)
     lvWhereStr->Items->Item[i-1]->Selected=true;
   if(lvWhereStr->Items->Count==0)
     scRelate->ItemIndex=0;
 }
   LFields->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TWhereStrForm::bbOkClick(TObject *Sender)
{
/*
  if(lvWhereStr->Items->Count<1)
    bbAddClick(Sender);
*/
  if(l_DataSetType == 1)
   l_DSet->Close();
  else
   if(l_RSet != NULL)
    l_RSet->Close();
  WhereStr="";
  for(int i=0; i<sWhere->Count;i++)
   WhereStr+=sWhere->Strings[i];
  if(!ClientFilter.Trim().IsEmpty())
    {
     if(!WhereStr.Trim().IsEmpty())
       WhereStr+=" and "+ClientFilter;
      else
        WhereStr=ClientFilter;
    }
  if(l_DataSetType == 1)
  {
   l_DSet->HeadWhereStr=WhereStr;
   l_DSet->Open();
  }
  else
   if(l_RSet != NULL)
   {
    l_DSet->Close();
    l_DSet->Filter=WhereStr;
    l_DSet->Filtered=true;
    l_DSet->Open();
   }

}
//---------------------------------------------------------------------------
void __fastcall TWhereStrForm::scLogicClick(TObject *Sender)
{
   etValue->Text="";
   if(etValue->Visible)
     etValue->SetFocus();
   if(edValue->Visible)
     edValue->SetFocus();
}
//---------------------------------------------------------------------------

void __fastcall TWhereStrForm::bbClearClick(TObject *Sender)
{
   lvWhereStr->Items->Clear();
   sWhere->Clear();
   LFields->SetFocus();
   scRelate->ItemIndex=0;
}
//---------------------------------------------------------------------------
void __fastcall TWhereStrForm::LFieldsClick(TObject *Sender)
{
   AnsiString Str1,Str2;
   Str1=sFieldType->Strings[LFields->ItemIndex];
   Str2=sFieldQueryStr->Strings[LFields->ItemIndex];
    if(Str1 == "DATE")
    {
     edValue->Visible=true;
     ecValue->Visible=false;
     etValue->Visible=false;
    }
    else if(Str1 == "BOOL")
    {
     edValue->Visible=false;
     ecValue->Visible=true;
     etValue->Visible=false;
    }
    else
    {
     edValue->Visible=false;
     ecValue->Visible=false;
     etValue->Visible=true;
     if(Str1 == "NUMBER" )
      etValue->CharType=ctMathematic;
     else
      etValue->CharType=ctNormal;
     if(Str2 != "")
      etValue->ButtonVisible=true;
     else
      etValue->ButtonVisible=false;
    }
}
//---------------------------------------------------------------------------
void __fastcall TWhereStrForm::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
  if(Shift.Contains(ssCtrl))
  {
    if(Key==65)
      bbAddClick(Sender);
    if(Key==83)
     bbReMoveClick(Sender);
    if(Key==68)
     bbClearClick(Sender);
    if(Key==88)
     bbOkClick(Sender);
  }
}
//---------------------------------------------------------------------------

void __fastcall TWhereStrForm::etValueButtonClick(TObject *Sender)
{
  if(etValue->ButtonVisible)
  {
    AnsiString SqlStr;
    TfrmWnQuery *p;
    SqlStr=sFieldQueryStr->Strings[LFields->ItemIndex];
    if(SqlStr.IsEmpty())
     return;
    try
    {
   //   StartWaitForm("正在查询,请稍候...");
      p=new TfrmWnQuery(this,"查询项目查询",SqlStr);
    }
    __finally
    {
    //  EndWaitForm();
    }
    if(p->ShowModal()==mrOk)
    {
      etValue->Text=p->ColData[1];
    }
    delete p;

  }
}
//---------------------------------------------------------------------------






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -