CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  数据库

难题!!!搜索十个access数据库中的所有文本或备注类型的字段,看其中是否有"主题"两字.....

楼主vicallee(^^一壶红酒杯十年^^)2004-09-01 22:56:37 在 VC/MFC / 数据库 提问

这十个数据库名称分别为c:\1.mdb,c:\2.mdb,...,c:\10.mdb;密码均为0000  
  如果发现有这两个字,就把它替换成为"文章"并保存之...  
  并把修改的情况列到一多行文本框中显示.  
  显示格式如:  
  数据库1.mdb中的表a中的x字段原为...,其中需要修改部分已作修改.  
  ....  
   
  有没有高手能够做到?  
  问题点数:0、回复次数:6Top

1 楼vicallee(^^一壶红酒杯十年^^)回复于 2004-09-01 23:02:22 得分 0

如果做不到的话,问题可以简化为对一个数据库下的所有表的文本和备注字段作搜索.不过我想这个问题其实跟多个表差不多难度啦.Top

2 楼FlyNesta(菜菜的N次方)回复于 2004-09-02 00:17:52 得分 0

和呵,一个比较笨的办法:  
   
  1.先逐个表的修改。  
  2.从每个表中用select   *   from   表名,找到所有的字段,用ado中的_RecordsetPtr记录集可以取道每个字段的类型(枚举值),好像202是文本类型,203是备注类型。  
  3.将所有为文本、备注类型的字段的名称记录下来,在从表中取出这些字段的具体值,将其中含“主题”的字段值改为“文章”。  
  4.循环的对所有的库进行以上操作。Top

3 楼vicallee(^^一壶红酒杯十年^^)回复于 2004-09-02 09:14:49 得分 0

我的想法是这样的,用ADO动态连接x.mdb(最外层循环),通过某种方式取得ADO连接数据库的TABLE列表,对每个表先select   top   1   *   from   表,先取得文本类型和备注类型的字段列表放至string   astrlist[],再select   *   from   表   where   astrlist[x]='%文章%'   or   astrlist[x+1]='%文章%'.....  
  一有记录返回就再行操作...  
   
  现在最大的问题是怎么取得ADO连接数据库的TABLE列表,其它都可以解决.Top

4 楼bohut(●伯虎● )回复于 2004-09-02 09:18:27 得分 0

ado      
     
     
  void     CdbToolsDlg::GetDatabaseSchema(_ConnectionPtr     pConnection,     _bstr_t*     bstrTableNames,     int*     nTableCount,     _bstr_t     bstrFilter)      
  {      
                        ASSERT(pConnection->State==adStateOpen);      
                        _RecordsetPtr         pRstSchema         =     NULL;      
     
                        SAFEARRAY     FAR*     psa     =     NULL;      
                        SAFEARRAYBOUND     rgsabound;      
                        _variant_t         var;      
                        _variant_t         Array;      
                        rgsabound.lLbound     =     0;      
                        rgsabound.cElements     =     4;      
                        psa     =     SafeArrayCreate(VT_VARIANT,     1,     &rgsabound);      
                        var.vt     =     VT_EMPTY;      
                        long     ix;      
                        ix     =     0;      
                        SafeArrayPutElement(psa,     &ix,     &var);      
     
                        ix=     1;      
                        SafeArrayPutElement(psa,     &ix,     &var);      
     
                        ix     =     2;      
                        SafeArrayPutElement(psa,     &ix,     &var);      
     
                        var.vt     =     VT_BSTR;      
  //表的类型有"ALIAS""TABLE""SYNONYM""SYSTEM     TABLE"      
  "VIEW""GLOBAL     TEMPORARY""LOCAL     TEMPORARY""SYSTEM     VIEW"      
  var.bstrVal     =     bstrFilter;//这里bstrFilter="TABLE"就可以了      
     
                        ix     =     3;      
                        SafeArrayPutElement(psa,     &ix,     &var);      
                             
                        var.vt=VT_EMPTY;      
                        Array.vt     =     VT_ARRAY     |VT_VARIANT;      
                        Array.parray     =     psa;          
     
                        try      
                        {      
                                                pRstSchema     =     pConnection->OpenSchema(adSchemaTables,&Array);      
     
                                                *nTableCount=0;      
                                                while(!(pRstSchema->EndOfFile))      
                                                {      
                                                                        if(bstrTableNames!=NULL)      
                                                                        {      
                                                                                                _bstr_t     table_name     =     pRstSchema->Fields->      
                                                                                                                        GetItem("TABLE_NAME")->Value;      
                                                                                                *(bstrTableNames++)=table_name;      
                                                                        }      
                                                                        *nTableCount+=1;      
                                                                        pRstSchema->MoveNext();      
                                                }      
                        }      
                        catch     (_com_error     e)     {      
                                                PrintComError(e);      
                        }      
     
                        if(pRstSchema)      
                                                if     (pRstSchema->State     ==     adStateOpen)      
                                                                        pRstSchema->Close();      
  }Top

