我已经编译了示例OLEDB提供程序代码,该代码来自于运行
vs2007 atl oledb provider wizard
。我已经在那篇博文中给出了更详尽的细节。代码崩溃Excel。
sub-testoledbprovider()。
出错时转到错误
作为ADODB.Connection的Dim CN
设置cn=new adodb.connection
cn.open“provider=findfiles;server=foo;database=bar”'*这有效
将命令变暗为adodb.command
set cmd=new adodb.command
set cmd.activeconnection=cn'*这个工作
cmd.commandText=“*.*”'*这是有效的
停止
将rs变暗为ADodb.记录集
set rs=cmd.execute'*此处崩溃
出口接头
错误:
debug.print err.description(“&err.number&“)”
'停止
末端接头
上面的代码会使Excel在set rs=cmd.execute>行崩溃。如果我从VS2017调试,我会得到未处理的异常

< P> C++调用栈的异常例外在这里
msado15.dll!cquery::setsql(unsigned short*)未知的非用户代码。符号已加载。
msado15.dll!cquery::setcommandtext(long,unsigned long,unsigned char,unsigned char)未知的非用户代码。符号已加载。
msado15.dll!cquery::execute(enum executetypeenum,char,unsigned long,bool,unsigned long,unsigned long,long,struct tagvariant*,unsigned long,void*,long*,struct ou adorecordset**)未知的非用户代码。符号已加载。
msado15.dll!cCommand::_execute(enum executetypenum,char,unsigned long,bool,unsigned long,unsigned long,long,long,struct tagvariant*,unsigned long,void*,long*,struct ou adorecordset**)未知的非用户代码。符号已加载。
msado15.dll!cCommand::ExecuteWithModeFlag(struct tagvariant*,struct tagvariant*,long,struct AdoreCordset**,int)未知的非用户代码。符号已加载。
msado15.dll!ccommand::execute(struct tagvariant*,struct tagvariant*,long,struct aredecordset**)未知的非用户代码。符号已加载。
vbe7.dll!1E813579()未知,未加载符号。
[下面的帧可能不正确和/或丢失,没有为vbe7.dll加载符号]带批注的帧
vbe7.dll!1E7CFF4B()未知,未加载符号。
vbe7.dll!1E829D13()未知,未加载符号。
vbe7.dll!1E82FEA2()未知,未加载符号。
vbe7.dll!1E82BCB5()未知,未加载符号。
[外部代码]带注释的框架
调用堆栈显示在msado15.dll内部引发的异常。
我可以想象这个用例没有被定期测试,但是我对任何建议都感兴趣。
请不要撞车了?
.我已经在那篇博文中给出了更详尽的细节。代码导致Excel崩溃。
Sub TestOleDbProvider()
On Error GoTo ErrHand
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Open "Provider=FindFiles;Server=foo;Database=bar" '* this works
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = cn '* this works
cmd.CommandText = "*.*" '* this works
Stop
Dim rs As ADODB.Recordset
Set rs = cmd.Execute '* crashes here
Exit Sub
ErrHand:
Debug.Print Err.Description & " (" & Err.Number & ")"
'Stop
End Sub
上面的代码崩溃excel在线Set rs = cmd.Execute
.如果我从VS2017调试,我会得到未处理的异常

未调用异常的C++调用堆栈在这里
msado15.dll!CQuery::SetSQL(unsigned short *) Unknown Non-user code. Symbols loaded.
msado15.dll!CQuery::SetCommandText(long,unsigned long,unsigned char,unsigned char) Unknown Non-user code. Symbols loaded.
msado15.dll!CQuery::Execute(enum ExecuteTypeEnum,char,unsigned long,bool,unsigned long,unsigned long,long,struct tagVARIANT *,unsigned long,void *,long *,struct _ADORecordset * *) Unknown Non-user code. Symbols loaded.
msado15.dll!CCommand::_Execute(enum ExecuteTypeEnum,char,unsigned long,bool,unsigned long,unsigned long,long,long,struct tagVARIANT *,unsigned long,void *,long *,struct _ADORecordset * *) Unknown Non-user code. Symbols loaded.
msado15.dll!CCommand::ExecuteWithModeFlag(struct tagVARIANT *,struct tagVARIANT *,long,struct _ADORecordset * *,int) Unknown Non-user code. Symbols loaded.
msado15.dll!CCommand::Execute(struct tagVARIANT *,struct tagVARIANT *,long,struct _ADORecordset * *) Unknown Non-user code. Symbols loaded.
VBE7.DLL!1e813579() Unknown No symbols loaded.
[Frames below may be incorrect and/or missing, no symbols loaded for VBE7.DLL] Annotated Frame
VBE7.DLL!1e7cff4b() Unknown No symbols loaded.
VBE7.DLL!1e829d13() Unknown No symbols loaded.
VBE7.DLL!1e82fea2() Unknown No symbols loaded.
VBE7.DLL!1e82bcb5() Unknown No symbols loaded.
[External Code] Annotated Frame
调用堆栈显示在msado15.dll内部引发的异常。
我可以想象这个用例没有被定期测试,但是我会对任何建议感兴趣。
请不要撞车了?