紧急求救,关于用AdoX创建主键的问题。
由于使用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包含文字数组?望各位高手不吝赐教。
在编写一个根据现有的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包含文字数组?望各位高手不吝赐教。
...全文
相关推荐
502餐厅点餐系统.rar
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、本项目仅用作交流学习参考,请切勿用于商业用途。
502餐厅点餐系统(文档+源码)_kaic.zip
计算机毕业设计
502餐厅点餐系统.zip
502餐厅点餐系统.zip
YOLO算法餐厅收据文本目标检测数据集-502张-标注类别为地址-公司名称-日期和时间-总金额.zip
【注:该页面底部资源详情处,可查看数据集可视化效果】 1. YOLO目标检测数据集, 适用于YOLOV5、yolov7,yolov8, yolov11, yolov13, yolo26等系列算法,含标签,已标注好,可以直接用来训练; 2. 内置data.yaml数据集配置文件,已经划分好了训练集、验证集等; 3. 数据集和模型具体情况可参考 https://blog.csdn.net/zhiqingAI/article/details/124230743?spm=1001.2014.3001.5502
Isaacgym使用操作指南
Isaac Gym 是一个强大的仿真工具,特别适合那些需要进行大规模并行仿真和训练的机器人和强化学习任务。通过 GPU 加速、深度学习集成和丰富的物理仿真能力,Isaac Gym 能够显著提高仿真和训练效率,是机器人学和 AI 研究中的一大利器。


