CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

赠送1000分可用分,寻求ALT OLE DB的问题解答

楼主pony_utc(天外来客)2002-04-21 17:55:08 在 VC/MFC / 基础类 提问

1.用ALT   OLE   DB访问ACCESS数据库,如何知道记录的某字段为空,如何设置该字段为空。  
  2.用ALT   OLE   DB访问ACCESS数据库,如何新建ACCESS数据库  
  3.用ALT   OLE   DB访问ACCESS数据库,如何使用除SELECT以外的SQL语句(比如Create   Table).  
  能提供范例更好!  
  我赶工程急用,希望各位大虾指教,我在此谢谢大家!!  
  问题点数:100、回复次数:11Top

1 楼pony_utc(天外来客)回复于 2002-04-21 17:59:03 得分 0

我的环境是Window98,VC6.0,用ACCESS97,Microsoft.Jet.OLEDB.3.51连接Top

2 楼Haiwer(海阔天空)回复于 2002-04-21 18:10:26 得分 5

1、对你的ALT不了解,但可以用SQL语句来区分:  
  where   colname   is   null  
   
                  update   ...   set   colname   =   null   ...  
   
  3、没用过VC的OLE   DB,但在VB里的用法不复杂,你看看VC的对应语句应该是什么。  
  con.execute   "Create   tabel   test(...)"  
  con.execute   "insert   into   test(a,b,c)   values('z',1,#2002-4-21#)"  
  con.execute   "update   testset   c=#2002-4-21#   where   a='a'"  
  等等。  
   
   
   
  Top

3 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-04-21 18:29:57 得分 10

#import   "c:\Program   Files\Common   Files\system\ado\msadox.dll"   no_namespace  
  #import   "c:\Program   Files\Common   Files\system\ado\msado15.dll"  
   
  #define   TESTHR(x)   if   FAILED(x)   _com_issue_error(x);  
   
  //------------------------------------------------------------                                                                               //  
  //CreateDatabaseX                                                  
  //Purpose:     create   a   new   Jet   database   with   the   Create   method  
  //------------------------------------------------------------                                                                               //  
  void   CreateDatabaseX()  
  {        
        HRESULT   hr   =   S_OK;  
   
        //   Define   ADOX   object   pointers.  
          //   Initialize   pointers   on   define.  
          //   These   are   in   the   ADOX::     namespace.  
         
        _CatalogPtr   m_pCatalog   =   NULL;  
   
         
        //Set   ActiveConnection   of   Catalog   to   this   string  
        _bstr_t   strcnn("Provider=Microsoft.JET.OLEDB.4.0;"  
                          "Data   source   =   c:\\new.mdb");  
        try  
        {  
              TESTHR(hr   =   m_pCatalog.CreateInstance(__uuidof   (Catalog)));  
              m_pCatalog->Create(strcnn);  
   
        }        
   
        catch(_com_error   &e)  
        {  
              //   Notify   the   user   of   errors   if   any.  
              _bstr_t   bstrSource(e.Source());  
              _bstr_t   bstrDescription(e.Description());  
                   
              printf("\n\tSource   :     %s   \n\tdescription   :   %s   \n   ",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);  
   
        }  
   
        catch(...)  
        {  
              cout   <<   "Error   occured   in   include   files...."<<   endl;  
        }  
   
  }  
  Top

4 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-04-21 18:32:32 得分 0

#import   "c:\Program   Files\Common   Files\system\ado\msadox.dll"   \  
          no_namespace  
   
  //Function   declarations  
  inline   void   TESTHR(HRESULT   x)   {if   FAILED(x)   _com_issue_error(x);};  
  //////////////////////////////////////////////////////////  
  //                                                                                                             //  
  //               CreateTableX   Function                                                     //  
  //                                                                                                             //  
  //////////////////////////////////////////////////////////  
  void   CreateTableX()  
  {  
                  HRESULT   hr   =   S_OK;  
   
                  //   Define   ADOX   object   pointers.  
                  //   Initialize   pointers   on   define.  
                  //   These   are   in   the   ADOX::     namespace.  
                  _CatalogPtr   m_pCatalog   =   NULL;  
                  _TablePtr   m_pTable   =   NULL;  
   
                  try  
                  {  
                          TESTHR(hr   =   m_pCatalog.CreateInstance(__uuidof(Catalog)));  
   
                          //Open   the   catalog  
                          m_pCatalog->PutActiveConnection(  
                                  "Provider=Microsoft.Jet.OLEDB.4.0;"   \  
                                  "data   source=c:\\Program   Files\\Microsoft   Office"  
                                  "\\Office\\Samples\\Northwind.mdb;");  
   
                          TESTHR(hr   =   m_pTable.CreateInstance(__uuidof(Table)));  
                          m_pTable->PutName("MyTable");  
                          m_pTable->Columns->Append("Column1",adInteger,0);  
                          m_pTable->Columns->Append("Column2",adInteger,0);  
                          m_pTable->Columns->Append("Column3",adVarWChar,50);  
                          m_pCatalog->Tables->Append(  
                                  _variant_t((IDispatch   *)m_pTable));  
   
                          //Delete   the   table  
                          m_pCatalog->Tables->Delete("MyTable");  
                  }  
   
          catch(_com_error   &e)  
          {  
                  //   Notify   the   user   of   errors   if   any.  
                  _bstr_t   bstrSource(e.Source());  
                  _bstr_t   bstrDescription(e.Description());  
   
                  printf("\n\tSource   :     %s   \n\tdescription   :   %s   \n   ",  
                          (LPCSTR)bstrSource,(LPCSTR)bstrDescription);  
          }  
   
          catch(...)  
          {  
                  cout   <<   "Error   occured   in   include   files...."<<   endl;  
          }  
  }  
  Top

