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

📄 createtable.cpp

📁 速达开源ERP系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "CreateTable.h"
#include "sdappserver_tlb.h"
#include "gvar.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "fpanel"
#pragma link "SDGrid"
#pragma link "SDComboBox"
#pragma link "SDEdit"
#pragma resource "*.dfm"
TfrmCreateTable *frmCreateTable;
int FRow,FCol;
//---------------------------------------------------------------------------
__fastcall TfrmCreateTable::TfrmCreateTable(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TfrmCreateTable::FormCreate(TObject *Sender)
{
  TComResultSet *m_TableRst;
  m_TableRst=NewResultSet();
  try
  {
    sgFk->Cells[0][0]="字段名";
    sgFk->Cells[1][0]="关联表名";
    sgFk->Cells[2][0]="关联字段";
    m_TableRst->Open("Select TableName,TableDesc,TableMdate,ClassName from sdTable,sdClass where Classid=TableClassid order by TableName","");
    while(m_TableRst->Eof==0)
    {
      cbxTable->AddItems(UpperCase(m_TableRst->FieldByName("TableName")),
                         m_TableRst->FieldByName("TableDesc"),
                         m_TableRst->FieldByName("ClassName"),
                         m_TableRst->FieldByName("TableMDate"));
      m_TableRst->MoveNext();
    }
    m_TableRst->Close();
  }
  __finally
  {
    delete m_TableRst;
  }
}
//---------------------------------------------------------------------------

void __fastcall TfrmCreateTable::FormClose(TObject *Sender,
      TCloseAction &Action)
{
    g_ClientComm->DelMsgForm(this->Name);
    Action=caFree;
}
//---------------------------------------------------------------------------

void __fastcall TfrmCreateTable::btnExitClick(TObject *Sender)
{
  Close();
}
//---------------------------------------------------------------------------




void __fastcall TfrmCreateTable::btnRefreshClick(TObject *Sender)
{
  AnsiString mSqlStr,mItemStr,mStr;
  bool mFounded;
  int ErrorNum;
  TComResultSet *m_TableRst;
  if(cbxTable->Text.IsEmpty())
    throw Exception(AnsiString("请选择一个表名!"));
  try
  {
    m_TableRst=NewResultSet();
    mSqlStr="select fielddesc,fieldname,fieldtype,fieldwidth,fielddecimal,fieldnull,fieldidentity,fieldprimarykey,fieldforeignkey,fieldrefertablename,fieldreferfieldname from sdfield where fieldtablename='"+cbxTable->Text+"' order by fieldno";
    m_TableRst->Open(mSqlStr,"");
    sgField->RowCount =1;
    lbPk->Clear();
    sgFk->RowCount=1;
    while(m_TableRst->Eof==0)
    {
      mItemStr="\t"+m_TableRst->FieldByName("FieldDesc")+"\t"+UpperCase(m_TableRst->FieldByName("FieldName"))+"\t"+
                m_TableRst->FieldByName("Fieldtype")+"\t"+m_TableRst->FieldByName("FieldWidth")+"\t"+
                m_TableRst->FieldByName("FieldDecimal")+"\t"+m_TableRst->FieldByName("FieldNull")+"\t"+
                m_TableRst->FieldByName("FieldIdentity");
      sgField->AddItem(mItemStr);
      mItemStr="\t"+AnsiString("")+"\t"+AnsiString("")+"\t"+AnsiString("")+"\t"+AnsiString("")+"\t"+
                AnsiString("")+"\t"+AnsiString("")+"\t"+AnsiString("");
      sgField->AddItem(mItemStr);
      if(m_TableRst->FieldByName("FieldPrimaryKey")=="1")
        lbPk->Items->Add(m_TableRst->FieldByName("FieldName"));
      if(m_TableRst->FieldByName("FieldForeignKey")=="1")
      {
        sgFk->RowCount++;
        sgFk->Cells[0][sgFk->RowCount-1]=m_TableRst->FieldByName("FieldName");
        sgFk->Cells[1][sgFk->RowCount-1]=m_TableRst->FieldByName("FieldReferTableName");
        sgFk->Cells[2][sgFk->RowCount-1]=m_TableRst->FieldByName("FieldReferFieldName");
      }
      m_TableRst->MoveNext();
    }
    m_TableRst->Close();
    mSqlStr=AnsiString("Select fielddesc='',fieldname=upper(b.name),fieldtype=(case c.name when 'varchar' then 'C' when 'int' then 'L'")+
         AnsiString(" when 'smallint' then 'N' when 'tinyint' then 'S' when 'bit' then 'B' when 'text' then 'M' when 'decimal' then 'F'")+
         AnsiString(" when 'datetime' then 'T' else '' end),fieldwidth=(case when c.name='decimal' or c.name='varchar' then coalesce(b.prec,0)")+
         AnsiString(" when c.name='int' then 10 when c.name='smallint' then 5 when c.name='tinyint' then 1 when c.name='datetime' then 8")+
         AnsiString(" when c.name='text' then 10 else 0 end),fielddecimal=coalesce(b.scale,0),fieldnull=(case when b.status=8 or b.status=24 then 1 else 0 end),")+
         AnsiString(" fieldidentity=(case when b.status=128 then 1 else 0 end) from sysobjects a,syscolumns b,systypes c where a.type='U' and a.id=b.id and b.usertype=c.usertype")+
         AnsiString(" and a.name='")+cbxTable->Text+AnsiString("'");
    m_TableRst->Open(mSqlStr,"");
    sgSelect->RowCount=1;
    while(m_TableRst->Eof==0)
    {
      mItemStr="\t"+UpperCase(m_TableRst->FieldByName("FieldName"))+"\t"+
                m_TableRst->FieldByName("Fieldtype")+"\t"+m_TableRst->FieldByName("FieldWidth")+"\t"+
                m_TableRst->FieldByName("FieldDecimal")+"\t"+m_TableRst->FieldByName("FieldNull")+"\t"+
                m_TableRst->FieldByName("FieldIdentity");
      sgSelect->AddItem(mItemStr);
      mStr=m_TableRst->FieldByName("FieldName");
      for(int i=1;i<sgField->RowCount;i++)
        if(sgField->Cells[2][i]==mStr)
        {
          sgField->Cells[2][i+1]=m_TableRst->FieldByName("FieldName");
          sgField->Cells[3][i+1]= m_TableRst->FieldByName("Fieldtype");
          sgField->Cells[4][i+1]=m_TableRst->FieldByName("FieldWidth");
          sgField->Cells[5][i+1]=m_TableRst->FieldByName("FieldDecimal");
          sgField->Cells[6][i+1]=m_TableRst->FieldByName("FieldNull");
          sgField->Cells[7][i+1]=m_TableRst->FieldByName("FieldIdentity");
          break;
        }
      m_TableRst->MoveNext();
    }
    m_TableRst->Close();
  }
  __finally
  {
    delete m_TableRst;
  }
}
//---------------------------------------------------------------------------

void __fastcall TfrmCreateTable::btCancelClick(TObject *Sender)
{
  sgField->Visible =true;
  FloatPanel2->Visible =false;
  FloatPanel1->Enabled =true;
}
//---------------------------------------------------------------------------

void __fastcall TfrmCreateTable::sgFieldSelectCell(TObject *Sender,
      int ACol, int ARow, bool &CanSelect)
{
    FRow=ARow;
    FCol=ACol;
}
//---------------------------------------------------------------------------

void __fastcall TfrmCreateTable::sgFieldDblClick(TObject *Sender)
{
  if(FCol==2&&(FRow/2)*2==FRow)
  {
    sgField->Visible =false;
    FloatPanel2->Visible=true;
    FloatPanel1->Enabled =false;
  }
}
//---------------------------------------------------------------------------

void __fastcall TfrmCreateTable::sgFieldMouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  if(Button==mbRight)
    if(FCol==2&&(FRow/2)*2==FRow)
      pmField->Popup(this->Left+sgField->Left+X,this->Top+sgField->Top+Y);
}
//---------------------------------------------------------------------------

void __fastcall TfrmCreateTable::E1Click(TObject *Sender)
{
  sgField->Visible =false;
  FloatPanel2->Visible=true;
  FloatPanel1->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TfrmCreateTable::D1Click(TObject *Sender)
{
  sgField->Cells[2][FRow]="";
  sgField->Cells[3][FRow]= "";
  sgField->Cells[4][FRow]="";
  sgField->Cells[5][FRow]="";
  sgField->Cells[6][FRow]="";
  sgField->Cells[7][FRow]="";
}
//---------------------------------------------------------------------------

void __fastcall TfrmCreateTable::btOKClick(TObject *Sender)
{
  sgField->Cells[2][FRow]=sgSelect->Cells[1][sgSelect->Row];

⌨️ 快捷键说明

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