C++Builder 程序员博客
定义了一个函数,用于检索数据,其中一个参数是TADOQuery类型的,
如下
void QuerySQL(TADOQuery *ADOQuery, String Str);
明明在别的机子上该函数可以编译通过,但是我添加这个函数后
却编译时产生错误:
[C++ Error] UnitPublic.h(256): E2147 'TADOQuery' cannot start a parameter declaration
这是什么原因啊,差了半天也没有查出来
没有ado添加这个控件吧
有的啊,我从组件面板里拉到Form里的
难道还要像VC那样先包含ADO15这个DLL??
问题解决,原来是没有在头文件中包含ADO组件的头文件
只要在头文件中
"#include <ADODB.hpp>"即可。
31 Mar
Variant ex,wb,sheet,range;
try
{
ex=CreateOleObject("Excel.Application");//创建应用对象
}
catch(…)
{
MessageBox(0, "启动Excel出错,可能是没有安装Excel","DBGrid2Excel",MB_OK | MB_ICONERROR);
return;
}
ex.OlePropertySet("Visible",true);//显示excel
ex.OlePropertyGet("Workbooks").OleProcedure("Add"); // 工作表
wb=ex.OlePropertyGet("ActiveWorkBook");//创建工作簿对象
sheet=wb.OlePropertyGet("ActiveSheet");
问题1:现在已经有sheet1,sheet2,sheet3,怎样添加sheet4,5….
问题2:wb.OleFunction("SaveAs","优化前的电压");与sheet.OleFunction("SaveAs","优化前的电压");
怎么效果一样啊都是给excel文档命名,怎么把sheet1,2,3重命名啊
问题3:ex.OlePropertyGet("workbooks").OleFunction("Add","E:\\result.xls");替换上面的
ex.OlePropertyGet("Workbooks").OleProcedure("Add");运行到此处时发生错误"发生意外"
这些对各位BCB精英都是小儿科,可我解决不了啊太菜了,明天该交差了很急啊……..
非常感谢啊!2、sheet重命名没问题。
但是1、
ex.OlePropertySet("Visible",true);
ex.OlePropertyGet("Workbooks").OleProcedure("Add");
wb=ex.OlePropertyGet("ActiveWorkBook");
sheet=wb.OlePropertyGet("ActiveSheet");
wb.OlePropertyGet("Sheets").OleFunction("Add", "Sheet4");//运行到此处提示"发生意外";
又不知道怎么办了。。。。
Variant ex,wb,sh1;
AnsiString p_name;
p_name="d:\\h.xls";
ex=CreateOleObject("Excel.Application");
ex.OlePropertyGet("WorkBooks").OleProcedure("open",p_name.c_str());
ex.OlePropertySet("Visible",(Variant)true);
wb=ex.OlePropertyGet("ActiveWorkBook");
wb.OlePropertyGet("worksheets").OleFunction("Add"); //增加工作表
ok
增加工作表没问题了,谢谢thwen//
不过打开已存在excel或在指定路径下创建excel仍有问题
1、假如E:\优化结果.xls已存在
Variant ex,wb,sh1;
AnsiString p_name;
p_name="d:\\优化结果.xls";
ex=CreateOleObject("Excel.Application");
ex.OlePropertyGet("WorkBooks").OleProcedure("Open",p_name.c_str());//在这仍然"发生意外"
2、假如"优化结果.xls"不存,在E盘新建优化结果.xls
AnsiString p_name;
p_name="d:\\优化结果.xls";
ex=CreateOleObject("Excel.Application");
ex.OlePropertyGet("WorkBooks").OleProcedure("Add",p_name.c_str());//在这仍然"发生意外"
mark
ole非常不好用啊
AnsiString p_name="d:\\\\优化结果.xls";
if(!FileExists(p_name))
{
Application->MessageBox("报表模板文件不存在,无法打开!",
"错误",MB_ICONSTOP|MB_OK);
return;
}
//file://建立Excel的Ole对象Ex
try
{
Ex = Variant::CreateObject("Excel.Application");
}
catch(…)
{
Application->MessageBox("无法启动Excel","错误",MB_ICONSTOP|MB_OK);
return;
}
//file://设置Excel为不可见
Ex.OlePropertySet("Visible",true);
//file://打开指定的Excel报表文件。报表文件中最好设定只有一个Sheet。
Ex.OlePropertyGet("WorkBooks").OleProcedure("Open",p_name.c_str());
Wb = Ex.OlePropertyGet("ActiveWorkBook");
Sheet = Wb.OlePropertyGet("ActiveSheet");//获得当前默认的Sheet
细心一点!!!!!!!!!!!!!!!!!!!
不容易啊,刚学BCB,还得努力啊!!!
31 Mar
EVC下宽字符的宏连接问题
PC:下如此定义可以实行
#define FILE_NAME(name) "D:/file_name/"#name
#define FILE_1 FILE_NAME("file1.bin")
ARM下如此定义不能实行
#define FILE_NAME(name) _T("D:/file_name/"#name)
#define FILE_1 FILE_NAME("file1.bin")
请问EVC下宽字符的连接该如何定义
31 Mar
现在我本来有个类,不带窗体的,现在需要在网页上调用,要做成activex的,不知道如何写?网上的资料好像也很少,做过的朋友帮个忙
我随便生成了一个vcl组件,显示在了sample上,但是,我想把这个vcl组件变成activex控件,在可以选择的vcl组件列表里面没有显示,这是怎么回事情呢/
建一个ActiveX工程,生成后,regsvr32 注册控件
http://topic.csdn.net/t/20030102/13/1320208.html
学习
学习.
楼上的朋友说的都好简单,我通过这几天的摸索,基本上搞清楚了
1.建立activeform
2.通过type library editor新增接口,注意,接口的返回值只能是hresult,真正函数的返回要放在参数中,并且,一定要用指针
3.发布,注册,ok
31 Mar
最近想做个打印服务程序,大家帮忙看下下面的设想是否可行:
当某台网络打印机出现故障时(判断网络打印机状态似乎比较困难..因为好多厂家都没有对应ping的返回信息,所以我打算通过服务器积压的打印任务获取对应的打印机IP地址,这个不知道有没有API能够获取…),如果能获取故障打印机的IP,那么我就修改该打印机的注册表信息,将它的一部分替换成事先设置好的备用打印机注册信息(这里有个难点.不知道有没有办法让注册表信息发生改变后直接生效,而不用重启系统;还有最重要的就是如果能直接生效,那些积压的打印任务能不能因此而转发给备用打印机呢)
….自己顶下..
31 Mar
WINDOWS我做一个与爱普生并口打印机的通信,打印号票,找不到好办法希望你能帮我解决一下。
1.我查了一些资料说WINIO类。看了一下,SETPORTVAL GETPORTVAL 发现是对硬件直接操作,什么高底电这样,不知道发一个字符串过去怎么调用这两个函数,引脚高底位的流程。然后取打印机状态。
2.还有就是用CRETEFILE 可以发送数据,但是用READFILE取打印机缺纸时就阻塞没有数据返回。
有没有直接操作并口打印机的方法??我想直接发打印数据过去(例如一个函数SENDDATE()),不操作并口25个针。因为我对这个不太熟习。
如果大家有什么类最好啦。
是并口打印机。
谢谢大家 邮箱wapjia@yahoo.com.cn
发错,上面是usb的了,这里是头文件
#ifndef _PRNPORT_H_VICTORCHEN_
#define _PRNPORT_H_VICTORCHEN_
/*————————————————————————-*\
| 直接控制打印口(并行口) |
| Copyright (C) Victor Chen |
| Homepage: http://www.cppfans.com/ |
\*————————————————————————-*/
#include <vcl.h>
//—————————————————————————
extern unsigned char (*inportb)(unsigned short);
extern unsigned short (*inportw)(unsigned short);
extern unsigned long (*inportd)(unsigned short);
extern void (*outportb)(unsigned short, unsigned char );
extern void (*outportw)(unsigned short, unsigned short);
extern void (*outportd)(unsigned short, unsigned long );
//—————————————————————————
class TWinIo
{
public:
__property bool IsValid = { read = fGetValid };
bool (_stdcall *InitializeWinIo)();
void (_stdcall *ShutdownWinIo)();
PBYTE (_stdcall *MapPhysToLin)(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
bool (_stdcall *UnmapPhysicalMemory)(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
bool (_stdcall *GetPhysLong)(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
bool (_stdcall *SetPhysLong)(PBYTE pbPhysAddr, DWORD dwPhysVal);
bool (_stdcall *GetPortVal)(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
bool (_stdcall *SetPortVal)(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
bool (_stdcall *InstallWinIoDriver)(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);
bool (_stdcall *RemoveWinIoDriver)();
bool LoadWinIo(char *lpFileName);
void FreeWinIo(void);
TWinIo(char *lpFileName);
~TWinIo();
private:
bool _bInitialized;
HINSTANCE hWinIo;
void InitPortFuncs(void);
bool fGetValid(void) {return hWinIo!=NULL;}
};
//—————————————————————————
// Parallel port class definition
//—————————————————————————
/*
打印口各引脚的定义:
1.选通, PC->Printer
2-9.数据(D0-D7)
10.应答(ACK),Printer->PC
11.忙(BUSY), Printer->PC
12.无纸(PE), Printer->PC
13.联机(SLCT), Printer->PC
14.自动换行(AUTO FD), PC->Printer
15.错误(ERROR), Printer->PC
16.初始化(INIT),PC->Printer
17.选择输出(SELECT IN), PC->Printer
18-25.地(GND)
*/
class TParallelPort
{
public:
int Send(unsigned char data) ;
//参数与标准 C 的 printf 相同, 返回值为错误码, 这个函数是从打印机输出数据
int printf(const char *format,…);
//参数与标准 C 的 vprintf 相同, 这个函数是从打印机输出数据
int vprintf(const char* format, va_list paramList);
//初始化打印机, 两个参数分别是初始化时间和初始化之后的延时(ms)
void InitPrinter(int iInitDelay=5000, int iInitWait=1000);
//并行口的数据 D0-D7, 可读写
__property unsigned char Data = { read=fGetData , write=fSetData };
//并行口的状态, 包括 ~BUSY, ACK, PE, ONLINE, ~ERROR 等, 这个属性是只读的
__property unsigned char Flag = { read=fGetFlag , write=fSetFlag };
//并行口的状态, 包括 ~INIT, AUTOFD, STORE 等, 这些属性是可写的。
__property unsigned char Ctrl = { read=fGetCtrl , write=fSetCtrl };
//并行口的开始地址, 默认值为 0×378
__property unsigned short Base = { read=_DataPort, write=fSetPort };
enum TPrnError
{
peNoError = 0,
peNotOnLine = -1,
peOutOfPaper = -2,
pePrinterErr = -3,
};
enum TPrnFlags
{
pfIdle = 0×80, //F7 = ~BUSY 1: idle 0 : busy
pfAck = 0×40, //F6 = ACK 1: ack 0 : no ack
pfPE = 0×20, //F5 = PE 1: paper out 0 : paper in
pfOnLine = 0×10, //F4 = ONLINE 1: select in 0 : not select
pfNoError = 0×08, //F3 = ~ERROR 1: no error 0 : error
};
enum TPrnCtrls
{
pcIRQE = 0×10, //C4
pcSelect = 0×08, //C3
pcFInit = 0×04, //C2 = ~INIT
pcAutoFD = 0×02, //C1
pcStore = 0×01, //C0 = STORE
};
//这个属性是控制打印的, 默认为 false, 如果这个属性为 true, 打印不会抛出异常, 而是返回错误码
__property bool NoException = { read = _bNoException, write = _bNoException };
//产生错误时会触发这个事件, 默认的处理是询问是否重试
__property bool __fastcall (__closure *OnMakeSure)(TPrnError ErrCode) = { read = _lpMakeSure, write = _lpMakeSure };
int PrintString(char *lpLine);
TParallelPort(unsigned short p=0×378);
unsigned char ReadStatus() ;
private:
inline unsigned char fGetData(void)
{
return inportb(_DataPort );
}
inline unsigned char fGetFlag(void)
{
return inportb(_StatusPort);
}
inline unsigned char fGetCtrl(void)
{
return inportb(_CtrlPort );
}
inline void fSetData(unsigned char d)
{
outportb(_DataPort , d);
}
inline void fSetFlag(unsigned char d)
{
outportb(_StatusPort, d);
}
inline void fSetCtrl(unsigned char d)
{
outportb(_CtrlPort , d);
}
void fSetPort(unsigned short p);
unsigned short _DataPort, _StatusPort, _CtrlPort;
bool _bNoException;
bool _fMakeSure(TPrnError ErrCode);
bool __fastcall (__closure *_lpMakeSure)(TPrnError ErrCode); //return retry;
};
//—————————————————————————
extern TWinIo WinIo;
extern TParallelPort ParallelPort;
//—————————————————————————
#endif
这里是实现部分
/*————————————————————————-*\
| 直接控制打印口(并行口) |
| Copyright (C) Victor Chen |
| Homepage: http://www.cppfans.com/ |
\*————————————————————————-*/
#include "PrnPort.h"
#include <vcl.h>
//—————————————————————————
TWinIo WinIo("WinIo.dll");
TParallelPort ParallelPort;
//—————————————————————————
unsigned char inportbNT(unsigned short p) { unsigned long v = 0; WinIo.GetPortVal(p, &v, 1); return v; }//{ asm mov dx, p; asm in al, dx; return _AL; }
unsigned short inportwNT(unsigned short p) { asm mov dx, p; asm in ax, dx; return _AX; }
unsigned long inportdNT(unsigned short p) { asm mov dx, p; asm in eax,dx; return _EAX;}
void outportbNT(unsigned short p, unsigned char v) { asm mov dx, p; asm mov al, v; asm out dx,al; }
void outportwNT(unsigned short p, unsigned short v) { asm mov dx, p; asm mov ax, v; asm out dx,ax; }
void outportdNT(unsigned short p, unsigned long v) { asm mov dx, p; asm mov eax,v; asm out dx,eax;}
//—————————————————————————
unsigned char inportb9x(unsigned short p) { unsigned long v = 0; WinIo.GetPortVal(p, &v, 1); return v; }
unsigned short inportw9x(unsigned short p) { unsigned long v = 0; WinIo.GetPortVal(p, &v, 2); return v; }
unsigned long inportd9x(unsigned short p) { unsigned long v = 0; WinIo.GetPortVal(p, &v, 4); return v; }
void outportb9x(unsigned short p, unsigned char v) { WinIo.SetPortVal(p,v,1); }
void outportw9x(unsigned short p, unsigned short v) { WinIo.SetPortVal(p,v,2); }
void outportd9x(unsigned short p, unsigned long v) { WinIo.SetPortVal(p,v,4); }
//—————————————————————————
unsigned char (*inportb)(unsigned short) = inportbNT;
unsigned short (*inportw)(unsigned short) = inportwNT;
unsigned long (*inportd)(unsigned short) = inportdNT;
void (*outportb)(unsigned short, unsigned char ) = outportbNT;
void (*outportw)(unsigned short, unsigned short) = outportwNT;
void (*outportd)(unsigned short, unsigned long ) = outportdNT;
//—————————————————————————
/////////////////////////////////////////////////////////////////////////////
//—————————————————————————
TWinIo::TWinIo(char *lpFileName)
{
hWinIo = NULL;
_bInitialized = false;
LoadWinIo(lpFileName);
}
//—————————————————————————
TWinIo::~TWinIo()
{
FreeWinIo();
}
//—————————————————————————
bool TWinIo::LoadWinIo(char *lpFileName)
{
if(!hWinIo)
{
if((hWinIo=LoadLibrary(lpFileName))!=NULL)
{
bool bOK = true;
if(((FARPROC)InitializeWinIo = GetProcAddress(hWinIo, "InitializeWinIo" ))==NULL)bOK=false;
if(((FARPROC)ShutdownWinIo = GetProcAddress(hWinIo, "ShutdownWinIo" ))==NULL)bOK=false;
if(((FARPROC)MapPhysToLin = GetProcAddress(hWinIo, "MapPhysToLin" ))==NULL)bOK=false;
if(((FARPROC)UnmapPhysicalMemory = GetProcAddress(hWinIo, "UnmapPhysicalMemory"))==NULL)bOK=false;
if(((FARPROC)GetPhysLong = GetProcAddress(hWinIo, "GetPhysLong" ))==NULL)bOK=false;
if(((FARPROC)SetPhysLong = GetProcAddress(hWinIo, "SetPhysLong" ))==NULL)bOK=false;
if(((FARPROC)GetPortVal = GetProcAddress(hWinIo, "GetPortVal" ))==NULL)bOK=false;
if(((FARPROC)SetPortVal = GetProcAddress(hWinIo, "SetPortVal" ))==NULL)bOK=false;
if(((FARPROC)InstallWinIoDriver = GetProcAddress(hWinIo, "InstallWinIoDriver" ))==NULL)bOK=false;
if(((FARPROC)RemoveWinIoDriver = GetProcAddress(hWinIo, "RemoveWinIoDriver" ))==NULL)bOK=false;
if(bOK)
{
_bInitialized = InitializeWinIo();
if(!_bInitialized)
bOK = false;
}
if(!bOK)FreeWinIo();
}
}
InitPortFuncs();
return IsValid;
}
//—————————————————————————
void TWinIo::FreeWinIo(void)
{
if(hWinIo)
{
if(_bInitialized)
{
ShutdownWinIo();
_bInitialized = false;
}
FreeLibrary(hWinIo);
hWinIo = NULL;
}
}
//—————————————————————————
void TWinIo::InitPortFuncs(void)
{
OSVERSIONINFO osVer = {sizeof(OSVERSIONINFO)};
GetVersionEx(&osVer);
if((osVer.dwPlatformId == VER_PLATFORM_WIN32_NT)||(!IsValid))
{
inportb = inportbNT; outportb = outportbNT;
inportw = inportwNT; outportw = outportwNT;
inportd = inportdNT; outportd = outportdNT;
}
else
{
inportb = inportb9x; outportb = outportb9x;
inportw = inportw9x; outportw = outportw9x;
inportd = inportd9x; outportd = outportd9x;
}
}
//***************************************************************************
//————————————————————————–*
// Parallel port class definition *
//————————————————————————–*
//***************************************************************************
TParallelPort::TParallelPort(unsigned short p)
{
fSetPort(p);
_lpMakeSure = NULL;
_bNoException = false;
};
//—————————————————————————
void TParallelPort::fSetPort(unsigned short p)
{
_DataPort = p; //dedault : 0×378
_StatusPort = p+1; //dedault : 0×379
_CtrlPort = p+2; //dedault : 0×37a
}
//—————————————————————————
bool TParallelPort::_fMakeSure(TPrnError ErrCode)
{
if(_lpMakeSure)
{
return _lpMakeSure(ErrCode);
}
else
{
AnsiString s;
switch(ErrCode)
{
case peOutOfPaper: s="打印机缺纸!"; break;
case peNotOnLine : s="打印机脱机!"; break;
default : s="打印机出错!"; break;
}
bool bRetry =
Application->MessageBox(L"s.c_str()",L"打印机错误",
MB_RETRYCANCEL|MB_ICONEXCLAMATION) == IDRETRY;
if ( (!bRetry) && (!_bNoException) )
{
//throw Exception(s);
}
return bRetry;
}
}
//—————————————————————————
int TParallelPort::printf(const char *format,…)
{
int rc;
va_list paramList;
va_start(paramList, format);
rc = vprintf(format, paramList);
va_end(paramList);
return rc;
}
//—————————————————————————
int TParallelPort::vprintf(const char* format, va_list paramList)
{
AnsiString s;
s.vprintf(format,paramList);
return PrintString(s.c_str());
}
//—————————————————————————
void TParallelPort::InitPrinter(int iInitDelay, int iInitWait)
{
Ctrl &= ~pcFInit;
Sleep(iInitDelay);
Ctrl |= pcFInit;
Sleep(iInitWait);
}
非常感谢你,我去试一下。。
我想问一下,我是XP BCB5
直接拿过去可以用不。。
asm mov dx不会有权限问题吧。。能加你QQ不我的43106140
感谢分享,顶一个.
解决啦非常好,网站不错,谢谢
31 Mar
在CSDN上下载了ehlib42 for bcb2009,但不知道如何安装,请高手指点.不胜感激.
在编译DclEhLibB2009.cbproj时,提示需要EhLibB2006.lib,EhLib4.3.21中没有这个文件,我选择了EhLib120.lib,编译到最近,提示[ILINK32 Error]Fatal:Unable to open file 'EHLIBB2009.BPI',再在菜单中用Component->Install Package时,找不到对应的bpl文件.请有安装成功的朋友,给出详细的安装说明,谢谢
重下一个试试
已经安装成功了,如果有遇到同样问题的朋友,可以联系我jerry_soft@126.com
楼上的,能告诉我吗:qq:42872272
楼上的,能告诉我吗:qq:42872272
我安装成功 已经加你QQ…
楼主能把方法说一下吗,先谢谢了
长时间没有上网了,还是把安装方法贴出来了,
下载EhLib后,解压放任一目录下,我一般是放在安装中,
1. Open project…,打开EhLibB2009.cbproj文件后,从菜单Project->Build all project,完成后, Close all.
2. Open project…,打开DclEhLibB2009.cbproj文件,同样Build all project,这时它会提示要选择EhLibB2006的文件(具体名称不记得了),这时可以到安装目录:D:\Software\Borland\BCB2009\RAD Studio\6.0\BPL,将里面的文件全部copy到EhLib目录中,应该就会有了(如果没有那么就会去另一个路径中:D:\Software\Borland\BCB2009\RAD Studio\6.0\Projects\Bpl,将下面的文件都copy到EhLib文件夹下,这二个文件路径下的文件都要copy后EhLib目录中,后面会用到),选择好,再勾选下面一个选择框,完成后,Close all~~
3. 从菜单中Component->Install Packages, Add..在EhLib目录中选择DclEhLibB2009.bpl
至此安装完成收工~~
总结得不错啊!!!
31 Mar
用BCB6开发一个ActiveForm控件,里面用了几个TESimageFM控件按钮,deploy以后,在发布的网页上按钮是死的,无法点击
这是什么原因啊,请教大家如何进行ActiveX开发
有没有人知道,这两天怎么就没人呢
创建的时候是不是需要消息支持?
对那个ESimageFM控件也不熟悉,如果添加消息支持的话?
你的意思是我要自己实现图片的切换??
也不熟悉,帮顶
谢谢楼上,自己再顶,
使这个问题太简单么?大家不想回答啊?
不懂,up
不懂,up
问题没解决,各位帮顶有分,谢谢
31 Mar
例如:有一个文本文件,App.txt,其文本内容如下:
1 1号电容器 9090 0 1 10000
2 1号主变 2032 0 1 -10000
3 2号电容器最大电压 3070 0 1 10000
如上所述3行的一个文本文件,CB5如何读取每行的值(去掉空格)?
TStringList* app = new TStringList(); TStringList* fields = new TStringList(); try { app->LoadFromFile("App.txt"); for (int i = 0; i < app->Count; ++i) { fields->CommaText = app->Strings[i]; //todo: fields->Strings[0..n] } } __finally { delete app; delete fields; }
非常感谢上面两位高手的指点,已经解决了,特别感谢shadowstar,代码简单易用!
31 Mar
比如说在execute函数里new 的query也是在这里open的,当然,可以在处理完数据库操作,完美的close掉,甚至是delete掉它。
可是,当程序直接close,该怎样close数据库呢?还有线程, 需要delete吗?貌似直接delete一个没有执行的线程,会卡死,如同newThread->waitfor(),它是等待线程结束后才返回。
高手帮我分析一下吧,
我有个form2是available,用的时候自己new
new,以及showmodal的时候,用try捕获了,
但好像在showmodal之后,delete form2的时候,内在出错,只报地址volation什么的,也没具体说是什么,
我只知道,我在form2里new了一个全局线程,这个线程处理数据库,当处理完的时候freeonterminated,自动释放,好像确实是处理完之后,关form2没事,
但在处理中,关掉form2内存出错,但是,又有另一种情况,就是在form2的onclose事件中,加个message,就是在关的时候,等待一下下,也不会内存报错,
而且,这个线程会继续执行下去,直到数据库处理完毕,这可以理解,因为该线程是个全局线程。当然不会随form2的释放而释放。
可为什么会内存出错呢?
_fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
QuerysCount = 0;
}
//—————————————————————————
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TQuery *qry = new TQuery(this);
Querys[QuerysCount++] = (long)(void*)qry;
qry->DatabaseName = "BCDEMOS";
qry->SQL->Text = "select * from animals";
this->DataSource1->DataSet = qry;
qry->Open();
}
//—————————————————————————
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
for(int i=QuerysCount; i>0; i–)
{
TQuery* qry = (TQuery*)(void*)Querys[QuerysCount-1];
qry->Close();
}
}