BCB2010 DBX 的問題

勉励前行 2010-01-05 09:11:15
裝上了BCB2010 UP4 UP5

生成一個 SQLConnection , 正常連接,可是如下簡單代碼,發生故障:程序無法退出。即關閉程序後,程序依然駐留不能退出。如果有裝 2010的,請試一下,不知何原因,如何解決。


#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <SqlExpr.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

TSQLConnection *SQLConnection = NULL ;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
SQLConnection = new TSQLConnection(NULL);
SQLConnection->ConnectionName = "MSSQLConnection";
SQLConnection->DriverName = "MSSQL";
SQLConnection->GetDriverFunc = "getSQLDriverMSSQL";
SQLConnection->LibraryName = "dbxmss.dll" ;
SQLConnection->VendorLib = "sqlncli10.dll";
SQLConnection->LoadParamsOnConnect = false;
SQLConnection->KeepConnection = true ;
SQLConnection->LoginPrompt = false;
SQLConnection->Params->Text =
"DriverName=MSSQL"
"\nHostName="
"\nDataBase=MyDBS"
"\nBlobSize=-1"
"\nUser_Name="
"\nPassword="
"\nErrorResourceFile="
"\nLocaleCode=0000"
"\nMSSQL TransIsolation=ReadCommited"
"\nOS Authentication=True"
"\nPrepare SQL=False"
"\nMars_Connection=False"
"\nSchemaOverride=sa.dbo"
"\n";
SQLConnection->Connected = true ; //如果將這名注釋掉,程序可以正常退出。
}
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
delete SQLConnection ;
}
...全文
224 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
土著巫师 2010-02-10
  • 打赏
  • 举报
回复
  在窗体的构造函数里直接SQLConnection->Connected = true;从来没这么用过,建议在FormShow事件里PostMessage一个消息给本窗体,异步起动连接过程;另外不能直接delete SQLConnection;了事,要先SQLConnection->Connected = false;

  还有,如果没有特别原因建议建立一个数据模块,把需要用到的对象直接在设计时放在数据模块上面,以后可以分到多线程里处理,像你现在这样new 来new去的,还不如直接设计时放在窗体上。
PointertoPointer 2010-02-05
  • 打赏
  • 举报
回复
200分啊,不会也要进来顶顶
勉励前行 2010-01-23
  • 打赏
  • 举报
回复
因为是动态连接,不知道使用的是哪种数据库,按说将所有支持的数据库都静态链接上去也不为过。不过如果采用态连接的方式,应该是实际使用哪种数据库,就带上对应的DLL即可。

在B2007的时候,动态连接时不用#include所有的头文件的,只要配置正确,就能正常使用。在B2010中,也可以看到不#include对应头文件,也能使用,但不能正常退出,就郁闷了。

#include对应头文件,只是一种无奈的解决方法。不得不将所有支持的数据库类型均静态连接入程序中。动态配置带来的好处大打折扣。

我是从B2007升级上来的代码中发现这个问题的。
柯本 2010-01-22
  • 打赏
  • 举报
回复
我的TSQLConnection 只要在界面上加入,如果是连接SQLSERVER就会自动加入
#include <DBXMsSQL.hpp>
#include <SqlExpr.hpp>
如果是连接oracle就会自动加入
#include <DBXOracle.hpp>
你因为是动态创建的,所以也要手工加入相应的头文件,否则即使能编译运行也可能出错
这在bcb中是常见的
柯本 2010-01-22
  • 打赏
  • 举报
回复
单位里没环境,回家后试,先mark一下
如果加个头文件#include <DBXMsSQL.hpp>就能解决,也没什么大问题,EHLIB控件在连接数据库时也要针对不同的数据库用不同头文件,而且可同时加上几个以联多个数据库
gallardo 2010-01-21
  • 打赏
  • 举报
回复
问题应该出在 delete SQLConnection; 上,建议关闭连接后销毁,或者指定其父对象,由父对象负责它的销毁
TripH0101 2010-01-20
  • 打赏
  • 举报
回复
木用2010, 帮顶.
勉励前行 2010-01-07
  • 打赏
  • 举报
回复
今天再試,發現非要加上 #include <DBXMsSQL.hpp> 這個頭文件,才能正常退出。
不加上,也可正常編譯運行,正常連接使用,但是不能正常退出。

加上後得重新 Build 才行。哪位給出動態連接的代碼,即不用#include <DBXMsSQL.hpp>也可正常使用正常退出,加上這個頭文件,那不是把程序鎖死在 SQL Server 上了嗎。

如何正常切換鏈接到不同的數據庫MSSQL MYSQL ORACLE ? 總不能把所有的頭文件都加上吧。
我不懂电脑 2010-01-07
  • 打赏
  • 举报
回复
关闭一下SQLConnection看看
勉励前行 2010-01-06
  • 打赏
  • 举报
回复
試了下用拖拉控件的方式,只放一個 TSQLConnection 在Form上 , 設定適合參數,只要 SQLConnection->Connected = true ; 結果同樣無法正常退出。要用任務管理器強行中止才行。
ydlchina 2010-01-06
  • 打赏
  • 举报
回复
还没用到这么高的版本
hemiya 2010-01-06
  • 打赏
  • 举报
回复
没SQL Server,在盒子上看过相似的问题,建议安最新版的SQL Server.
DBX连mssql和mysql数据库的错误,与数据库的版本有一定关系.
一般都是安装相对应的数据库.好方法不清楚.
这两个数据库我都不用.
周药师 2010-01-05
  • 打赏
  • 举报
回复
SQLServer2008 要裝.net 3.5
由於XX原因 我的電腦不能安裝.net3.5
不能幫和樓主一起測試
只能幫頂
CACACACACA 2010-01-05
  • 打赏
  • 举报
回复
木用2010, 帮顶.
勉励前行 2010-01-05
  • 打赏
  • 举报
回复
"\nHostName="
"\nDataBase=MyDBS"
這兩句依據自己的實際情況,修改一下。我測試時連接的是本機的 SQL Server 2005 開發版,並裝上SQLServer2008的sqlncli.msi

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