CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何动态定义CRecordSet的字段

楼主TangDL(软件流氓)2001-12-12 13:00:31 在 VC/MFC / 基础类 提问

无论在MFC还是在ATL中,CRecordSet(不一定这个名字吧)类的字段个数、类型都是事先定义的,请问如何在程序中动态创建这些东西。  
  我的目的是:用MFC或ATL创建一个CRecordSet的派生类(或者其它方式),传入不同的SQL语句,选出不同的字段(字段个数先后不同,字段类型先后不一致),供我操作,如何实现?请教了!  
  (ATL中我知将所用字段绑定为字符串,但如何对不同类型作处理呢?最好用MFC实现)  
  (希望提供例子代码) 问题点数:200、回复次数:11Top

1 楼TangDL(软件流氓)回复于 2001-12-12 13:03:08 得分 0

对了,不用ADO,虽然其操作方便,但太慢了Top

2 楼caigzhi(George Cai)回复于 2001-12-12 18:45:07 得分 0

胡说Top

3 楼caigzhi(George Cai)回复于 2001-12-12 18:53:00 得分 0

ado对个人的要求高一点,但是它是最灵活的,效率也高,  
  OLEDB就是建立在ADO的基础之上的Top

4 楼masterz(www.fruitfruit.com)回复于 2001-12-12 20:56:13 得分 30

http://codeguru.earthweb.com/mfc_database/generic_recordset.shtml  
  这篇文章是对CDaoRecordset扩充,你可以参考一下写出基于CRecordset的类Top

5 楼masterz(www.fruitfruit.com)回复于 2001-12-12 21:00:05 得分 30

DYNABIND:   Illustrates   Dynamic   Binding   of   Database   Columns   to   a   Recordset  
  MSDN   sampleTop

6 楼Tasehouny(阿甘)回复于 2001-12-12 21:14:16 得分 100

这个有一点点麻烦,我以前写过一个DBGrid,实现动态绑定,现在代码不知到哪里去了,我给你一个思路吧!  
   
  你传入一个SQL语句,然后打开这个记录集  
   
          sprintf(strsql,"select   *   from   _Nerve_Forum_Table   ");  
          lSet.Open(CRecordset::snapshot,strsql,CRecordset::readOnly);  
   
  你可以用short   filecount     =   lSet.GetODBCFieldCount()   获得字段的数目  
  CODBCFieldInfo&   fieldinfo   ;  
   
  for(int   i=0;i<fieldcount;i++)  
  {  
  lSet.GetODBCFieldInfo(i,fieldinfo);   //获得字段的类型和名称,自动绑定用到的信息可以从这里获得  
  }  
   
  知道字段的数目,字段的类型,字段的名称,就可按照记录数提取记录的内容了。如果你懒一点,你可以用CDBVariant   类型来代替所有字段的类型。  
  CDBVariant   t  
  int   nId;  
  lSet.GetFieldValue("id",t);  
  ASSERT(t.m_dwType==DBVT_LONG);  
  nId   =   t.m_lVal;  
  Item.nForumId   =   nId;  
   
  lSet.GetFieldValue("ParentId",t);  
  ASSERT(t.m_dwType==DBVT_LONG);  
  nId   =   t.m_lVal;  
  Item.nParentId   =   nId;  
   
  Top

7 楼wealth(wealth)回复于 2001-12-12 21:20:03 得分 10

TangDL:  
  数据库中其实各个字段的绑定系可以用代码进行,仲记唔记得记录结果集中的各个对象用法?  
  其实只要你熟悉结果集的对象,此问题就话甘快搞掂。  
  编程不要依靠人地的代码,世上最好的代码仲系要靠自己  
   
  我自己都曾经系呢个问题上搞了几个礼拜,希望你认真的去睇吓个结果集的对象用法。  
   
  广州的wealthTop

8 楼TangDL(软件流氓)回复于 2001-12-13 08:41:58 得分 0

To:caigzhi(caigzhi)  
          “胡说”一词不知何解,这儿这么多高手,对“OLEDB就是建立在ADO的基础之上的”应有正确的理解吧!ADO我用了3年了,只是这次想换个方式。  
   
  谢谢masterz、Tasehouny、wealth等,我将尽快尝试,一有结果,马上给分Top

9 楼TangDL(软件流氓)回复于 2001-12-14 12:46:34 得分 0

请教:  
          字段绑定的原理我倒是有了一点头绪,但对应字段的变量呢,怎么个定义法,我建了一个指针数组,感觉上有些别扭,有好方法吗?  
  Top

10 楼whool(喔)回复于 2001-12-14 13:22:32 得分 30

CDatabase   db;  
  CRecordSet   rt(&db);  
   
  db.Open();  
  CRecordSet.Open(   UINT   nOpenType   =   AFX_DB_USE_DEFAULT_TYPE,   LPCTSTR   lpszSQL   =   NULL,   DWORD   dwOptions   =   none   );  
   
  lpszSQL   A   string   pointer   containing   one   of   the   following:    
   
  1A   NULL   pointer.  
   
   
  2The   name   of   a   table.  
   
   
  3An   SQL   SELECT   statement   (optionally   with   an   SQL   WHERE   or   ORDER   BY   clause).    
   
   
  4A   CALL   statement   specifying   the   name   of   a   predefined   query   (stored   procedure).   Be   careful   that   you   do   not   insert   whitespace   between   the   curly   brace   and   the   CALL   keyword.  
  For   more   information   about   this   string,   see   the   table   and   the   discussion   of   ClassWizard’s   role   under   Remarks  
   
  Top

11 楼TangDL(软件流氓)回复于 2001-12-17 07:48:00 得分 0

谢了Top

相关问题

  • 如何动态创建数据表???(有关字段定义的)
  • 怎样在动态生成的access2000数据表中定义字符型字段可以为空,谢谢大家
  • 如何做动态报表?(要求可以自己定义打印几个字段),高分求思路,急拉~
  • 要求能够自定义字段和查询内容的动态报表要怎么做最容易呢???
  • 动态添加字段
  • 动态添加字段
  • 动态添加字段
  • 如何自定义报表的字段?
  • 自定义字段的解决方案
  • mysql的一个字段定义问题

关键词

  • 字段
  • mfc
  • ado
  • crecordset
  • 动态
  • 类型
  • 不同
  • 实现

得分解答快速导航

  • 帖主:TangDL
  • masterz
  • masterz
  • Tasehouny
  • wealth
  • whool

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo