📄 createtable.cpp
字号:
//---------------------------------------------------------------------------
#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 + -