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("会员编号") 这一项怎么区不出来啊??
这个程序应该怎么修改才正确啊??
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("会员编号") 这一项怎么区不出来啊??
这个程序应该怎么修改才正确啊??
rs.recordcount>0
这一项执行了的话就直接执行ELSE了。就算表中有记录也不执行THEN后的语句啊。
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
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
rs.Open sql, Form2.StrCnn adOpenStatic, adLockOptimistic, -1
if not rs.eof and not rs.bof then
end if
即可,如果RS中没有数据的话,BOF EOF都是TRUE
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!会员编号
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
.....
我知道是哪儿错了。
SQL语句的问题,因为不能够排序那个列不是数字。自动排序已经解决了。