Private Sub Command1_Click()
    Dim intCount As Integer
    Dim MsgText As String
    Dim mrc As ADODB.Recordset
    
    Call ConnectString
    If Trim(Text1(0).Text) <> "" And Trim(Text1(1).Text) <> "" And Trim(Text1(2).Text) <> "" And Trim(Text1(3).Text) <> "" And Trim(Text1(4).Text) <> "" And Trim(Text1(5).Text) <> "" And Trim(Text1(6).Text) <> "" Then
        txtSQL = "execute jklj_setup2"
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        If mrc.RecordCount > 0 Then-----------------提示说“对象变量或with块变量未设置。”
                        MsgBox "已经存在相同的记录!", vbOKOnly + vbExclamation, "警告"
                        Text1(0).Text = ""
                        Text1(1).Text = ""
                        Text1(2).Text = ""
                        Text1(3).Text = ""
                        Text1(4).Text = ""
                        Text1(5).Text = ""
                        Text1(6).Text = ""
                        Text1(0).SetFocus
                        mrc.Close
                    Exit Sub
                End If

解决方案 »

  1.   

    Dim mrc As New ADODB.Recordset
      

  2.   

    Dim Conn As ADODB.Connection, Rs As ADODB.RecordsetSet Rs = Conn.Execute(txtSQL)
    If Not Rs.EOF Then
      

  3.   

    谢谢各位!
    但大家的办法都试过了,还是不行呀。
    我代码里的“Call ConnectString”表示连接到数据库。
      

  4.   

    Dim mrc As New ADODB.Recordset
    后,系统提示为“对象关闭时,操作不被允许。”
    是怎么回事呀?
      

  5.   

    mrc.open 
    我建议你去看看MSDN的帮助啊!
    那里比我们说的都详细啊!
      

  6.   

    建议不要用recordcount 
    用.eof .bof
    有时候recordcount会出错
      

  7.   

    if not( mrc.eof and mrc.eof) then .....
      

  8.   

    你好好看看你的连接,肯定是连有问题。就是你调用的那个连接,可能是数据库的路径,。你的odbc设置了吗。设置默认路径了吗?等等反正肯定是连接出了问题,提示就是说没跟数据库连接上。
      

  9.   

    我实在很菜,麻烦大家再看一下。谢谢。
    Public Function ConnectString()
       ConnectString = "provider=sqloledb;server=lifengxia;uid=sa;pwd=;database=mis"
       
    End Function
      

  10.   

    ado.CursorLocation = adUseClient
    ado.CursorLocation = adUseServer
    這兩個是有區別的,如果你要讀取recordcount 你就要用第一種情況的
      

  11.   

    1.你好像没有定义数据库连接对象
    要在程序开始处加上   Dim con as ADODB.Connection2.Public Function ConnectString()
       ConnectString = "provider=sqloledb;server=lifengxia;uid=sa;pwd=;database=mis"
    End Function
    这是你连接函数的全部吗?
    要是的话,得改成:
    Public Function ConnectString()
       con.ConnectString = "provider=sqloledb;server=lifengxia;uid=sa;pwd=;database=mis"
       con.open
    End Function3.Set mrc = ExecuteSQL(txtSQL, MsgText)
    这句是不对的,你的mrc是ADODB.Recordset的实例,他没有ExecuteSQL,应该写成
    con.ExecuteSQL txtSQL总之你程序错误太多了,建议你好好看看ADO的帮助。
      

  12.   

    "Set mrc = ExecuteSQL(txtSQL, MsgText)
    这句是不对的,你的mrc是ADODB.Recordset的实例,他没有ExecuteSQL,应该写成
    con.ExecuteSQL txtSQL"这不可以用吗?
    书上也是这么写的呀?
      

  13.   

    to: intersun(毫无意义的名字)
    首先谢谢你。
    但按你的 2 做,系统提示说“对象不支持命名参数。”
      

  14.   

    ExecuteSQL好像是DAO中的方法,ADO中没有这个方法吧。
      

  15.   

    jklj_setup2
    没有这个存储过程~
      

  16.   

    txtSQL = "execute jklj_setup2"这句话已经证明了,你的存储过程没有返回值~那么根本就不需要什么不需要SET MRC=...所以你这个程序一定不是自己做的~~问题多多哦~~~返回带参数的存储过程,不能直接用那种方法的~
      

  17.   

    bigpig(春天的国度)建议不要用recordcount 
    用.eof .bof
    有时候recordcount会出错坚决反对~~~谁说会出错~~~~我一直用也没出错~如果recordcount返回不了值,只能证明你的记录集执行后面没有参数~如果有参数一定不会出错~
      

  18.   

    也不能说完全不是我自己做的了,借鉴了别人很多而已。:p
    系统在Public Function ConnectString()
       con.ConnectString = "provider=sqloledb;server=lifengxia;uid=sa;pwd=;database=mis"-----这一行提示的。
       con.open
    End Function
    我把这个写在模块里了。
      

  19.   

    ExecuteSQL是自己定义的函数~里面的内容主要是这样写的~我用文字解释一下:首先判断SQL语句,如果以SELECT打头的语句,就返回这个记录集,如果是以INSERT和UPDATE打头的就返回空~证明没有记录集~所以你的程序才会出错~'处理SQL语句返回相应数据集,第一个参数为串入的数据集,第二个参数记录当前记录集的标签,大家在用的时候可以根本不用第2个参数~Public function ExecuteSQL(SQL as string,TXT as string)as adodb.recordset
        
        ......
        ......
    end function这个函数我最后给简化了一下,就是返回数据集的时候才用,不返回数据集的例如INSERT,UPDATE,我就不会用这个函数dim SQL as string
    SQL="Update Table Set Field=Field + 1 Where Field = 'aa'"直接用CONN.EXECUTE SQL 就可以了~说累了~~~休息以下撒~,楼住还不明白,可以把不知道的代码都贴出来,给我发CSDN短信~,记住开贴+分~~~呵呵
      

  20.   

    to:wdwd05(学.NET,从头开始)
    问你个关于存储过程的超菜问题(不许取笑我)
    怎么说呢
    这样说吧:我建了好多张表,但数据输入界面一次要输入的数据是几张表的结合,这时我发现了存储过程,就试用了。但我不知道如何读取、存储数据。
      

  21.   

    首先 存储过程绝对可不是什么 超菜问题,绝对是SQL里面最有学问的问题~存储过程写的好,程序可以不用写多余的触发器,没有多余的触发器,程序的稳定性就有一半的生命保障~存储过程有INPUT 和 OUTPUT 2种,第一种是传入参数,第二种是输出参数~就和你在VB里面写函数一样~所以你定义存储过程的时候,如果有输出函数,就要定义为OUTPUT~这样就可以调用输出参数了~这么累还没有分~郁闷~
      

  22.   

    这样说太麻烦了,可以的话把代码发过来,我看看。
    [email protected]
      

  23.   

    to:intersun(毫无意义的名字)
    发过来了。
      

  24.   

    我知道了。intersun(毫无意义的名字)大哥一开始说的就是对的。“ExecuteSQL好像是DAO中的方法,ADO中没有这个方法。”是我这只小菜笨鸟没领会其意思。
    不好意思,麻烦大家了。
    谢谢。