VB6.0 怎么实现自动生成编号?

我在添加数据是要自动生成一个编号(我使用的是Asscess2000数据库,使用了Adodc1 DTPicker1等基本控件)
格式:XXX-XXX-XXX
第一个XXX是部门缩写,在我的数据表type中
第二个XXX是根据DTPicker1所选的时间至2007-1-1的第XXX周(初始时间是2007年1月1日(星期一),如DTPicker1选择2007-1-1,则XXX=001;2007-2-8,则XXX=002依次类推。
第三个XXX是从001开始的自动编号
(001 002 003 004 。。。。。。)每添加一条自动+1
请问高手、大虾、神人们如何实现?谢谢了
生成在一个文本框Text1即可
可是我不知道第二个XXX怎么实现
如DTPicker1选择2007-1-1,则XXX=001;2007-1-8,则XXX=002依次类推。 (上面写错了,不好意思)2007-1-15,则XXX=003,2007-1-22,则XXX=004,依次类推。
每个部门的第三个XXX都是从001开始排的。

'调试通过。。。。。。。。。。。。

Option Explicit
Dim idnum(2) As Long '主要保存用于自动增长的ID 一个部门存储一个,有多少部门有多少数组

Private Sub Combo1_Click()
Text1.Text = getNewID
End Sub

Private Sub Command1_Click()
'当我们保存记录时,需要让idnum+1 并且保存到文件中去
idnum(Combo1.ListIndex + 1) = idnum(Combo1.ListIndex + 1) + 1
Dim fname As String
If Right(App.Path, 1) = "\" Then
fname = App.Path & "myid.txt"
Else
fname = App.Path & "\myid.txt"
End If
Open fname For Output As #1
'每个部门的顺序要牢记 或者你改成ini读取方式
Print #1, "id=" & CStr(idnum(1))
Print #1, "id=" & CStr(idnum(2))
Close #1
End Sub

Private Sub Command2_Click()
Text1.Text = getNewID
End Sub

Private Sub DTPicker1_Change()
Text1.Text = getNewID
End Sub

Private Sub Form_Load()
On Error Resume Next
Command1.Caption = "保存编号"
Command2.Caption = "生成编号"
Combo1.AddItem "开发部"
Combo1.AddItem "质检部"
Combo1.ListIndex = 0

'自动增长id我主要通过记录到文件中来实现
'在程序初始化时判断当前目录有没有myid.txt 如果没有刚建立其内容为id=***,有的话刚把***读取出来
Dim fname As String
If Right(App.Path, 1) = "\" Then
fname = App.Path & "myid.txt"
Else
fname = App.Path & "\myid.txt"
End If

If Dir(fname) = "" Then
'说明文件不存在
Open fname For Output As #1
Print #1, "id=0"
Print #1, "id=0"
idnum(1) = 0
idnum(2) = 0
Close #1
Else
'文件存在读取id值
Open fname For Input As #1
Dim aline As String
Line Input #1, aline
idnum(1) = Val(Mid(aline, 4))

Line Input #1, aline
idnum(2) = Val(Mid(aline, 4))
Close #1
End If

End Sub

Private Function getNewID() As String
'第一步,得到部门编号
'你应该根据选择的部门名称查询到对应的部门编号,在此我省去查询数据库的过程,直接得到编号
Dim partid As String
partid = Format(Combo1.ListIndex + 1, "000")

Dim dataid As String
'此处日期的控制判断,你自己考虑解决吧
dataid = Format((DTPicker1.Value - CDate("2006-12-31")) \ 7 + 1, "000")
Dim addid As String

'超出范围自行控制
addid = Format(idnum(Combo1.ListIndex + 1) + 1, "000")
getNewID = partid & dataid & addid

End Function
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-03-08
1. 在 包含 type 字段的表中建立 ID 字段, 类型为 自动编号
2. 用 datagrid 和 adodc 关联数据库以及表
3. 在 form 上画出 command1 , text1 和 DTPicker1 控件
4. 在command1 中添加代码
dim i as integer'定义一个全局变量,就是放到程序的最前面,不要放到sub块里面

Private Sub Command1_Click()
i=DateDiff("ww", "2007-1-1", DTPicker1.Value) + 1
'判断长度
'如果长度为1,补2个0
if len(i)=1 then
text1.Text="00"& i
else '否则补1个0,因为最大52个星期。2位数,所以补1个0
text1.Text="0"& i
end if

Datediff日期计算
"ww"表示周(星期)
用DTPicker1.Value-2007-1-1默认为0,所以+1
第2个回答  2008-03-07
方法一:
你的数据库该表应该有个自动递增ID,每增加记录的时候可以先读出当前数据库表中递增ID号的最大数,然后在你的第三个XXX那里加上1即可
方法二:加个控件记录你当前已经最大ID号,然后在你的xxx那里+1即可
第3个回答  2008-03-07
1. 在 包含 type 字段的表中建立 ID 字段, 类型为 自动编号
2. 用 datagrid 和 adodc 关联数据库以及表
3. 在 form 上画出 command1 , text1 和 DTPicker1 控件
4. 在command1 中添加代码

Dim iniDate As Date
iniDate = "2007-01-01"

Text1.Text = Adodc1.Recordset("type") & "-" & Format(Int((DTPicker1.value - iniDate) / 7), "000") & "-" & Format(Adodc1.Recordset("ID"), "000")

注: 楼主说明中需要取的是2007-01-01至dtpicker1的周数,但例子中给出的却是2007-01-01至dtpicker1的月数,如果是月数,则用以下代码

Dim iniDate As Date
iniDate = "2007-01-01"

Text1.Text = Adodc1.Recordset("type") & "-" & Format((Year(DTPicker1.Value) - 2007) * 12 + Month(DTPicker1.Value), "000") & "-" & Format(Adodc1.Recordset("ID"), "000")

使用: 在 datagrid 中选择一条记录,单击 command1, text1即生成编号
第4个回答  2008-03-07
dim i as integer
i=DateDiff("ww", "2007-1-1", DTPicker1.Value) + 1
'判断长度
'如果长度为1,补2个0
if len(i)=1 then
text1.Text="00"& i
else '否则补1个0,因为最大52个星期。2位数,所以补1个0
text1.Text="0"& i
end if

Datediff日期计算
"ww"表示周(星期)
用DTPicker1.Value-2007-1-1默认为0,所以+1
相似回答