紧急求救,关于用AdoX创建主键的问题。

Wen_Wen__Zi 2006-07-03 04:11:09
由于使用ADO(非DotNet)时涉及大量的try语句和指针创建问题,小弟近日努力尝试自己包装一个具有基本功能的数据库类。
在编写一个根据现有的table在新文件创建一个完全相同的table的函数时遇到了问题:

调用_TablePtr::Keys::Append( const _variant_t & Item, enum KeyTypeEnum Type, const _variant_t & Column, _bstr_t RelatedTable, _bstr_t RelatedColumn )这个方法时,第一个参数Item只可以用_bstr_t传递字符串,当赋以一个转换为(_variant_t)(IDispatch *)的_KeysPtr对象会发生异常。
这样的话我就只可以创建以类型为_bstr_t的第三个参数Column为列名的主键,无法创建由多列构成的主键。
微软关于ADOX的帮助内容如下:

语法
Keys.Append Key [, KeyType] [, Column] [, RelatedTable] [, RelatedColumn]
参数
Key
要追加的 Key 对象或要创建并追加的键的名称。
KeyType
可选。Long 值,指定键的类型。Key 参数对应于 Key 对象 Type 属性。
Column
可选。String 值,指定要索引的列的名称。Columns 参数对应于 Column 对象的 Name 属性的值。
RelatedTable
可选。String 值,指定相关表的名称。RelatedTable 参数对应于 Table 对象的 Name 属性的值。
RelatedColumn
可选。String 值,指定外键的相关列的名称。RelatedColumn 参数对应于 Column 对象的 Name 属性的值。
说明
Columns 参数可使用列名或列名的数组。

由上述说明可见,key应可为键名或Key对象,这也在微软提供的VB代码中得到证明:' BeginCreateKeyVB
Sub Main()
On Error GoTo CreateKeyError

Dim kyForeign As New ADOX.Key
Dim cat As New ADOX.Catalog

' Connect the catalog
cat.ActiveConnection = "Provider='Microsoft.Jet.OLEDB.4.0';" & _
"Data Source='c:\Program Files\Microsoft Office\" & _
"Office\Samples\Northwind.mdb';"

' Define the foreign key
kyForeign.Name = "CustOrder"
kyForeign.Type = adKeyForeign
kyForeign.RelatedTable = "Customers"
kyForeign.Columns.Append "CustomerId"
kyForeign.Columns("CustomerId").RelatedColumn = "CustomerId"
kyForeign.UpdateRule = adRICascade

' Append the foreign key
cat.Tables("Orders").Keys.Append kyForeign

'Delete the Key as this is a demonstration
cat.Tables("Orders").Keys.Delete kyForeign.Name

'Clean up
Set cat.ActiveConnection = Nothing
Set cat = Nothing
Set kyForeign = Nothing
Exit Sub

CreateKeyError:
Set cat = Nothing
Set kyForeign = Nothing

If Err <> 0 Then
MsgBox Err.Source & "-->" & Err.Description, , "Error"
End If

End Sub
' EndCreateKeyVB

但是在VC中我却无法找到方法作相同的实现,而帮助最后提到的“Columns 参数可使用列名或列名的数组”则更令我奇怪,如何用_variant_t包含文字数组?望各位高手不吝赐教。
...全文
248 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
changechange 2006-07-08
  • 打赏
  • 举报
回复
已经明确说明了,

VC 中一样调用 JET SQL 和 ADO ADOX 的,你知道对象和属性自己去操作就行了

关于此主题请参考以下文章(不要只看标题,请认真仔细地察看上述文章以及相关的评论):
新手来看:Access的特点、概念。什么是纯 ACCESS 环境?《其他》
http://access911.net/index.asp?u1=a&u2=79FAB51E12DC

看清楚本板块的公告






----------------------- 911 社区回帖个人签名 start -----------------------

http://access911.net/csdn 无须注册提供附件上传功能,如果你提问的时候有附件请到上述地址上传并将链接复制粘贴。

http://access911.net 用 7 年时间整理了大量有关 Access 的原创资料,请有空的时候多用文章搜索功能

