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

openschema方法如何得到数据库的约束信息(在线等!!)

楼主zhaohanboy()2003-12-02 13:58:41 在 VC/MFC / 数据库 提问

各位高手,小弟最近在工作中需要完成这样的操作:  
  提取数据库中某个表的模式信息,如主键、外键、以及字段的约束(唯一性、是否可为空等),恳请各位高手指教!!希望有程序可以参考!! 问题点数:100、回复次数:8Top

1 楼zhaohanboy()回复于 2003-12-02 15:56:08 得分 0

高手都去哪里了呀!?Top

2 楼zhaohanboy()回复于 2003-12-02 17:19:16 得分 0

有没有人在呀????????Top

3 楼spwnihao(╭∩╮(︶⌒︶)╭∩╮鄙视一切)回复于 2003-12-02 17:33:44 得分 0

http://expert.csdn.net/Expert/topic/2322/2322190.xml?temp=.9734461  
  参考一下吧Top

4 楼zhaohanboy()回复于 2003-12-13 15:37:22 得分 0

好像不一样的!!!!!!!!Top

5 楼zhaohanboy()回复于 2003-12-13 15:37:45 得分 0

分不够可以加!!有人吗???Top

6 楼AkiraChing(水银)回复于 2003-12-13 21:41:10 得分 100

主键约束  
                    _bstr_t   bstrConn="Provider=sqloledb;Data   Source=(local);"  
  "Initial   Catalog=pubs;"  
  "User   Id=sa;Password=akira;";  
   
  _ConnectionPtr   pConnection=NULL;  
  _RecordsetPtr   pRstSchema=NULL;  
   
  SAFEARRAY   FAR*   psa   =   NULL;  
  SAFEARRAYBOUND   rgsabound;  
  _variant_t     var;  
  _variant_t     Array;  
  rgsabound.lLbound   =   0;  
  rgsabound.cElements   =   3;  
  psa   =   SafeArrayCreate(VT_VARIANT,   1,   &rgsabound);  
  var.vt   =   VT_EMPTY;  
  long   ix;  
  //PK_TABLE_CATALOG  
  ix   =   0;  
  SafeArrayPutElement(psa,   &ix,   &var);  
  //PK_TABLE_SCHEMA  
  ix=1;  
  SafeArrayPutElement(psa,   &ix,   &var);  
  //PK_TABLE_NAME  
  ix=2;  
  var.vt=VT_BSTR;  
  var.bstrVal=_bstr_t("authors");//表名  
  SafeArrayPutElement(psa,   &ix,   &var);  
   
  Array.vt   =   VT_ARRAY|VT_VARIANT;  
  Array.parray   =   psa;    
   
  try  
  {  
  pConnection.CreateInstance(__uuidof(Connection));  
   
  pConnection->Open(bstrConn,"","",adConnectUnspecified);  
  pRstSchema   =   pConnection->OpenSchema(adSchemaPrimaryKeys,&Array);  
   
  _bstr_t   column_name=pRstSchema->GetFields()->GetItem("COLUMN_NAME")->Value;  
  _bstr_t   primarykey_name=pRstSchema->GetFields()->GetItem("PK_NAME")->Value;  
  CString   strMsg;  
  strMsg.Format("column_name:%s\nprimary   key   name:%s",(LPCTSTR)column_name,(LPCTSTR)primarykey_name);  
  AfxMessageBox(strMsg);  
   
  }  
  catch   (_com_error   e)  
  {  
  PrintComError(e);  
  }  
   
   
  if(pRstSchema->State==adStateOpen)  
  pRstSchema->Close();  
  if(pConnection->State==adStateOpen)  
  pConnection->Close();Top

7 楼AkiraChing(水银)回复于 2003-12-13 21:53:00 得分 0

获得主键约束和外键约束的信息,  
   
  ...  
  SAFEARRAY   FAR*   psa   =   NULL;  
  SAFEARRAYBOUND   rgsabound;  
  _variant_t     var;  
  _variant_t     Array;  
  rgsabound.lLbound   =   0;  
  rgsabound.cElements   =   6;  
  psa   =   SafeArrayCreate(VT_VARIANT,   1,   &rgsabound);  
  var.vt   =   VT_EMPTY;  
  long   ix;  
  //PK_TABLE_CATALOG  
  ix   =   0;  
  SafeArrayPutElement(psa,   &ix,   &var);  
  //PK_TABLE_SCHEMA  
  ix=1;  
  SafeArrayPutElement(psa,   &ix,   &var);  
  //PK_TABLE_NAME  
  ix=2;  
  var.vt=VT_BSTR;  
  var.bstrVal=_bstr_t("authors");//表名  
  SafeArrayPutElement(psa,   &ix,   &var);  
  //FK_TABLE_CATALOG  
  var.vt=VT_EMPTY;  
  ix=3;  
  SafeArrayPutElement(psa,   &ix,   &var);  
  //FK_TABLE_SCHEMA  
  ix=4;  
  SafeArrayPutElement(psa,   &ix,   &var);  
  //FK_TABLE_NAME  
  ix=5;  
  SafeArrayPutElement(psa,   &ix,   &var);  
  Array.vt   =   VT_ARRAY|VT_VARIANT;  
  Array.parray   =   psa;    
   
   
   
  try  
  {  
  pConnection.CreateInstance(__uuidof(Connection));  
   
  pConnection->Open(bstrConn,"","",adConnectUnspecified);  
  pRstSchema   =   pConnection->OpenSchema(adSchemaForeignKeys,&Array);  
   
  _bstr_t   pk_column_name=pRstSchema->GetFields()->GetItem("PK_COLUMN_NAME")->Value;  
  _bstr_t   pk_name=pRstSchema->GetFields()->GetItem("PK_NAME")->Value;  
  _bstr_t   fk_table_name=pRstSchema->GetFields()->GetItem("FK_TABLE_NAME")->Value;  
  _bstr_t   fk_column_name=pRstSchema->GetFields()->GetItem("FK_COLUMN_NAME")->Value;  
  _bstr_t   fk_name=pRstSchema->GetFields()->GetItem("FK_NAME")->Value;  
  CString   strMsg;  
  strMsg.Format("pk_column_name:%s\npk_name:%s\nfk_table_name:%s\nfk_column_name:%s\nfk_name:%s",  
  (LPCTSTR)pk_column_name,  
  (LPCTSTR)pk_name,  
  (LPCTSTR)fk_table_name,  
  (LPCTSTR)fk_column_name,  
  (LPCTSTR)fk_name);  
  AfxMessageBox(strMsg);  
   
  }  
  catch   (_com_error   e)  
  {  
  PrintComError(e);  
  }  
   
  ....Top

8 楼AkiraChing(水银)回复于 2003-12-13 22:03:17 得分 0

其它的类似,可以用adSchemaColumns获取是否允许空以及是否是默认值  
  adSchemaTableConstraints可以得到表的每个约束信息,  
  Top

相关问题

  • 用什么方法可以显示出当前数据库中的所有约束?
  • 一个数据库约束的问题
  • delphi数据库中的约束条件
  • delphi数据库表的约束问题
  • 如何设计数据库约束?
  • 数据库列的约束问题
  • Delphi数据库控件使用方法
  • 用CB解决.dbf数据库方法
  • 征求数据库访问方法?
  • 关于数据库的连接方法

关键词

  • null
  • psa
  • prstschema
  • rgsabound
  • vt
  • safearrayputelement
  • pconnection
  • ix
  • bstr
  • variant

得分解答快速导航

  • 帖主:zhaohanboy
  • AkiraChing

相关链接

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

广告也精彩

反馈

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