Delete all Tables in Alias void TData
A:hover {color: #FF0000; font-style: italic; font-weight: bold}
本文中包含了一些常用的代码片断,看看想想或许有他山之石可以攻玉的可能。
CKER
删除别名中所有的表
void TData::CleanTemp()
{
TStringList *myTables = new TStringList();
TTable *Table = new TTable(this);
try
{
Session-GetTableNames("Temp", "", True, False, myTables);
}
catch (...) {}
// AnsiString str = myTables->GetText();
// ShowMessage(str);
for(int count=0; count < myTables-Count; count++)
{
Table-DatabaseName = "Temp";
Table-TableName = myTables-Strings[count];
Table-Close();
Table-DeleteTable();
}
delete myTables;
delete Table;
}
BACK 纯虚函数
//纯虚函数只在基类中出现,而在子类中必须有
//与其匹配的成员函数。程序中申明的子类的实例
file://必须为基类中的每一个纯虚函数提供一个重载的成员函数。
class TBaseClass
{
public:
virtual void Display() = 0;
};
class TDerivedClass : public TBaseClass
{
public:
void Display() { ShowMessage("From Derived"); }
};
class TSecondDerivedClass : public TDerivedClass
{
public:
void Display() { ShowMessage("From Second Derived"); }
};
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TDerivedClass dc; dc.Display();// "From Derived"
TSecondDerivedClass sc; TBaseClass* bc = ≻
bc-Display(); // "From Second Derived"
}
虚函数
//虚函数作为其他类的父类的成员函数。
//如果继承子类成员函数中存在与父类成员函数完全相同的函数,
//子类中的成员函数永远有效。
class Base
{
public:
virtual void Display() { ShowMessage("Base Class"); }
};
class DerivedOne : public Base
{
public:
void Display() { ShowMessage("DerivedOne"); }
};
class DerivedTwo : public Base
{
public:
void Display() { ShowMessage("DerivedTwo"); }
};
Base* pBases[10];
int count = 0;
DerivedOne aDerOne;
DerivedTwo aDerTwo;
pBases[count++] = &aDerOne;
pBases[count++] = &aDerTwo;
for( int i=0; i < count; i++ )
pBases[i]-Display();
启动页面
USEDATAMODULE("Datamod.cpp", DataModule);
USEFORM("about.cpp", AboutBox);
USEFORM("main.cpp", MainForm);
USEFORM("splash.cpp", SplashForm);
file://---------------------------------------------------------------------------
#include "splash.h"
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
SplashForm = new TSplashForm(Application);
SplashForm-Show();
SplashForm-Update();
Application-Initialize();
Application-Title = "Example of Loading Splash Form";
Application-HelpFile = "SplashHelp.hlp";
Application-CreateForm(__classid(TMainForm), &MainForm);
Application-CreateForm(__classid(TDataModule), &DataModule);
Application-CreateForm(__classid(TAboutBox), &AboutBox);
SplashForm-Hide();
SplashForm-Close();
Application-Run();
}
catch (Exception &exception)
{
Application-ShowException(&exception);
}
return 0;
}
指针
int array[] = { 2, 4, 6, 8, 10}
int myInteger = array[3]; //
值为
8
// ----使用指针可以实现同样的功能
-----
int array[] = { 2, 4, 6, 8, 10}
int* myPtr = array;
int myInteger = myPtr[3]; //
值为8
BACK 为指针解除引用 int x = 32;
int* ptr = &x;
//解除指针的引用
file://以获得内存位置的内容
int y = *ptr; // y = 32
表的For循环
void TDataModuleEmployee::ListNames( TStrings *Items )
{
try
{
for ( TableAll-First(); !TableAll-Eof; TableAll-Next() )
if ( TableAll-FieldByName("Deleted")-AsBoolean == false )
Items-AddObject( TableAll-FieldByName("Name")-AsString, (TObject *)TableAll-FieldByName("Refnum")-AsInteger );
}
catch (Exception &e)
{
Application-ShowException(&e);
};
}
变量与常量的声明
char ch;
int count = 1;
char* name = "csdn.net";
struct complex { float my, his;};
float real(complex* p) {return p-my};
const double pi = 3.1415926535897932385;
templetate abc(T a) { return a < 0 ? -a : a; };
enum WebSite { one, two, three, four};
int* a; // * 指针
char* p[20]; // [ ] 数组
void myFunction(int); // ( )函数
struct str { short length; char* p; };
char ch1 = 'a';
char* p = &ch1; // &引用 ,p保持着ch1的地址
char ch2 = *p; // ch2 = 'a'
检查表是否存在
#include "io.h"
if (access(Table1-TableName.c_str(),0)) file://检查表是否存在
{ // 若不存在就创建 ...
Table1-Active = false;
Table1-TableType = ttParadox;
Table1-FieldDefs-Clear();
Table1-FieldDefs-Add("Myfield", ftString, 15, false);
Table1-IndexDefs-Clear();
Table1-CreateTable();
Table1-Active = true;
}
else
Table1-Active = true;
组件的类名
//找出丢失的组件类名
for(int i=0; i < ComponentCount; i++)
{
if(String(dynamic_cast<TComponent&(*Components[i]).Name) == "")
{
ShowMessage(Components[i]-ClassName());
}
}
剪贴板中的文字
#include "memory.h" // 包含 auto_ptr<
#include "clipbrd.hpp" file://包含 TClipboard & Clipboard()
// 范例程序,包含了一个memo控件
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{ file://创建 TStringList对象
auto_ptr ClipText(new TStringList); file://得到剪贴板中的文字的拷贝
ClipText-Text = Clipboard()-AsText; file://然后加工一下...
Memo1-Lines-AddStrings(ClipText.get());
}
字符流
//范例一
#include "sstream"
const char *name = "cker";
const char *email = "cker@sina.com";
// 生成
"cker"[SMTP:cker@sina.com]
ostringstream ost;
ost << "\"" << name << "\"[SMTP:" << email << "]";
Edit1-Text = ost.str().c_str();
file://范例二
void TDataModuleEmployee::FullReport(const char *title)
{
Report.header(title);
Report << sformat( "Employee #%2d: %s%s\n", TableAllRefnum-Value, TableAllName-Text.c_str(),
TableAllManagerFlag-Value ?"(Manager)" : "" ) << " Address: " <<
TableAllAddress-Text.c_str() << endl << " " << TableAllCityProvZip-Text.c_str() <<
endl << " " << NameCountry(TableAllCanada-Value) << endl;
Report.footer();
}
检查表是否已打开
void TData::CheckEdit()
{
for(int i=0; i < ComponentCount; i++)
{
if(dynamic_cast(Components[i]))
{
if(((TTable*)Components[i])-State == dsEdit)
{
String s = "Table " + Components[i]-Name + " is in edit mode" "\rWould you like to post it before entering new task?";
if(MessageBox(NULL,s.c_str(),"Table in Edit Mode",MB_YESNO | MB_ICONINFORMATION) == IDYES)
((TTable*)Components[i])-Post(); else ((TTable*)Components[i])-Cancel();
}
}
}
}
表的状态操作
//关闭已打开的表并将他们恢复成初始状态。
void TData::MyTables(TForm * sender)
{
int i;
TTable * Table;
bool *active = new
bool[MyClass->ComponentCount];//在动态数组中存放每个表的初始状态,然后关闭所有的表
for(i = 0; i < MyClass-ComponentCount; i++)
{
try
{
if((Table = dynamic_cast(MyClass-Components[i])) != NULL)
{
active[i] = Table-Active;
Table-Active = false;
}
}
catch(...) {}; file://异常应该只来自于dynamic cast...
}
for(i = 0; i < MyClass-ComponentCount; i++)
{
try
{
if((Table = dynamic_cast(MyClass-Components[i])) != NULL)
{
if(Table-DatabaseName != OPTARDatabase-DatabaseName)
continue;
DBIResult result = DBIERR_NONE + 1;
while(result != DBIERR_NONE) file://若希望的话,这样允许用户重试!
{
result = DbiPackTable (OPTARDatabase-Handle,NULL,Table-TableName.c_str(),NULL, true);
if(result != DBIERR_NONE)
{
AnsiString rsltText = "Unable to pack " + Table-TableName + "." ;
char rslt[DBIMAXMSGLEN + 1];
DbiGetErrorString(result, rslt) rsltText += ". Try again?";
if(Application-MessageBox(rsltText.c_str(), "Error!",MB_YESNO) != IDYES)
break;
}
}
}
}
catch (...) {};
file://异常应该只来自于dynamic cast...
}
//
将所有的表设回初始状态。
for(i = 0; i < MyClass-ComponentCount; i++)
{
try
{
if((Table = dynamic_cast(MyClass-Components[i])) != NULL)
Table-Active = active[i];
}
catch(...) {};
}
delete []active;
}
改变PageControl的标签
void __fastcall TfmMainForm::Cancel1Click(TObject *Sender)
{
int i;
switch (PageControl1-ActivePage-Tag))
{
case 1:
for (i=0; i < ComponentCount; i++)
{
if (dynamic_cast(Components[i]))
dynamic_cast(Components[i])-Enabled = false;
}
Data-tbDetail-Cancel();
break;
case 2:
for (i=0; i < ComponentCount; i++)
{
if (dynamic_cast(Components[i]))
dynamic_cast(Components[i])-Enabled = false;
}
Data-tbDetail-Cancel();
break;
case 3:
for (i=0; i < ComponentCount; i++)
{
if (dynamic_cast(Components[i]))
dynamic_cast(Components[i])-Text = "";
}
break;
}
}
向Query传递参数
// 直接从表向Query传递参数的一种方法
TQuery *Query = new TQuery(this);
Query-DatabaseName = "dbServer";
Query-SQL-Clear();
Query-SQL-Add("DELETE FROM 'Events.DB' WHERE (TicketNo = " + Data-tbProblem-FieldByName("TicketNo")-AsString + ")" );
Query-ExecSQL();
Query-Close();
delete Query;
日期属性
TMaskEdit *meOpen;
TLabel *lbCount1;
TDateTime Date2;
void __fastcall TfmMainForm::CountOpen(TObject *Sender)
{
switch(dynamic_cast<TComponent&(*Sender).Tag)
{
case 1:
count1 = StrToInt(lbCount1-Caption);
count1 += 1;
Date2 = Now() + count1;
meOpen-Text = Date2.DateString();
lbCount1-Caption = IntToStr(count1);
break;
case 2:
count1 = StrToInt(lbCount1-Caption);
count1 -= 1;
Date2 = Now() + count1;
meOpen-Text = Date2.DateString();
lbCount1-Caption = IntToStr(count1);
break;
}
}
绘制状态条
void __fastcall TForm1::StatusBar1DrawPanel(TStatusBar *StatusBar, TStatusPanel *Panel, const TRect &Rect)
{
TCanvas& c = *StatusBar-Canvas;
switch (Panel-Index)
{
case 0 :
{
StatusBar1-Panels-Items[0]-Text = "Hello C++";
c.Brush-Style = bsClear;
TRect temp = Rect;
temp.Top += 1;
temp.Left += 1;
c.Font-Color = clWhite;
DrawText(c.Handle, Panel-Text.c_str(), -1,(RECT*)&temp, DT_SINGLELINE | DT_CENTER);
c.Font-Color = clBlack;
DrawText(c.Handle, Panel-Text.c_str(), -1, (RECT*)&Rect, DT_SINGLELINE | DT_CENTER);
break;
}
case 1:
{
c.Brush-Color =
clYellow;
c.FillRect(Rect);
c.Font-Color = clRed;
DrawText(c.Handle,"clYellow Color", -1, (RECT*)&Rect, DT_SINGLELINE | DT_CENTER);
break;
}
case 2:
{
Graphics::TBitmap* bm = new Graphics::TBitmap;
bm-Handle = LoadBitmap(NULL, MAKEINTRESOURCE(32760));
c.Draw(Rect.Left, Rect.Top, bm);
delete bm;
break;
}
}
}