SQLite在C++ Builder里怎么用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLite在C++ Builder里怎么用相关的知识,希望对你有一定的参考价值。
C++/C++builder中调用的方法都是一样的不需要任何组件,可以很方便的调用,,1.在C++builder中 你要用implib 吧sqlite3.lib转换成C++builder可以用的库。
然后包含sqlite3.h头文件在文件目录下面放进去sqlite3.dll和sqlite3.lib
然后在程序中 import comment(lib,“sqlite3.lib”)就可以用了。
2.C++中的用法也是这样的。问价不需要转码, 但是要包含头文件。然后要sqlite3.dll
和sqlite3.lib,然后在程序下面import comment(lib,“sqlite3.lib”),也可以用了。
具体用法是,先用_sqlite3_open(),函数打开数据库文件,
然后执行数据库命令_sqlite3_exec();
要获取数据集的话用sqlite3_get_table()获取数据集合,
不过获取的都是字符串,你要自己选好位置,或者你可以写一个结构体,
像dataSet一样 参考技术A PC上可以先将操作缓存到内存里哦。
频繁进行增删改的话,建议使用事务处理(transaction),将操作先缓存到内存里,以减少数据库文件打开关闭次数,提升效率:
rc = sqlite3_exec(db, "BEGIN;", 0, 0, &zErrMsg);
//执行SQL语句
rc = sqlite3_exec(db, "COMMIT;", 0, 0, &zErrMsg);本回答被提问者采纳 参考技术B 把sqlite3加入项目中,include 后就可以使用了,项目目录下要带上sqlite3.dll。
如果把sqlite3.c 也加入项目中话,就不依赖sqlite3.dll了,发布时可以不带上dll,
当然编译出来的exe会比较大。
余下的就按照你搜到的那些资料照着做吧。顺带一提的是sqlite的数据库扩展名可以自己定义,通常用.db3或.db,也可以不指定扩展名。再一个需要注意的是utf8的转换。
如果不带sqlite3.c 则是要用到sqlite3.lib
做个示例给你瞅瞅(别照抄,看懂用法自己改一下),
压缩包里带上了转换好cb专用的sqlite3_for_bcb.lib
import comment (lib,"sqlite3_for_bcb.lib") 就行了
不过示例中不使用lib和dll,直接把sqlite3.c编译进去项目了
http://pan.baidu.com/s/1ntseyxj
// 打开数据库
// #define SQLITE_DB_PATH "XX数据库.db"
// sqlite3* sl3 = NULL;
result = sqlite3_open(SQLITE_DB_PATH,&sl3);
// 执行查询
// LoadDb是个回调函数,组织数据的逻辑放在回调函数里
// _sql 是sql语句
// srrMsg 是错误信息(如果无错则为空)
result = sqlite3_exec(sl3, _sql, LoadDb, NULL, &errMsg);
就那么简单,cb里用sqlite感觉比vc还方便,不用配置,c代码也能直接编译
Borland C++ Builder 中的 Windows 子类化
【中文标题】Borland C++ Builder 中的 Windows 子类化【英文标题】:Windows Subclassing in Borland C++ Builder 【发布时间】:2009-02-09 10:55:04 【问题描述】:我们正在尝试将一段使用 CWnd.SubclassWindow 方法在 MFC 中编写的 C++ 代码转换为 Borland C++ Builder 代码。有谁知道如何进行子类化(使用 TForm 对象进行子类化) - 我们完全陷入困境。任何指针将不胜感激!蒂亚!
具体说明:
我们有一个现有的用 Borland C++ 编写的基类,它继承自 TForm,它用于为从它继承的所有表单赋予某种外观和感觉(例如,它处理 WM_NCPAINT 和 WM_NCHITTESTheavily)。
现在我们想使用此代码为用其他语言(确切地说是 MSVC++/MFC 和 C#)编写的表单提供相同的外观和感觉。
我们认为使用 Windows 子类化将是一个好主意,而不是重写所有代码。然后我们可以将所有现有的和经过测试的代码填充到一个 DLL 中,然后只需使用 hWnd 调用它,该窗口就会自动获得新的外观和感觉。
究竟为什么这是不可能的,我真的不能说——我自己不使用 Borland C++ 编写代码。我只用了几分钟就在 MFC 中编写了一个存根,向 Borland C++ 开发人员展示了我想要什么,他们花了几天时间试图模仿 MFC 的 CWnd::SubclassWindow 方法,但没有成功。
据我了解,问题在于当您执行“new TForm()”时,会在您有机会停止之前自动创建一个新窗口。所以替换然后 WindowProc works 但是一个不需要的 TForm 窗口在屏幕上浮动,没有用!!!!
【问题讨论】:
你真的是指 Borland 必须在 10 多年前停止销售和支持的 OWL 吗? 嗯,我以为它被称为... MFC中的代码行... 【参考方案1】:我假设你的意思是 VCL。您可以将 TControl 对象的 WindowProc 属性设置为您自己的窗口过程或其他控件的 WindowProc。
编辑:更多答案,基于更多细节
为防止new TForm
创建一个窗口在屏幕上无用地浮动,您只需要将其 Visible 属性设置为 false。或者,您可以覆盖 CreateParams 以从窗口中删除 WS_VISIBLE 样式:
void __fastcall TBlahForm::CreateParams(TCreateParams &Params)
TForm::CreateParams(Params);
Params.Style&=~WS_VISIBLE;
//---------------------------------------------------------------------------
仍然会创建一个不可见的窗口,但据我了解用例,这应该没什么大不了的。
覆盖TCustomForm::CreateWnd
可能是解决相同问题的另一种方法。
我的另一个建议是将代码从 BCB 移植到 VC++。如果它对WM_NCPAINT
和WM_NCHITTEST
进行了很多处理,那么其中包含大量VCL 特定的东西听起来不太可能——它可能只是直接敲击Win32 API?如果里面没有任何 VCL,那么在 VC++ 中编译应该可以神奇地工作。
无论如何:这几乎肯定是可能的。我有一个用 BCB5(早于 WinXP)构建的应用程序,通过巧妙地使用窗口挂钩、子类化等(其中大部分不是我自己的)仍然非常乐意处理 XP 甚至 Aero(这不是说维护并不痛苦)。如果这是可能的,你的应用程序当然应该是。 VCL 遵循与 MFC 不同的范式,但它仍然很灵活。
【讨论】:
我无法将我的答案塞进 300 个字符的评论中,所以我编辑了原来的问题! 非常感谢您的回答!!!但是,我查看了代码并重新编译到 MSVC++ 是我真正想要避免的事情。除此之外,它还有将近100个小位图资源,恐怕我必须手动添加。 叹息【参考方案2】:查看Codegear Online Docs,它描述了用于子类化的 WindowProc 机制。
C++Builder 使用底层的 Delphi VCL,因此搜索“Delphi Window subclassing”将比试图找到专门的 C++ 更富有成效。 C++Builder 程序员必须至少能够阅读 Delphi 代码,即使他们不必编写任何代码!
【讨论】:
寻找 Delphi 示例听起来不错,谢谢! :-) (你发给我的例子恐怕不适用,因为我想子类化一个已经由另一个应用程序创建的窗口,尽管在同一个进程中)。以上是关于SQLite在C++ Builder里怎么用的主要内容,如果未能解决你的问题,请参考以下文章
怎么查看用C++ builder编写的程序都调用了哪些dll文件,谢谢!
oracle forms builder里SET_BLOCK_PROPERY是干啥用的?怎么用