VB+ACESS
我用VB连接ACESS表(表名user)想做一个注册,一个id(long型,主键),一个用户名(username,字符型),一个密码(mima,字符型),当点击按钮时,判断表里是否有相同的用户名,如果有,则无法添加;如果没有,就添加一个记录。VB连接数据库已经成功!可是我如果仅仅写成:
Private Sub Command1_Click()
Data1.Recordset.AddNew
End Sub
可以添加,但无法判断是否有相同的用户名!跪求那位大侠给出源码!!!
Private Sub Command1_Click()
源码
End Sub万分感谢,我只想通过这样的一个例子了解VB+ACESS的语言应该怎么写!我以前用ASP.NET为平台,后台用C#,连接SQL数据库做过一些程序,可现在转VB之后,感觉完全是晕了!

解决方案 »

  1.   

    用ADO!
    Private Sub Command1_Click()
        dim objConn as adodb.connection
        dim objRst as adodb.recordset
        dim sSql as string
        dim sConn as string    sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb;Persist Security Info=False"
        se objConn = new adodb.connection
        objConn.open sConn
        sSql = "select * from user where username ='" & sUserName & "'"
        set objRst = new adodb.recordset
        objRst.open sSql,objConn,1,3
        if objRst.eof then
            msgbox "该用户已经存在!"
        end if
        objRst.close
        set objRst = nothing
        objConn.close
        set objConn = nothing
        objRst
    End Sub
      

  2.   

    楼上的这个大哥,这个ADO控件,我在部件里怎么找不到啊?我找的一个叫Adodc,没有找到一个叫Adodb的东东啊!而且,这个东东是不是有些什么属性需要在属性栏里设置的?我看你的代码好像都设好了,是不是啊?最后一问:你的代码我在程序里运行不了,最后一句报错:objRst
      

  3.   

    还有
    objRst.open sSql,objConn,1,3
    后面的1,3什么意思?
    谢谢   谢谢
      

  4.   

    我找的一个叫Adodc,没有找到一个叫Adodb的东东啊!引用microsoft activex data object 2.x library附带一个小资料:
    ----------------------------------- 
    常数           常数值           说明 
    ----------------------------------- 
    adOpenForwardOnly 0 缺省值,启动一个只能向前移动的游标(Forward Only)。 
    adOpenKeyset 1 启动一个Keyset类型的游标。 
    adOpenDynamic 2 启动一个Dynamic类型的游标。 
    adOpenStatic 3 启动一个Static类型的游标。 
    ----------------------------------- 
    以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。 --------------------------------------------- 
    Recordset属性   adOpenForwardOnly   adOpenKeyset   adOpenDynamic   adOpenStatic 
    --------------------------------------------- 
    AbsolutePage      不支持            不支持             可读写        可读写 
    AbsolutePosition  不支持            不支持             可读写        可读写 
    ActiveConnection  可读写            可读写             可读写        可读写 
    BOF               只读              只读               只读          只读 
    Book          不支持            不支持             可读写        可读写 
    CacheSize         可读写            可读写             可读写        可读写 
    CursorLocation    可读写            可读写             可读写        可读写 
    CursorType        可读写            可读写             可读写        可读写 
    EditMode          只读              只读               只读          只读 
    EOF               只读              只读               只读          只读 
    Filter            可读写            可读写             可读写        可读写 
    LockType          可读写            可读写             可读写        可读写 
    MarshalOptions    可读写            可读写             可读写        可读写 
    MaxRecords        可读写            可读写             可读写        可读写 
    PageCount         不支持            不支持             只读          只读 
    PageSize          可读写            可读写             可读写        可读写 
    RecordCount       不支持            不支持             只读          只读 
    Source            可读写            可读写             可读写        可读写 
    State             只读              只读               只读          只读 
    Status            只读              只读               只读          只读 
    AddNew            支持              支持               支持          支持 
    CancelBatch       支持              支持               支持          支持 
    CancelUpdate      支持              支持               支持          支持 
    Clone             不支持            不支持 
    Close             支持              支持               支持          支持 
    Delete            支持              支持               支持          支持 
    GetRows           支持              支持               支持          支持 
    Move              不支持            支持               支持          支持 
    MoveFirst         支持              支持               支持          支持 
    MoveLast          不支持            支持               支持          支持 
    MoveNext          支持              支持               支持          支持 
    MovePrevious      不支持            支持               支持          支持 
    NextRecordset     支持              支持               支持          支持 
    Open              支持              支持               支持          支持 
    Requery           支持              支持               支持          支持 
    Resync            不支持            不支持             支持          支持 
    Supports          支持              支持               支持          支持 
    Update            支持              支持               支持          支持 
    UpdateBatch       支持              支持               支持          支持 
    ---------------------------------------- 
    其中NextRecordset方法并不适用于Microsoft Access数据库。 LockType 
    Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下: ----------------------------------- 
    常数         常数值           说明 
    ----------------------------------- 
    adLockReadOnly 1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法 
    adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。 
    adLockOptimistic 3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。 
    adLockBatchOptimistic 4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、删、改的操作。=====定义数据库连接的一些常量
    <%
    Const adOpenForwardOnly  = 0 '游标只向前浏览记录,不支持分页、Recordset、BookMark
    Const adOpenKeyset       = 1 '键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分页、Recordset、BookMark
    Const adOpenDynamic      = 2 '动态游标功能最强,但耗资源也最多。用户对记录说做的修改,增加或删除记录都将反映到记录集中。支持全功能浏览(ACCESS不支持)。
    Const adOpenStatic       = 3 '静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动Const adLockReadOnly     = 1 '锁定类型,默认的,只读,不能作任何修改
    Const adLockPessimistic  = 2 '当编辑时立即锁定记录,最安全的方式
    Const adLockOptimistic   = 3 '只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等
    Const adLockBatchOptimistic = 4 '当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的Const adCmdText  = &H0001
    Const adCmdTable = &H0002
    %>
      

  5.   

    1、不好意思,上面写错了,改为:
    if not(objRst.eof) then
        msgbox "该用户已经存在!"
    end if2、要引用啊,工程->引用->MICROSOFR ACTIVEX DATA OBJECTS 2.6 LIBRALY
    3、1,3是游标
      

  6.   

    还有最后一句objRst是写多的,去掉就可以了。
      

  7.   

    objRst.open sSql,objConn,1,3
    这句报错:  Form子句语法错误
      

  8.   

    sSql = "select * from [user] where username ='" & sUserName & "'"user是关键字,加[]处理
      

  9.   

    感谢大哥指点
    现在这个程序可以运行了!但是,我还有两个问题:
    1。sSql = "select * from [user] where username ='" & sUserName & "'"这个里面的'" & sUserName & "',为什么字段名前有个s,我认为是大哥的笔误。2。实际上,这个程序没有添加记录到数据库。
      

  10.   

    sUserName这不是字段名,是个用户名的变量。
      

  11.   

    那就问实际点:到底是加s,还是不加s???还有,这个程序没有添加记录到数据库,是因为少了一句insert的SQL语句,可是,这样的一段话应该怎么写?写到那里?它肯定是判断有没有重复记录之后的一段代码,如果有重复的话就转回最开始重新执行,没有的话,就插入一条新记录。我现在对这个程序的思路已经很清晰了,可是就是不知道该怎么写,这样一句插入的SQL语句,需不需要多用一个string的变量名来替代。等等等等!大哥,你能不能给我段完整的程序?
      

  12.   

    还有啊,大哥,我发现一个问题,实际上重复的记录值没有进行判断,也就是说msgbox始终没有出现过!
      

  13.   

    不会啊。
    Private Sub Command1_Click()
        dim objConn as adodb.connection
        dim objRst as adodb.recordset
        dim sSql as string
        dim sConn as string
        dim sUserName as string
        dim sPassword as string
        
        sUserName = trim(textbox1.text)
        sPassword = trim(textbox2.text)
        sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb;Persist Security Info=False"
        se objConn = new adodb.connection
        objConn.open sConn
        sSql = "select * from [user] where username ='" & sUserName & "'"
        set objRst = new adodb.recordset
        objRst.open sSql,objConn,1,3
        if not(objRst.eof) then
            msgbox "该用户已经存在!"
            textbox1.SetFocus
        else
            sSql = "insert into [user] (username,mima) values('" & sUserName & "','" & sPassword & "')"
            objConn.execute sSql
        end if
        objRst.close
        set objRst = nothing
        objConn.close
        set objConn = nothing
    End Sub
      

  14.   

    http://community.csdn.net/Expert/topic/3845/3845934.xml?temp=3.187197E-02