紧急求救,关于用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包含文字数组?望各位高手不吝赐教。
...全文
188 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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 -----------------------

向上看呦!
在Windows 10或Windows 11操作系统中,用户经常会遇到共享打印机时出现的一系列错误代码,这些错误代码可能会阻碍打印机共享功能的正常使用。常见的错误代码包括0x00000057、0x00000709和0x0000011b,这些代码通常指出了不同的问题,比如权限不足、服务未运行或配置错误等。除此之外,还有一些故障提示如“连接失败”或“内存不足”,这些都可能影响到打印机共享的稳定性。 要解决这些故障,首先要确保打印机已经正确地连接到网络,并且在需要共享的电脑上进行了设置。确保打印机驱动程序是最新的,并且在共享设置中没有错误配置。对于权限问题,需要检查网络上的用户账户是否具有足够的权限来访问共享打印机。同时,也要确保打印机服务正在运行,特别是“Print Spooler”服务,因为这是打印机共享服务的核心组件。 在某些情况下,问题可能与操作系统的更新有关,如升级到最新版的Windows 10或Windows 11后可能出现的兼容性问题。这时,可能需要查看微软的官方支持文档来获取特定的解决方案或更新。 对于错误代码0x00000057,这通常是由于没有足够的权限来访问网络打印机或其共享资源,解决方法是确保网络打印机的权限设置正确,包括在组策略中设置相应的访问权限。而0x00000709错误可能是由于打印机驱动问题或打印机端口配置错误,可以尝试重新安装或更新打印机驱动来解决。至于0x0000011b错误,这往往是因为打印机队列服务的问题,检查并重启“Print Spooler”服务通常是解决这类问题的常见手段。 至于“连接失败”或“内存不足”这类故障,通常与客户端和打印机之间的网络连接以及打印机本地资源的使用情况有关。检查网络连接,确保打印机所在的网络段没有故障或中断。同时,如果打印机的打印队列长时间得不到处理,可能会导致内存不足的情况,这时可能需要清理打印队列或增加打印机的内存配置。 为了帮助用户更快速地解决这些问题,市面上出现了各种打印机共享错误修复工具。这些工具往往通过预设的修复程序来自动检测和修正打印机共享中常见的问题。它们可以快速检查打印机驱动、网络连接以及共享设置,并且能够提供一键修复功能,大幅减少了用户自行排查和解决问题的难度。 然而,在使用这些修复工具之前,用户应确保这些工具的来源是安全可靠的,避免因使用不当的修复工具而引发其他系统安全或隐私问题。用户可以到官方平台或者信誉良好的软件提供商处下载这些工具。通过细心检查打印机的共享设置,及时更新驱动程序和服务,以及合理使用修复工具,大多数共享打印机的问题都可以得到有效的解决。

7,732

社区成员

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

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