函数ExecuteSQL我在参考资料上说针对数据库后台为SQL,本来我这个程序是用SQL,但是我考虑程序功能不大,所以改用Access,不过这个函数还没有去掉,把他放在模块里。请各位高手参考下面代码,并给兄弟提出意见,谢谢!
Option Explicit
Public UID As String
Public PWD As String
Dim db As ADODB.Connection
Public Username  As StringPublic Sub EnterToTab(Keyasc As Integer)
    If Keyasc = 13 Then
        SendKeys "{TAB}"
      '  SendKeys "{Home}+{End}"
    End If
End Sub
Public Sub ShowErr()
 MsgBox "" & vbCrLf & vbCrLf & Err.Description, vbOKOnly + vbCritical, ""
End Sub
'Public Sub EnterToTab(Keyasc As Integer)
 '   If Keyasc = 13 Then
  '      SendKeys "{TAB}"
   ' End If
'End SubPublic Function Testtxt(txt As String) As Boolean
    If Trim(txt) = "" Then
        Testtxt = False
    Else
        Testtxt = True
    End If
End Function
Public Function ConnectString() _
   As String
'returns a DB ConnectString
  ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "" _
     & "\library.mdb" & ";Persist Security Info=False"
End FunctionPublic Function ExecuteSQL(ByVal SQL _
   As String, MsgString As String) _
   As ADODB.Recordset
'executes SQL and returns Recordset
   Dim cnn As ADODB.Connection
   Dim rst As ADODB.Recordset
   Dim sTokens() As String
   
   On Error GoTo ExecuteSQL_Error
   
   sTokens = Split(SQL)
   Set cnn = New ADODB.Connection
   '连接到指定的数据源类型
   cnn.Open ConnectString
   If InStr("INSERT,DELETE,UPDATE", _
      UCase$(sTokens(0))) Then
      cnn.Execute SQL
      MsgString = sTokens(0) & _
         " query successful"
   Else
      Set rst = New ADODB.Recordset
      rst.Open Trim$(SQL), cnn, _
         adOpenKeyset, _
         adLockOptimistic
      'rst.MoveLast     'get RecordCount
      Set ExecuteSQL = rst
      MsgString = "查询到" & rst.RecordCount & _
         " 条记录 "
   End If
ExecuteSQL_Exit:
   Set rst = Nothing
   Set cnn = Nothing
   Exit Function
   
ExecuteSQL_Error:
   MsgString = "查询错误: " & _
      Err.Description
   Resume ExecuteSQL_Exit
End Function'Public Sub ConnectToDataBase()
Rem 把数据存到数据库文件中,利用SQL语句的INSERT表达式,其中要引用ADO2.5/3.0library 库
Rem On Error GoTo errhander:
'打开数据库
'引入ADO为了操作数据库
'Dim adoCn As New ADODB.Connection
'Dim adoRs As New ADODB.Recordset
'adoCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "" _
     & "\library.mdb" & ";Persist Security Info=False"
'adoCn.Open
'End Sub上面代码除了这函数外,还有两个目的:1窗体上各个文本框直接用回车键实现控件焦点的转移,无须手工点击每一个文本框;2,Testtxt函数是为了实现自动判断是否为空。但是实际上这两个功能都没有实现,而在别的程序里实现。请指教。谢谢!

解决方案 »

  1.   

    Execute 方法 (ADO Command)
          执行在 CommandText 属性中指定的查询、SQL 语句或存储过程。语法对于按行返回的 Command:Set recordset = command.Execute( RecordsAffected, Parameters, Options )对于非按行返回的 Command:command.Execute RecordsAffected, Parameters, Options返回值返回 Recordset 对象引用。参数RecordsAffected   可选,长整型变量,提供者向其返回操作所影响的记录数目。RecordsAffected 参数仅应用于操作查询或存储过程。RecordsAffected 不返回由返回结果的查询或存储过程所返回的记录数目。详细信息,请使用 RecordCount 属性。Parameters   可选,变体型数组,使用 SQL 语句传送的参数值。(用该参数传送时输出参数将不返回正确值。)Options   可选,长整型值,指示提供者如何计算 Command 对象的 CommandText 属性。该值可为下列常量之一:常量 说明 
    AdCmdText 指示提供者应按命令的文本定义(如 SQL 语句)来计算 CommandText。 
    AdCmdTable 指示 ADO 应生成 SQL 查询以便从 CommandText 命名的表中返回所有行。 
    AdCmdTableDirect 指示提供者应从 CommandText 命名的表中返回所有行。 
    AdCmdStoredProc 指示提供者应按存储过程计算 CommandText。 
    AdCmdUnknown 指示 CommandText 中的命令类型未知。 
    adAsyncExecute 指示命令应异步执行。 
    adAsyncFetch 指示对由 CacheSize 属性指定的初始数量之后的剩余行应使用异步提取。 本列表中前 4 个常量的详细说明请参见 CommandType 属性。说明使用 Command 对象的 Execute 方法可执行在对象的 CommandText 属性中指定的查询。如果 CommandText 属性指定按行返回查询,执行所产生的任何结果都将存储在新的 Recordset 对象中。如果该命令不是按行返回查询,则提供者返回关闭的 Recordset 对象。某些应用程序语言允许忽略该返回值(如果不需要任何 Recordset)。如果查询带有参数,将使用 Command 对象中参数的当前值,除非通过 Execute 调用传送的参数覆盖它们。可以在调用 Execute 方法时通过省略某些参数的新值来覆盖参数子集。指定参数的次序与其在方法中被传送的次序相同。例如,如果有 4 个(或更多)参数并且希望只为第一个和第四个参数传送新值,则可以将 Array(var1,,,var4) 作为 Parameters 参数传送。注意    在 Parameters 参数中传送时输出参数将不返回正确的值。该操作结束后将发出 ExecuteComplete 事件。
      

  2.   

    是sql查询,可以用在access里是当然肯定可以了,execl里也能用啊,没做过vba?