如果不连接则终止查询

时间:2014-04-09 19:50:57

标签: sql sql-server vba ms-access access-vba

我有一个代码将数据上传到SQL服务器数据库,我试图添加一行IF代码,说明是否有连接然后继续,但如果没有连接则转到END。我很难搞清楚措辞和位置。连接的代码的开头是:

Public Function Update()
Dim cdb As DAO.Database, qdf As DAO.QueryDef

Dim rs As DAO.Recordset

Dim err As DAO.Error

Const ConnectionString = _
        "ODBC;" & _
            "Driver={SQL Server Native Client 10.0};" & _
            "Server=SERV;" & _
            "Database=DB;" & _
            "UID=ID;" & _
            "PWD=PWD;"
Set cdb = CurrentDb
Set qdf = cdb.CreateQueryDef("")

Set rs = CurrentDb.OpenRecordset("CDData", dbOpenTable)

qdf.Connect = ConnectionString

Do While Not rs.EOF

1 个答案:

答案 0 :(得分:1)

虽然可以简单地尝试执行任何查询或命令,但“超时”和测试活动连接的延迟可能会导致非常长的延迟。因此,存在一种奇妙的技巧,它在Access中使用不同的连接机制,因此在尝试使用基于链接表的已保存查询时“减少”潜在的非常长的延迟。 (当您创建queryDef而不是链接表或基于链接表的查询到sql server时,会出现#34;不同的"连接系统)

如果您有一个有效的SQL连接,则以下代码将返回true或false:

Function TestLogin(strcon As String) As Boolean

  On Error GoTo TestError

  Dim dbs          As DAO.Database
  Dim qdf          As DAO.QueryDef

  Set dbs = CurrentDb()
  Set qdf = dbs.CreateQueryDef("")

   qdf.Connect = strcon

   qdf.ReturnsRecords = False

   'Any VALID SQL statement that runs on server will work below.

   qdf.SQL = "SELECT 1 as test"
   qdf.Execute

   TestLogin = True

   Exit Function

TestError:
   TestLogin = False
   Exit Function

结束功能

因此,在代码中,您现在使用连接字符串代码:

If TestLogIn(strConn) = false then
    msgbox "no connection or logon invalid"
    exit sub
End If

' record processing code goes here for successful logon/connection.