ADO ACE OLEDB 12.0 Excel前端,带有VBA故障排除

时间:2018-01-26 21:41:03

标签: excel-vba oledb ado adodb vba

我使用Excel 2013作为使用VBA编写的前端应用程序。 我已经在Access 2013数据库中链接了一个XLSX文件,以便简单地使用SQL来读取一个列的MAX值,该列的数据是使用Where子句过滤的。 我无法理解为什么用于检索MAX值的SQL语句不起作用,而通过SQL查询在Access中同样的语句是可以的。

此后VBA代码摘录:

varCnxStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & 
G_sWBookREINVOICingFilePath & ";Mode="

With conXLdb
  '*
  '.Provider = "Microsoft.ACE.OLEDB.12.0"
  '.ConnectionString = "Data Source=" & G_sWBookREINVOICingFilePath & ";"     
  & "Extended Properties='Excel 12.0;HDR = YES'"
  '.Mode = adModeShareExclusive
  .Open varCnxStr & adModeShareExclusive
  '*
End With

Debug.Print varCnxStr & adModeShareExclusive

strSQL = "SELECT MAX(InvoiceNum) as LastNumInvoice"
strSQL = strSQL & " FROM ReInvoiceDB "
strSQL = strSQL & " WHERE InvoiceNum > " & strYMPrefix_p & "000"
strSQL = strSQL & ";"

Debug.Print strSQL

adoXLrst.Open Source:=strSQL, ActiveConnection:=conXLdb,   
CursorType:=adOpenStatic, LockType:=adLockOptimistic, Options:=adCmdText
adoXLrst.MoveFirst

'Set adoXLrst = conXLdb.Execute(strSQL)
HighestStr = adoXLrst![LastNumInvoice]

 adoXLrst.Close

 strGSFNumber = HighestStr '>> byref returning value 

conXLdb.Close

Veloma:

  '>>
  On Error Resume Next
 Set adoXLrst = Nothing
 Set conXLdb = Nothing
 Exit Sub
'>>

Diso:
   Beep
   Beep
  '>>
  strGSFNumber = "ERR"
  '>>
  sMsg = "pG_getNEXTInvoiceValueXLasDB-ERR ::" & Err.Number & ":: - " &
  Err.Description

 MsgBox sMsg, vbOKOnly + vbCritical
 sRet = sMsg
 Resume Veloma
End Sub

它在变量HighestStr中返回Null值,而它应该接收一个double值......

任何有关错误功能的帮助或任何线索? 问候。

0 个答案:

没有答案