各位大虾好,最近学习数据库,决定用vb开发一个学生信息系统用的是sql数据库,窗体中用了ado date控件,由于已配置了数据源,名称为:db097_Data,所以我在ado控件连接数据库方式上采用连接数据源的方式;且有一个通用模块,它的作用是连接数据库之用,因为里面声明了ConnectString()函数 ,在vb标准窗体中正是调用了此函数,才连接数据库;具体代码如下
通用模块代码:
Public conn As New ADODB.Connection
Public sqlstring As String
 Public connstring As String
Public rs1 As New ADODB.Recordset
Declare Function setWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long   'api函数 登入窗体之用'
    Global Const swp_nomove = &H2
    Global Const swp_nosize = &H1
    Global Const hwnd_topmost = -1
    Global Const flags = swp_nomove Or swp_nosize
    Public Sub ConnectString()
    conn.ConnectionString = "provider=MSDASQL;DRIVER={SQL Server};SERVER=8E42B74E6EE14C4;DSN=db097_Data;UID=sa;pwd=;DATABASE=db097"
    conn.CursorLocation = adUseServer
    conn.Open
    rs1.LockType = adLockBatchOptimistic
    rs1.CursorType = adOpenDynamic
    rs1.ActiveConnection = conn
    rs1.Open "用户", conn, adOpenForwardOnly, adCmdTable  '用户'  是我建的表,里面有登入的人员信息
    End Sub
标准窗体代码:
Option Explicit
Public LoginSuccessed As Boolean
Dim UserName As String, pwd As String
Private Sub cmdCancel_Click()
End
End SubPrivate Sub cmdOK_Click()rs1.MoveFirst
While (rs1.EOF = False)
UserName = Trim(rs1.Fields("user_name"))
pwd = Trim(rs1.Fields("user_pwd"))
If Trim(TextUserName.Text) = Trim(UserName) And Trim(TextPassWord.Text) = Trim(pwd) Then
LoginSuccessed = True
Me.Hide
frmMain.Show
Exit Sub
Else
rs1.MoveNext
End If
Wend
frmLogin.ForeColor = vbRed
Print "管理员名或密码错误,请重试!"
End SubPrivate Sub Command1_Click()
Me.Hide
frmMain.Show
End Sub
Private Sub frmLogin_Activate()
TextUserName.SetFocus
End Sub
Private Sub frm_Login_load()Dim success As Long
success = setWindowPos(Me.hwnd, hwnd_topmost, 0, 0, 0, 0, flags)
Call ConnectString
conn.BeginTrans
UserName = rs1.Fields("user_name")
pwd = rs1.Fields("user_pwd")End SubPrivate Sub Form_Load()End SubPrivate Sub TextPassWord_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then Call cmdOK_Click
End SubPrivate Sub TextUserName_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then TextPassWord.SetFocus
End Sub
运行后出现 " 错误 3704 ,对象关闭时,不允许操作",并指示在"rs1.movefirst "上
我翻阅好些资料,以及网上信息.苦于智商不太高,为能解决;望哪些位大虾们能帮忙想一下!!!!
小菜感激不尽...........

解决方案 »

  1.   

    这种情况一般是,你关闭(或是没有打开)了RecordSet或是Connection以后,你试图对其进行操作!
    ps:同学,你貌似问错地方了吧
      

  2.   

    执行rs1.movefirst 时你的数据库没有成功连接吧
      

  3.   

    今天在高手的指点下,作了以下修改:
    "provider=MSDASQL;DRIVER={SQL Server};SERVER=8E42B74E6EE14C4;DSN=db097_Data;UID=sa;pwd=;DATABASE=db097" 
    修改为:
    Provider = "SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=db097;Data Source=8E42B74E6EE14C4"
    运行后,提示错误为:
    实时错误:-2147467295(80004005)'
    并报错为:未提供数据源名称并且未提供默认驱动程序且源代码中 的conn.open出现黄色背景
    请各位高手想想下...怎么回事呀???
      

  4.   

    1、检查网络是否有问题;
    2、查看WINS服务器设置是否有问题,或者将SERVER换成IP试试;