VB连接数据库有关问题-请求高手解答

VB连接数据库问题---急,请求高手解答代码一,登录窗体Public OK As Boolean登录成功Private Sub cmdCancel

VB连接数据库问题---急,请求高手解答
代码一,登录窗体


Public OK As Boolean '登录成功

Private Sub cmdCancel_Click() '“取消”按钮
  OK = False '登录失败标记
  Me.Hide '隐藏当前窗体
End Sub

Private Sub cmdOK_Click() '“确定”按钮
  Dim j As Single, NameKey As String, PasswordKey As String
  Dim strUserName As String, strPassword As String
  Static iTry As Integer '重试次数
  Dim rs As New ADODB.Recordset
   
  strUserName = txtUserName.Text '获取用户名
  strPassword = txtPWD.Text '获取用户密码
   
  If strUserName = "" Then '若用户名为空
  MsgBox "请输入用户名", vbOKOnly + vbCritical, "警告" '显示提示信息
  txtUserName.SetFocus '设置输入焦点
  Exit Sub '退出过程
  End If
  If strPassword = "" Then '若密码为空
  MsgBox "请输入密码", vbOKOnly + vbCritical, "警告" '显示提示信息
  txtPWD.SetFocus '设置输入焦点
  Exit Sub '退出过程
  End If
   
  strUserName = MakeStr(strUserName) '处理非法字符
  strPassword = MakeStr(strPassword)
   
  strSQL = "SELECT * FROM Users WHERE use_name='" & strUserName & "'" '查询用户名
  Set rs = QueryExt(strSQL) '读取指定用户名的资料
  If Not rs.EOF Then '若记录集不为空
  If rs("user_password") = strPassword Then '若密码相同
  OK = True '登记成功
  UserName = strUserName '保存用户名到全局变量
  Right = rs("user_remark") '保存用户权限
  Unload Me '卸载当前窗体
  Exit Sub '退出当前过程
  End If
  End If
  MsgBox "用户名或密码错误!", vbOKOnly + vbCritical, "警告" '错误登录提示
  txtUserName = "" '清空用户名
  txtPWD = "" '清空密码
  txtUserName.SetFocus '设置输入焦点
  iTry = iTry + 1 '累加重试次数
  If iTry >= 3 Then '重试次数超限
  MsgBox "非法用户,系统将关闭!", vbOKOnly + vbCritical, "警告" '提示关闭
  DBapi_Disconnect '断开数据库连接
  End '结束程序
  Else '未超过重试次数限制
  Exit Sub '退出过程
  End If
End Sub

Private Sub Form_Load()

End Sub



代码二:通用模块


Public fMainForm As frmMain
Private IsConnect As Boolean ' 标记数据库是否连接=
Private Connect_Num As Integer ' 标记执行Connect()函数后,访问数据库的次数

Private cnn As ADODB.Connection '连接数据库的Connection对象
Private rs As ADODB.Recordset '保存结果集的Recordset对象

Public strSQL As String '保存执行SQL语句的字符串
Public Conn As String '连接字符串
Public UserName As String '操作员名称
Public Right As Integer '操作员权限
Sub Main()
  Dim flogin As New frmLogin
  Conn = "Provider=SQLOLEDB.1;Password=11;User ID=pp;Initial Catalog=network;Data Source=PP-VISTA;"

  '数据库连接字符串
   
  flogin.Show vbModal '显示登录窗体
  If Not flogin.OK Then '若登录失败
  End '退出应用程序
  End If
   
  Unload flogin '卸载登录窗体
   
  frmSplash.Show '显示Splash窗体
  frmSplash.Refresh '刷新Splash窗体
  Set fMainForm = New frmMain '生成主窗体
  Load fMainForm '装载主窗体
  Unload frmSplash '卸载Splash窗体
   
  fMainForm.Show '显示主窗体
End Sub
Private Sub Connect() '连接数据库
  If IsConnect = True Then '如果连接标记为真,则返回。否则会出错
  Exit Sub
  End If
' Conn = "data source=.;initial catalog=student;user id=pp;password=11;"

   
  On Error GoTo DbOpenErr
  Set cnn = New ADODB.Connection '关键New用于创建新对象cnn


  With cnn
  .Provider = "SQLOLEDB.1"
  .ConnectionString = Conn
  .ConnectionTimeout = 10
  .Open
  End With
  IsConnect = True '设置连接标记,表示已经连接到数据库
  Exit Sub
   
DbOpenErr:
  If Err = -2147467259 Then
  Set cnn = Nothing
  MsgBox "连接MS SQL Server数据库失败!" & vbCrLf & vbCrLf & "请检查配置是否完好,数据库Student是否存在?", vbOKOnly + vbInformation, "学籍管理系统"
  End
  End If
   
End Sub

Public Sub Disconnect() '断开与数据库的连接
  Dim rc As Long
  If IsConnect = False Then Exit Sub '如果连接标记为假,标明已经断开连接,则直接返回
  cnn.Close '关闭连接
   
  Set cnn = Nothing
  IsConnect = False
End Sub

Public Sub DB_Connect() '使用Connect_Num控制数据库连接
  Connect_Num = Connect_Num + 1
  Connect
End Sub
Public Sub DB_Disconnect()
  If Connect_Num >= CONNECT_LOOP_MAX Then
  Connect_Num = 0
  Disconnect
  End If
End Sub
Public Sub DBapi_Disconnect() '强制关闭api方式访问的数据库,计数器复位
  Connect_Num = 0
  Disconnect
End Sub

Public Sub SQLExt(ByVal TmpSQLstmt As String) '执行数据库操作语句
  Dim cmd As New ADODB.Command '创建Command对象cmd
  DB_Connect '连接到数据库
  Set cmd.ActiveConnection = cnn '设置cmd的ActiveConnection属性,指定与其关联的数据库连接
  cmd.CommandText = TmpSQLstmt '设置要执行的命令文本
  cmd.Execute
  Set cmd = Nothing
  DB_Disconnect
End Sub

Public Function QueryExt(ByVal TmpSQLstmt As String) As ADODB.Recordset '执行数据库查询语句
  Dim rst As New ADODB.Recordset
  DB_Connect '连接到数据库
   
  Set rst.ActiveConnection = cnn '设置rst的ActiveConnection属性,指定与其关联的数据库连接
   
  rst.CursorType = adOpenDynamic '设置游标类型
  rst.CursorType = adOpenKeyset
  rst.LockType = adLockOptimistic '设置锁定类型
  rst.Open TmpSQLstmt '打开记录集
  Set QueryExt = rst '返回记录集
End Function

Public Function MakeStr(ByVal Str As String) As String
  MakeStr = Trim(Replace(Str, "'", "''"))
End Function




注:调试报错在“Set rst.ActiveConnection = cnn ”,提示实时错误3709,连接无法执行此操作,在次上下文中可能已关闭或者无效。

 数据库已经连接成功,

之前两位大侠说是先调用连接函数和实例化的问题,好像没有解决,能否详细描述,急,等待高手解答~!

[解决办法]
Conn没有被赋值。
在 form_load 里面 conn 是一个局部变量。

把 Conn = "Provider=SQLOLEDB.1;Password=11;User ID=pp;Initial Catalog=network;Data Source=PP-VISTA;"

写到 Connect() 里面去。
[解决办法]
Set rst.ActiveConnection = cnn 
这句之关要先将cnn与数据库建立连接