非常感谢online以及yinweihong帮助我一无所知的VB新手完成了一个小的工具!基本功能都已实现。但是还有几个小问题请几位帮忙完善一下(:
问题1:我在执行脚本的时候如果正确以下代码没有问题,但是如果脚本有问题就会报错并结束程序。如何做可以做到提示检查选择的数据库以及脚本而且不会结束程序。
比如脚本文件内容为:update GLname set seq = 3 where seq = 1 而我选择的数据库中没有“GLname”的表。系统提示错误确定后程序就结束了。
Private Sub Command3_Click()
Call Command1_Click
If txtdata.Text = "" Then
MsgBox "请选择选择数据库!", vbCritical, "登陆提示"
txtdata.SetFocus
Exit Sub
End If
Open App.Path & "\" & "update.sql" For Input As #1   ' 打开输入文件。
Do While Not EOF(1)   ' 循环至文件尾。
   Input #1, sqljb   ' 将数据读入变量。
Loop
Close #1   ' 关闭文件。
conn.Execute sqljb
MsgBox "清除成功", vbOKOnly + vbInformation, "提醒"
End Sub

解决方案 »

  1.   

    问题2:Command2_Click为测试连接成功与否的按钮,我想实现执行Command2_Click如果连接成功提示“连接成功”否则提示"连接错误!请检查用户名密码,服务器名称以及数据库是否有误。"以下为连接数据库的代码,请教Command2_Click的代码该如何写?
    Private Sub OpenConnection()
    On Error GoTo EH
    Dim ser, user, pass, ufdata
    ser = txtser
    user = txtuser
    pass = txtpass
    ufdata = txtdataSet conn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    conn.ConnectionString = "driver={SQL Server};" & "server=" & ser & ";uid=" & user & ";pwd=" & pass & ";database=" & ufdata & ""
    conn.Open
    Exit Sub
    EH:
      MsgBox "连接错误!请检查用户名密码,服务器名称以及数据库是否有误。", vbCritical, "登陆提示"
    End SubPrivate Sub Command2_Click()
    Call OpenConnection
    End Sub
      

  2.   


        加上错误处理。on error ... , 具体可查联机帮助。
      

  3.   

    1.
    Command1_Click是检测出该SQL 服务器上所有数据库么?
    曾给了检测出特定数据库中的数据表代码
    你既然要更新GLname表  怎么该表又会不存在呢?
    2.
    conn.Open
    后加一句msgbox "连接成功"
    eixt sub去掉
      

  4.   

    用错误处理
    On Error GoTo EH
    conn.Execute sqljb
    MsgBox "清除成功", vbOKOnly + vbInformation, "提醒"
    EH:
      MsgBox "连接错误!表可能不存在", vbCritical, "登陆提示"
    End Sub你试试啊或者先检查表是否存在
    conn.open "你的连接"
    set rs=conn.execute("GLname",,adcmdtabledirect)
    if err.number<>0 then
    msgbox "表不存在"
    else
    msgbox "表存在"
    end if
      

  5.   

    我的全部源码都在这里都是在各位仁兄帮助下实现的见笑了,但是还是有一些小问题需要完善请大家务必帮忙?
    错误1:我运行程序就检查OpenConnection的连接属性(如果user,pass属性“txet”为空正常如果user,pass属性“txet”不为空而且连接不正确程序就“MsgBox "连接错误!请检查用户名密码,服务器名称以及数据库是否有误。", vbCritical, "登陆提示"”
    )为什么?
    错误2:在执行Command2_Click(测试连接按钮)时我想做到如果OpenConnection正确就提示"连接成功"如果不成功就“MsgBox "连接错误!请检查用户名密码,服务器名称以及数据库是否有误。", vbCritical, "登陆提示"”
    错误3:如果连接成功后执行Command3_Click(执行脚本)有错误的话(比如脚本文件内容为:update GLname set seq = 3 where seq = 1 而我选择的数据库中没有“GLname”的表。系统提示错误确定后程序就结束了。)如何修改可以做到提示检查选择的数据库以及脚本而且不会结束程序。Option Explicit
    Dim conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Private Const DB_PROVIDER = "SQLOLEDB"
    Dim sqljb As String
    ------------------------------------------------------------------------
    Private Sub OpenConnection()
    On Error GoTo EH
    Dim ser, user, pass, ufdata
    ser = txtser
    user = txtuser
    pass = txtpass
    ufdata = txtdataSet conn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    conn.ConnectionString = "driver={SQL Server};" & "server=" & ser & ";uid=" & user & ";pwd=" & pass & ";database=" & ufdata & ""
    conn.Open
    Exit Sub
    EH:
      MsgBox "连接错误!请检查用户名密码,服务器名称以及数据库是否有误。", vbCritical, "登陆提示"
    End Sub
    -----------------------------------------------------------------------------
    Private Sub Command2_Click()
    Call OpenConnection
    End Sub
    -----------------------------------------------------------------------------
    Private Sub Command3_Click()
    Call OpenConnection
    If txtdata.Text = "" Then
    MsgBox "请选择选择数据库!", vbCritical, "登陆提示"
    Exit Sub
    End If
    Open App.Path & "\" & "update.sql" For Input As #1   ' 打开输入文件。
    Do While Not EOF(1)   ' 循环至文件尾。
       Input #1, sqljb   ' 将数据读入变量。
    Loop
    Close #1   ' 关闭文件。
    conn.Execute sqljb
    MsgBox "清除成功", vbOKOnly + vbInformation, "提醒"
    End Sub
    -------------------------------------------------------------------------------
    Private Sub ListAllServerDatabases()
        Dim rsDB As ADODB.Recordset
        Dim i As Integer
        txtdata.Clear
        i = 1
        Set rsDB = conn.OpenSchema(adSchemaCatalogs)
        While Not rsDB.EOF
            txtdata.AddItem rsDB!CATALOG_NAME
            rsDB.MoveNext
            i = i + 1
        Wend
        
        rsDB.Close
        Set rsDB = Nothing
        
    End Sub
    --------------------------------------------------------------------------------
    Private Sub Form_Load()
    Call OpenConnection
       Call ListAllServerDatabases
    End Sub
      

  6.   


    Option Explicit
    Dim conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Private Const DB_PROVIDER = "SQLOLEDB"
    Dim sqljb As StringPrivate Sub OpenConnection()
    On Error GoTo EH
    Dim ser, user, pass, ufdata
    ser = txtser
    user = txtuser
    pass = txtpass
    ufdata = txtdataSet conn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    conn.ConnectionString = "driver={SQL Server};" & "server=" & ser & ";uid=" & user & ";pwd=" & pass & ";database=" & ufdata & ""
    conn.Open
    MsgBox "连接成功"
    Exit Sub
    EH:
      MsgBox "连接错误!请检查用户名密码,服务器名称以及数据库是否有误。", vbCritical, "登陆提示"
    End Sub
    '-----------------------------------------------------------------------------
    Private Sub Command2_Click()
    Call OpenConnection
    End Sub
    '-----------------------------------------------------------------------------
    Private Sub Command3_Click()
    'Call OpenConnection
    On Error GoTo EH
    If txtdata.Text = "" Then
    MsgBox "请选择选择数据库!", vbCritical, "登陆提示"
    Exit Sub
    End If
    Open App.Path & "\" & "update.sql" For Input As #1   ' 打开输入文件。
    Do While Not EOF(1)   ' 循环至文件尾。
       Input #1, sqljb   ' 将数据读入变量。
    Loop
    Close #1   ' 关闭文件。
    conn.Execute sqljb
    MsgBox "清除成功", vbOKOnly + vbInformation, "提醒"
    Exit Sub
    EH:
      MsgBox "更新语句不成功,请检查数据库及sql语句是否正确", vbCritical, "登陆提示"
    End Sub
      

  7.   

    上面的满足你的要求错误1:我运行程序就检查OpenConnection的连接属性(如果user,pass属性“txet”为空正常如果user,pass属性“txet”不为空而且连接不正确程序就“MsgBox "连接错误!请检查用户名密码,服务器名称以及数据库是否有误。", vbCritical, "登陆提示"”
    )为什么?因为sqlserver数据库默认的用户名是sa,密码是空
    运行后界面一般这样输入
    txtser.text="你的sqlserver数据库服务器名"
    txtuser.text="sa"
    txtpass.text=""
    txtdata.text="你的数据库名"
      

  8.   

    谢谢online能帮助我!
    现在程序执行后首先会弹出“连接成功”的提示。但是
    我的:
    txtser.text="数据库服务器名"
    txtuser.text="sa"
    txtpass.text=""
    txtdata.text="你的数据库名"
    还没输呢?
    我只想在执行Command2_Click时判断错误或对并相应提示。
    如果不执行Command2_Click而直接执行Command3_Click时Command3_Click可以先检查Command2_Click的结果是否正确如果正确不提示直接执行,如果错误提示“MsgBox "连接错误!请检查用户名密码,服务器名称以及数据库是否有误。", vbCritical, "登陆提示"
    ”不知可不可以。
      

  9.   

    而且如果我进入界面让
    txtser.text="数据库服务器名"
    txtuser.text="sa"
    txtpass.text=""
    txtdata.text="你的数据库名"
    都唯空时执行Command2_Click(连接测试)也提示连接成功只有txtuser.text="sa",txtpass.text=""不为空时才会MsgBox "连接错误!请检查用户名密码,服务器名称以及数据库是否有误。", vbCritical, "登陆提示"
      

  10.   

    如果我Call Command2_Click到Private Sub Command3_Click()的下面就可以直接执行脚本并检查连接是否正确。但是连接错误程序会先提示“连接错误!请检查用户名密码,服务器名称以及数据库是否有误”接着提示“更新语句不成功,请检查数据库及sql语句是否正确”
      

  11.   

    online你不要烦啊!(:
    有啊!我就是按照你的代码测试的。
    1.测试结果运行程序先弹出“连接成功”消息框(不管连接错于对)然后才返回到主界面。
    2.如果我的连接属性没有问题,直接执行Command3_Click(执行脚本)的话提示错误“更新语句不成功,请检查数据库及sql语句是否正确”必须先执行Command2_Click(测试连接)在执行Command3_Click(执行脚本)才能成功!
      

  12.   

    好非常感谢!我的信箱是[email protected]