5 楼Viper()回复于 2002-04-22 08:57:47 得分 0

gzerTop

6 楼biggo(biggo)回复于 2002-04-24 10:46:25 得分 20

呵,呵!  
  不错,居然还有人喜欢直接使用原生的OleDB  
  OleDB最大的优势,就是快,  
  我做个一个项目,  
  第一次做的时候用的是VC+OleDB访问数据库,  
  第二次做的时候是Delphi_ADO,  
  在程序的核心——处理数据部分速度上的感觉简直差了一个数量级。  
  你问我为什么第二次用的时候不用VC+OleDB了,  
  因为想贪图方便,把界面等做好点,也就只好牺牲速度了。  
  使用OleDB有两种方法,一种是真正的原生OleDB,不过这种方式,除非你是开发数据库引擎驱动驱动程序之类的,才建议采用,不然,这种方式的代码,简直可以用海量来形容。不好写。  
  第二种是采用MFC封装的OleDB类来写,我建议采用这种方式,我也是这么用的。  
  用它来开发程序,感觉和用ADO来开发差不多,但执行效率要高很多。  
  如果你要学,你的问题,不是三言两语就能说完的,建议你下载VC6的“模板库参考手册”那里面说的很清楚使用方法,全中文,文件大小12M多,华康格式的书,  
  用VC6你要装上sp5再用Oledb,sp4中Oledb有一个小问题。  
  你先研究这本书,然后在Msdn中间看看相关内容。不用多长时间能掌握的。  
   
  楼上的朋友用的其实是ADO,回答错了方向。  
  希望你成功。Top

7 楼pony_utc(天外来客)回复于 2002-04-25 08:37:32 得分 0

谢谢你!biggo!!你能告诉我如何建表呢?建库和判断空值的问题我都解决了。Top

8 楼biggo(biggo)回复于 2002-04-25 09:38:11 得分 50

建立一个CCommand对象  
  CCommand.open(session   ,   '你建表的指令',   &propset,   NULL,   DBGUID_DBSQL,   False)  
  propset是什么东西,如果你用Oledb就应该知道吧,不要我说了。  
  好象propset的位置写为Null就可以了,最后一个参数一定是False  
  时间长了,我有点记不清指令的写法。  
  如果你想判断空值,好象利用alt向导自动产生的数据绑定类型是做不到的。  
  因为它们有的是确定的数据类型,如int类型等,你可以手工改为Variant类型,Variant类型数据是可以判断空值的。  
  你自己尝试一下Top

9 楼pony_utc(天外来客)回复于 2002-04-25 10:07:08 得分 0

谢谢你,biggo!!Top

10 楼ezway(高手的零头★★★★☆)回复于 2002-04-25 11:02:13 得分 0

我很困惑的是:你是一级用户,怎么能赠送1000分可用分,  
  就是1分也没这个权限呀,,,,,,Top

11 楼blue_flash(蓝色闪电)回复于 2002-04-25 11:16:06 得分 15

会写存取器吗?  
  将  
  COLUMN_ENTER  
  改成  
  COLUMN_ENTRY_STATUS  
  将Status变量设置成   DBSTATUS_S_ISNULLTop

相关问题

  • 求动态报表生成源码,可用分全部赠送。
  • 有谁能给个解答啊?Delphi技巧问题!30大赠送!
  • 二维搜索问题。(高手快进!!!!如解答满意,500~1000分赠送)
  • JSP问题,高手进,48小时内结贴.高分赠送解答者
  • 求高手解答:TreeView子节点不可用的处理方法!高分相赠!
  • 请问如何恢复Ctrl+Alt+Del键为可用
  • 用VC或VB如何屏闭掉ctrl + alt + del 热启动键,急等解答
  • 谁做过分布式三层数据库系统开发,请进。100分赠送(解答更好还加分)急,谢谢。
  • 一个多线程问题,UP一次10分,回答有关20分,解答得好100分,我有7036可用分
  • 为什么大家都这么多分可以赠送,本人的可用分少得可怜啊,帮帮我啊!

关键词

  • 语句
  • 数据库
  • db
  • hr
  • access
  • source
  • program
  • microsoft
  • null
  • ptable

得分解答快速导航

  • 帖主:pony_utc
  • Haiwer
  • jiangsheng
  • biggo
  • biggo
  • blue_flash

相关链接

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

广告也精彩

反馈

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