5 楼hahu(神仙?妖怪?谢谢!)回复于 2004-09-02 10:19:52 得分 0

上面只是遍历了所有表  
   
  还需要遍历所有字段,获取字符类型字段才行  
  可以通过判断m_pField->Type是否字符类型,来确定是否需要选出来  
  select   *   from   field1,field2..   where   field1   like   '%xx%'   or   field2   like   '%xx%'...  
   
  遍历字段可以参考  
  http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=196279  
  字段的类型  
  enum   DataTypeEnum  
  {  
          adEmpty   =   0,  
          adTinyInt   =   16,  
          adSmallInt   =   2,  
          adInteger   =   3,  
          adBigInt   =   20,  
          adUnsignedTinyInt   =   17,  
          adUnsignedSmallInt   =   18,  
          adUnsignedInt   =   19,  
          adUnsignedBigInt   =   21,  
          adSingle   =   4,  
          adDouble   =   5,  
          adCurrency   =   6,  
          adDecimal   =   14,  
          adNumeric   =   131,  
          adBoolean   =   11,  
          adError   =   10,  
          adUserDefined   =   132,  
          adVariant   =   12,  
          adIDispatch   =   9,  
          adIUnknown   =   13,  
          adGUID   =   72,  
          adDate   =   7,  
          adDBDate   =   133,  
          adDBTime   =   134,  
          adDBTimeStamp   =   135,  
          adBSTR   =   8,  
          adChar   =   129,  
          adVarChar   =   200,  
          adLongVarChar   =   201,  
          adWChar   =   130,  
          adVarWChar   =   202,  
          adLongVarWChar   =   203,  
          adBinary   =   128,  
          adVarBinary   =   204,  
          adLongVarBinary   =   205,  
          adChapter   =   136,  
          adFileTime   =   64,  
          adPropVariant   =   138,  
          adVarNumeric   =   139,  
          adArray   =   8192  
  };  
  Top

6 楼vicallee(^^一壶红酒杯十年^^)回复于 2004-09-02 16:00:00 得分 0

牛人!俺会研究的.Top

相关问题

  • 如何获得SQL数据库中备注字段的内容?
  • 数据库是怎么实现备注字段的修改的?
  • dbGrid显示不了Access数据库的备注字段
  • 用Dao提取数据库文本字段内容的问题
  • ADO数据库操作时,如何清空文本字段?
  • 关于截取文本文件字段到数据库中
  • 如何写100K的文本文件到数据库字段中
  • 怎样读出ACESS数据库里面的表字段的类型、字段长度、字段备注内容?
  • 数据库中有个备注型字段,请问怎么加到QuickRep中去?
  • Access 数据库中的“备注”型字段在 ADO 中是什么类型?

关键词

  • 字段
  • 数据库
  • 文本
  • 修改
  • ado
  • 连接
  • 备注
  • 类型
  • astrlist
  • ix

得分解答快速导航

  • 帖主:vicallee

相关链接

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

广告也精彩

反馈

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