紧急求救,关于用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包含文字数组?望各位高手不吝赐教。
...全文
234 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 -----------------------

向上看呦!
内容概要:本文档聚焦于“基于超局部模型的无模型预测电流控制(MFPCC)结合自抗扰ESO观测器改进模型预测控制”的Simulink仿真研究,属于电力电子与电机控制领域的高阶科研复现项目。研究采用无模型预测控制策略,引入超局部模型以简化系统建模过程,避免对精确数学模型的依赖,并融合自抗扰控制中的扩张状态观测器(ESO),实现对系统内部动态与外部干扰的实时估计与补偿,从而显著提升电流环控制的动态响应速度、稳态精度及系统鲁棒性。文档不仅详述了该复合控制策略的设计原理与仿真实现,还配套提供了完整的Matlab/Simulink代码与模型,并列举了涵盖模型预测控制、滑模控制、PI/FCS-MPC对比、永磁同步电机控制、四旋翼轨迹跟踪、电池均衡、微电网能量管理等方向的丰富科研仿真资源,服务于学术研究与工程实践。; 适合人群:具备自动控制理论、电机控制原理、电力电子技术及Matlab/Simulink仿真基础的研究生、高校科研人员,以及从事高性能电机驱动、新能源发电、电力变换系统开发的工程师。; 使用场景及目标:① 复现并深入理解MFPCC与ESO相结合的先进控制算法在电机电流控制中的集成应用;② 对比分析无模型预测控制与传统依赖精确模型的控制方法(如FCS-MPC)在抗干扰能力和模型误差容忍度方面的性能差异;③ 掌握ESO在扰动观测与前馈补偿中的关键技术,探究其对系统鲁棒性的提升机制;④ 作为毕业设计、高水平学术论文复现、科研项目预研或工业级控制器开发的理论与实践参考。; 阅读建议:建议读者结合所提供的Simulink仿真模型与代码进行动手实践,重点剖析控制器架构设计、ESO参数整定方法、代价函数构建及仿真结果的动态响应与抗扰性能对比分析,同时可参考文档中列出的相关课题资源,横向拓展对现代先进控制理论体系的认知。

7,732

社区成员

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

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