数据库编程笔录之四
来源:互联网 发布:mac os 切换输入法 编辑:程序博客网 时间:2024/05/01 12:06
本篇想说一下如何获取记录集中各种类型的数值。比如数据库中定义的是varchar类型等,我们获取数据时该怎么写呢?这里我提供一些宏定义,大家只要在stdafx.h或者其它需要使用这些宏的地方插入这些语句,就可以很轻松的获取数据库中的数据了。与数据库是何种类型没有关系。
#define CREATEINSTANCE(sp,riid) {HRESULT _hr=sp.CreateInstance(__uuidof(riid));if(FAILED(_hr)) _com_issue_error(_hr);}
这是创建数据库连接,command和记录集对象使用的。可以这样调用:
CREATEINSTANCE(m_piConnection,Connection);
#define RsITEM(rs,x) rs->Fields->Item[_variant_t(x)]->Value
#define RsITEM_BSTR(rs,x) (RsITEM(rs,x).vt == VT_NULL)?CString(""):RsITEM(rs,x).bstrVal
#define RsITEM_DOUBLE(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).dblVal
#define RsITEM_LONG(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).lVal
#define RsITEM_BYTE(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).bVal
#define RsITEM_DATE(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).date
#define RsITEM_BOOL(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).boolVal
#define RsITEM_DECIMAL(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0.0:RsITEM(rs,x)
以上宏就是获取数据库中字符串,double型,整数,日期,布尔和numeric等类型的数据。
调用例程如下:
sShipInfo.sMMSIID = RsITEM_BSTR(piRecordset,"MMSI_ID");
sShipInfo.sCallSign = RsITEM_BSTR(piRecordset,"CALL_SIGN");
sShipInfo.sShipName = RsITEM_BSTR(piRecordset,"NAME");
sShipInfo.fCOG = RsITEM_DECIMAL(piRecordset,"COG");
sShipInfo.fSOG = RsITEM_DECIMAL(piRecordset,"SOG");
sShipInfo.wBreadth = RsITEM_LONG(piRecordset,"WIDTH");
sShipInfo.wLength = RsITEM_LONG(piRecordset,"LENGTH");
sShipInfo.latLong.dLatitude = RsITEM_DECIMAL(piRecordset,"LAT");
sShipInfo.latLong.dLongitude = RsITEM_DECIMAL(piRecordset,"LONG");
sShipInfo.reptTime = RsITEM_DATE(piRecordset,"REPT_TIME");
由于数据库调用并没有图例,所以没有图片可以贴出。
#define CREATEINSTANCE(sp,riid) {HRESULT _hr=sp.CreateInstance(__uuidof(riid));if(FAILED(_hr)) _com_issue_error(_hr);}
这是创建数据库连接,command和记录集对象使用的。可以这样调用:
CREATEINSTANCE(m_piConnection,Connection);
#define RsITEM(rs,x) rs->Fields->Item[_variant_t(x)]->Value
#define RsITEM_BSTR(rs,x) (RsITEM(rs,x).vt == VT_NULL)?CString(""):RsITEM(rs,x).bstrVal
#define RsITEM_DOUBLE(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).dblVal
#define RsITEM_LONG(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).lVal
#define RsITEM_BYTE(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).bVal
#define RsITEM_DATE(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).date
#define RsITEM_BOOL(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).boolVal
#define RsITEM_DECIMAL(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0.0:RsITEM(rs,x)
以上宏就是获取数据库中字符串,double型,整数,日期,布尔和numeric等类型的数据。
调用例程如下:
sShipInfo.sMMSIID = RsITEM_BSTR(piRecordset,"MMSI_ID");
sShipInfo.sCallSign = RsITEM_BSTR(piRecordset,"CALL_SIGN");
sShipInfo.sShipName = RsITEM_BSTR(piRecordset,"NAME");
sShipInfo.fCOG = RsITEM_DECIMAL(piRecordset,"COG");
sShipInfo.fSOG = RsITEM_DECIMAL(piRecordset,"SOG");
sShipInfo.wBreadth = RsITEM_LONG(piRecordset,"WIDTH");
sShipInfo.wLength = RsITEM_LONG(piRecordset,"LENGTH");
sShipInfo.latLong.dLatitude = RsITEM_DECIMAL(piRecordset,"LAT");
sShipInfo.latLong.dLongitude = RsITEM_DECIMAL(piRecordset,"LONG");
sShipInfo.reptTime = RsITEM_DATE(piRecordset,"REPT_TIME");
由于数据库调用并没有图例,所以没有图片可以贴出。
- 数据库编程笔录之四
- 数据库编程笔录之四
- 数据库编程笔录之二
- 数据库编程笔录之三
- 数据库编程笔录之二
- 数据库编程笔录之三
- 数据库编程笔录之二
- 数据库编程笔录之一
- 数据库编程笔录之一
- 数据库编程笔录之一
- 数据库编程笔录之一
- java2核心技术之数据库编程笔录(一)
- Object-C学习笔录(四)多线程编程
- 数据库学习笔录
- ADO编程笔录
- OPenGL笔录之顶点笔录glVertex*
- Lua编程笔录--Lua初识及语法四(数组,迭代器,table表)
- 多线程编程之四
- Linux V2.2.X(i386体系结构)进程管理分析及 最大进程数的限制的突破
- 李开复给中国学生的第一封信--从诚信谈起
- 数据库编程笔录之一
- 如何用正确的方法来写出质量好的软件的75条体会
- 数据库编程笔录之二
- 数据库编程笔录之四
- ACCESS中使用SQL语句应注意的地方及几点技巧
- 中国(江门)侨乡华人嘉年华暨2004中国(江门)侨乡旅游节
- 李开复给中国学生的第二封信:从优秀到卓越
- 观音度
- funny.exe病毒,让我受骂
- 实现游戏中的文字滚屏功能
- gmail 乱码解决方案
- 实现游戏中的简单打字功能