Private Sub Form_Load()
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2 - 2000
'自动生成编号
Dim rs As New ADODB.Recordset
Dim sql As String
sql = "select * from 会员信息 order by 会员编号"
Screen.MousePointer = vbHourglass
If rs.State = adStateOpen Then rs.Close
On Error GoTo b1
rs.Open sql, Form2.StrCnn
If rs.RecordCount > 0 Then
If Not rs.EOF Then rs.MoveLast
If rs.Fields("会员编号") <> "" Then Text1.Text = "p" & Format(Val(Right(rs.Fields("会员编号"), 6)) + 1, "000000")
Else
Text1.Text = "p000001"
End If
rs.Close
Set rs = Nothing
Screen.MousePointer = vbDefault
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
Exit Sub
b1: cuowut (Err.Description)
End Sub
我用这个进行自动生成代码。
但是我发现rs.recordcount>0
这一项执行了的话就直接执行ELSE了。就算表中有记录多不执行THEN
还有就是rs.Fields("会员编号") 这一项怎么区不出来啊??
这个程序应该怎么修改才正确啊??

解决方案 »

  1.   

    rs.Open sql, Form2.StrCnn ,adopenkeyset,adlockreadonly
      

  2.   

    还是不行啊。
    rs.recordcount>0
    这一项执行了的话就直接执行ELSE了。就算表中有记录也不执行THEN后的语句啊。
      

  3.   

    Private Sub Form_Load()
    Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2 - 2000
    '自动生成编号
    Dim rs As New ADODB.Recordset
    Dim sql As String
    sql = "select * from 会员信息 order by 会员编号"
    Screen.MousePointer = vbHourglass
    If rs.State = adStateOpen Then rs.Close
    On Error GoTo b1
    rs.Open sql, Form2.StrCnn
    If rs.RecordCount > 0 Then
       If Not rs.EOF Then rs.MoveLast
       If rs.Fields("会员编号") <> "" Then Text1.Text = "p" & Format(Val(Right(rs.Fields("会 员编号"), 6)) + 1, "000000")
    Else
        Text1.Text = "p000001"
    End If
    rs.Close
    Set rs = Nothing
    Screen.MousePointer = vbDefault
    Text2.Text = ""
    Text3.Text = ""
    Text4.Text = ""
    Text5.Text = ""
    Text6.Text = ""
    Exit Sub
    b1: cuowut (Err.Description)
    End Sub
      

  4.   

    这样试试
    Private Sub Form_Load()
    Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2 - 2000
    '自动生成编号
    Dim rs As New ADODB.Recordset
    Dim sql As String
    sql = "select * from 会员信息 order by 会员编号"
    Screen.MousePointer = vbHourglass
    If rs.State = adStateOpen Then rs.Close
    On Error GoTo b1
    rs.Open sql, Form2.StrCnn
    If rs.RecordCount = 0 Then
        Text1.Text = "p000001"
    Else
        If Not rs.EOF Then rs.MoveLast
        If rs.Fields("会员编号").value <> "" Then Text1.Text = "p" & Format(Val(Right(rs.Fields("会员编号").value, 6)) + 1, "000000")
    End If
    rs.Close
    Set rs = Nothing
    Screen.MousePointer = vbDefault
    Text2.Text = ""
    Text3.Text = ""
    Text4.Text = ""
    Text5.Text = ""
    Text6.Text = ""
    Exit Sub
    b1: cuowut (Err.Description)
    End Sub
      

  5.   

    你的游标类型应该是静态的才,记录集里的记录数才是有效的记录集打开那重新写下
    rs.Open sql, Form2.StrCnn adOpenStatic, adLockOptimistic, -1
      

  6.   

    上面的说得对,检查一下游标类型,在帮助里有介绍,recordcount只能在支持它的集合上使用,如果不支持返回-1。其实不必用此函数,因为数据量大的情况下,太慢。
    if not rs.eof and not rs.bof then
    end if
    即可,如果RS中没有数据的话,BOF EOF都是TRUE
      

  7.   

    If rs.Fields("会员编号") <> "" Then
     Text1.Text = "p" & Format(Val(Right(rs.Fields("会员编号"), 6)) + 1, "000000")
    Else
    Text1.Text = "p000001"
    End If
    关键在你数据库里“会员编号”里取到的是什么数据,检查一下
    debug.print Val(Right(rs.Fields("会员编号"), 6))
    我猜是这里有问题。
    也可以如此表示 rs!会员编号
      

  8.   

    Dim rs As New ADODB.Recordset
    Dim sql As String
    sql = "select * from 会员信息 order by 会员编号"
    Dim pConn As New Connection          '要加上这个
    pConn.CursorLocation = adUseClient
    If rs.State = adStateOpen Then rs.Close
    On Error GoTo b1
    rs.Open sql, Form2.StrCnn
    .....
      

  9.   

    Leftie(左手,为人民币服务)回答是正确的,你用的是什么数据库,把连接字符串写出来,一定是你的数据库或服务提供者不支持,可以用support检查一下
      

  10.   

    谢谢大家。
    我知道是哪儿错了。
    SQL语句的问题,因为不能够排序那个列不是数字。自动排序已经解决了。