如果您有兴趣加入ACCESS编程的专项研究可以来QQ群“ACCESS上海研究班”看看,加入的方法请看这里《个性化的access911.net(七)QQ 群加入规则(专门讨论 ACCESS 的 )》
http://access911.net/?kbid;72FAB01E16DCECF3

----------------------- 911 社区回帖个人签名 end -----------------------

向上看呦!
OracleRoob 2006-07-07
  • 打赏
  • 举报
回复
VC创建表时设置主键,不一定非要用ADOX,也可以使用SQL语句创建表,同时设置主键。

如:

create table 表名 (编号 integer constraint 主键名 primary key, 姓 text, 名 text)
Wen_Wen__Zi 2006-07-03
  • 打赏
  • 举报
回复
我晕,没说vc怎么搞啊,老大说清楚点啊。
changechange 2006-07-03
  • 打赏
  • 举报
回复
关于此主题请参考以下文章(不要只看标题,请认真仔细地察看上述文章以及相关的评论):
如何用sql语句添加删除主键?《查询》
http://access911.net/index.asp?u1=a&u2=76FAB61E16DC







----------------------- 911 社区回帖个人签名 start -----------------------

http://access911.net/csdn 无须注册提供附件上传功能,如果你提问的时候有附件请到上述地址上传并将链接复制粘贴。

http://access911.net 用 7 年时间整理了大量有关 Access 的原创资料,请有空的时候多用文章搜索功能

如果您有兴趣加入ACCESS编程的专项研究可以来QQ群“ACCESS上海研究班”看看,加入的方法请看这里《个性化的access911.net(七)QQ 群加入规则(专门讨论 ACCESS 的 )》
http://access911.net/?kbid;72FAB01E16DCECF3

----------------------- 911 社区回帖个人签名 end -----------------------

向上看呦!
changechange 2006-07-03
  • 打赏
  • 举报
回复
几乎与 ACCESS 毫无关系

关于此主题请参考以下文章(不要只看标题,请认真仔细地察看上述文章以及相关的评论):
生成表查询,怎么连原表的主键一起copy进去?
http://access911.net/index.asp?u1=a&u2=74FAB01E16DC







----------------------- 911 社区回帖个人签名 start -----------------------

http://access911.net/csdn 无须注册提供附件上传功能,如果你提问的时候有附件请到上述地址上传并将链接复制粘贴。

http://access911.net 用 7 年时间整理了大量有关 Access 的原创资料,请有空的时候多用文章搜索功能

如果您有兴趣加入ACCESS编程的专项研究可以来QQ群“ACCESS上海研究班”看看,加入的方法请看这里《个性化的access911.net(七)QQ 群加入规则(专门讨论 ACCESS 的 )》
http://access911.net/?kbid;72FAB01E16DCECF3

----------------------- 911 社区回帖个人签名 end -----------------------

向上看呦!
内容概要:本文围绕微电网群的双层优化与分布式优化问题,提出基于交替方向乘子法(ADMM)的分布式协同优化控制策略,并通过Matlab代码实现仿真验证。研究构建了上层为微电网间能量协调与优化调度、下层为各微电网内部源-荷-储精细化运行管理的双层优化模型。采用ADMM算法将集中式优化问题分解为多个可并行求解的子问题,实现了计算的分布式化与信息隐私保护,显著提升了系统的可扩展性与鲁棒性。文中系统阐述了模型构建原理、ADMM算法设计流程及其收敛性分析,并通过仿真实验验证了该方法在降低系统综合运行成本、提高可再生能源消纳能力以及维持系统稳定运行方面的有效性。; 适合人群:具备电力系统分析、优化理论基础,熟悉Matlab编程,从事微电网、分布式能源系统、智能电网等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 学习和掌握基于ADMM的分布式优化方法在微电网群协同能量管理中的具体应用;② 实现微电网群多主体参与下的经济调度与仿真分析;③ 深入理解双层优化架构的设计理念与分布式求解算法的实现机制。; 阅读建议:建议结合所提供的Matlab代码进行动手实践,重点剖析模型建立与算法实现的关键细节,可通过调整系统参数、改变运行场景等方式,深入探究ADMM算法的收敛特性及其对优化效果的影响。

7,732

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