Sql server 更改VC++;6从SQL Server访问应用程序数据库-我可以使用链接表吗? 我们有一个Visual C++ 6应用程序,它使用DAO在Access数据库中存储数据。数据库类是使用ClassWizard创建的,基于CDaoRecordset
我们需要从访问转移到SQL Server,因为有些客户端有巨大的(1.5Gb+)数据库,运行报告的速度非常慢(使用Crystal reports和其他应用程序) 我们并不太担心这个VC++应用程序的性能——它正在从数据记录器下载数据并将其放入数据库 我使用“Microsoft SQL Server Migration Assistant 2008 for Access”将我的数据库从Access迁移到SQL Server,然后它链接了原始Access数据库中的表。如果打开Access数据库,则可以浏览SQL Server数据库中的数据 然后,我尝试在我的应用程序中使用该数据库,并不断遇到问题 我已将所有记录集更改为Sql server 更改VC++;6从SQL Server访问应用程序数据库-我可以使用链接表吗? 我们有一个Visual C++ 6应用程序,它使用DAO在Access数据库中存储数据。数据库类是使用ClassWizard创建的,基于CDaoRecordset,sql-server,ms-access,visual-c++,Sql Server,Ms Access,Visual C++,我们需要从访问转移到SQL Server,因为有些客户端有巨大的(1.5Gb+)数据库,运行报告的速度非常慢(使用Crystal reports和其他应用程序) 我们并不太担心这个VC++应用程序的性能——它正在从数据记录器下载数据并将其放入数据库 我使用“Microsoft SQL Server Migration Assistant 2008 for Access”将我的数据库从Access迁移到SQL Server,然后它链接了原始Access数据库中的表。如果打开Access数据库,则可
dbOpenDynaset
,而不是dbOpenTable
。我还将myrecordsetptr->open()
调用更改为myrecordsetptr->open(dbOpenDynaset,NULL,dbSeeChanges)
,这样就不会出现异常
但是。。。现在,当我尝试使用myrecordsetptr->->->SetCurrentIndex(_T(“PrimaryKey”))设置当前索引时,我遇到了一个异常3251-“此类型对象不支持操作”的问题代码>
在不重写所有数据库访问代码的情况下,让链接表工作有什么诀窍吗
[更新17/7/09-谢谢提示-我会将所有Seek()
引用更改为FindFirst()
/FindNext()
,并根据我的方式进行更新]是的,但我认为您无法设置/更改记录集中链接表的索引,因此您必须相应地更改代码
例如:如果您的代码希望设置索引和调用seek,则基本上必须使用Find方法来重写它。当您将表从Access移动到SQL Server时,为什么要使用SetCurrentIndex?
我的意思是-您仅对链接表使用Access
另外,如第页所示,它说明SetCurrentIndex可用于表类型记录集。在什么上下文中使用命令SetCurrentIndex?如果它是使用SEEK的子例程,则不能将其用于链接表
而且,它是Jet专用的,如果使用不同的后端,它将不会有任何价值
我建议不要使用SEEK(即使是在使用Jet表的访问中),除非在最不寻常的情况下,您需要在一个循环中在一个表上跳上千次。在所有其他DAO环境中,您应该使用限制性WHERE子句来检索有限数量的记录(如果您使用SEEK来获取单个记录),或者应该使用.FindFirst/FindNext。是的,后两者在比例上比SEEK慢得多,但它们更易于移植,而且绝对性能差异只有在执行数千次时才有意义
此外,如果搜索位于有序字段上,则可以通过检查搜索的值是否大于或小于当前记录的值,并相应地选择.FindPrevious或.FindNext(因为DAO记录集的查找操作是按顺序通过索引进行的)。那么,问题是什么?引发“操作不受支持”的代码行是什么?