注册 登录
编程论坛 VB6论坛

求助!如何用vb6.0实现批量自动填充序列号

awdrgy1223 发布于 2016-06-05 20:43, 7197 次点击
数据库是ACCESS,表格名称为表1,在窗体设置4个combobox,combo1为字母A-Z、combo2为数字01-99、combo3为数字01-99、combo4为状态,只有“使用”和“空闲”两个选项,还有一个text“备注”。假设combo1选择A,combo2选择01,combo3选择16,combo4选择使用,text备注不填,请教大神们,如何在VB中实现在表格中批量添加这些数据?代码怎么写?combo4和备注是统一的,变化的只有combo1-3。
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2016-6-5 20:46编辑过]

15 回复
#2
xiangyue05102016-06-06 13:06
说实话没看明白你说批量是什么意思
如果是从数据库中得到这些数据,填充到Combo中,可以使用SQL语言进行查询
比如combo1, “Select distinct SUBSTRING(号码,1,1) From 表名” ,其他的几个是类似的
注: 1. SQL测试通过, Access不清楚,最好测试一下
     2. SUBSTRING(号码,1,1) 第一个1 是从第一位开始, 第二个1是取一位字符
     3. 修改表名
     4. distinct 是去除重复,根据情况选用

如果是反过来的话,就是简单的增加数据,combo1~3只有一个被选中,何来批量。即使是批量也只是循环而已
#3
ZHRXJR2016-06-06 13:34
如果批量录入,就不需要ComboBox控件了,只要输入你需要批量录入的数量就可以,当A01-**中的**大于99,就自动为A02-01开始,当**大于99,就自动为A03-01开始,以此类推。
例如录入数量你输入的是500条,那么录入后的结果就是A01-01到A06-05(01-99是99条记录)。
是不是这个意思,如果是,可以给你做一个。
#4
awdrgy12232016-06-06 23:08
回复 3楼 ZHRXJR
是的,大概就是这个意思,不过有一点,我想灵活一点,前面那个不规定是A,也可以是其它字母B-Z或01-99,其实就像平时用的excel表,内容是根据需要输入,下拉的话,会自动填充序列,只不过在VB中我不会实现。不知道可不可以帮我做一个,谢谢。

[此贴子已经被作者于2016-6-6 23:19编辑过]

#5
awdrgy12232016-06-06 23:13
回复 2楼 xiangyue0510
我的意思是我在文本输入A01-01,然后按添加按钮,添加到表中,一条一条信息录入太麻烦,所以才想输入一个比较灵活的字符,批量添加进表里。我是新手哈,用COMBO是我自己想出来的,比如com1选A,com2选01,com3选16,就是批量添加A01-01到A01-16这段。

[此贴子已经被作者于2016-6-6 23:16编辑过]

#6
xiangyue05102016-06-07 09:00
以下是引用awdrgy1223在2016-6-6 23:13:32的发言:

我的意思是我在文本输入A01-01,然后按添加按钮,添加到表中,一条一条信息录入太麻烦,所以才想输入一个比较灵活的字符,批量添加进表里。我是新手哈,用COMBO是我自己想出来的,比如com1选A,com2选01,com3选16,就是批量添加A01-01到A01-16这段。

如果是向数据库录入数据,每个状态除非是完全一样的,要不就无法实现你说的批量。程序不知道哪条记录是使用 ,哪条未使用。
如果是一样的,那你用combo还是textbox都可以。无非就是字符段操作+循环+添加记录的代码。
#7
awdrgy12232016-06-07 10:07
回复 6楼 xiangyue0510
状态在批量添加的那组数据中是一致的,请问代码应该怎么写?
#8
xiangyue05102016-06-07 10:52
以下是引用awdrgy1223在2016-6-7 10:07:28的发言:

状态在批量添加的那组数据中是一致的,请问代码应该怎么写?

这个难么?……
数据库连接我就不给你说了,不清楚你用的是ADO还是DAO。
按照一开始的说法,使用的Combo1~3
程序代码:

'连接数据库的代码
'……
For i= 1 to cint(trim(combo3))

 Dim no1 , no2 , no3 as string  

 no1 = trim(combo1)

 no2 = trim(combo2)

 no3= i

 if i<10 then  no3= "0" & i

 TheID =no1  &  no2 & "-" no3  


 sqltxt="insert into 表名(号码,状态) values("& TheID & ",'使用')"

 '执行sqltxt语句的代码
'……
Next i
#9
ZHRXJR2016-06-07 12:39
首先每次录入的数量你自己可以设置,例如100条,200条,1000条,10000条等等,但录入必须要有规律,例如首先录入A01-01到A99-99,然后录入B01-01到B99-99等等。
或在一个文本框输入前面的字符,例如输入D,那么就可以录入D01-01到D99-99,当然如果录入数量不足9801条,例如1000条,那么录入的就是D01-01到D11-10,以此类推。
如果你想在每次录入过程中改变前面的字符,这个非常困难,几乎办不到。
如果你在录入前,改变录入的起始号码与终止号码,这个也可以办到。
这些问题清楚了,再给你做。

[此贴子已经被作者于2016-6-7 12:41编辑过]

#10
awdrgy12232016-06-07 15:04
回复 8楼 xiangyue0510
您好
if i<10 then  no3= "0" & i
 TheID =no1  &  no2 & "-" no3
这句话看不明白,能解释下吗?
想了下,明白了,i<10 就是定义它能显示01-09,但我这里显示出来的是1-9
现在已经搞掂了

[此贴子已经被作者于2016-6-7 22:05编辑过]

#11
awdrgy12232016-06-07 15:11
以下是引用ZHRXJR在2016-6-7 12:39:29的发言:

首先每次录入的数量你自己可以设置,例如100条,200条,1000条,10000条等等,但录入必须要有规律,例如首先录入A01-01到A99-99,然后录入B01-01到B99-99等等。
或在一个文本框输入前面的字符,例如输入D,那么就可以录入D01-01到D99-99,当然如果录入数量不足9801条,例如1000条,那么录入的就是D01-01到D11-10,以此类推。
如果你想在每次录入过程中改变前面的字符,这个非常困难,几乎办不到。
如果你在录入前,改变录入的起始号码与终止号码,这个也可以办到。
这些问题清楚了,再给你做。


您好,每次录入的数量不是固定,是自己输入多少就录入多少,例如A01-01到A01-(02-99),自己输入多少就录多少,不用自动跳转到A02,A01录入结束,然后再自行设置A02录入多少。第一个是字母或数字想要灵活设置,也就是起始号码可以自行灵活设置,终止号码是根据自己需要设置。
#12
awdrgy12232016-06-07 16:26
For i= 1 to cint(trim(combo3))
 Dim no1 , no2 , no3 as string  
 no1 = trim(combo1)
 no2 = trim(combo2)
 no3= i
 if i<10 then  no3= "0" & i
 TheID =no1  &  no2 & "-" no3

TheID 提示变量未定义
#13
awdrgy12232016-06-07 17:03
在窗体上设置了一个隐藏的文本框定义为TheID.text,解决了。

[此贴子已经被作者于2016-6-7 20:16编辑过]

#14
ZHRXJR2016-06-08 20:22
只有本站会员才能查看附件,请 登录

关键代码:1、启动窗体代码:
程序代码:
Private Sub Form_Load()
Combo1.Clear
For I = 65 To 90
Combo1.AddItem Chr(I)
Next I
With MSFlexGrid1
    .Cols = 4
    .Rows = 1
    .TextMatrix(0, 0) = Space(1) & "序号"
    .TextMatrix(0, 1) = Space(4) & "号码"
    .TextMatrix(0, 2) = Space(4) & "状态"
    .TextMatrix(0, 3) = Space(4) & "备注"
    .ColWidth(0) = 700
    .ColWidth(1) = 1200
    .ColWidth(2) = 1200
    .ColWidth(3) = 1200
End With
End Sub

2、点击【选择录制】的代码:
程序代码:
Private Sub Command2_Click()
If Val(Text1.Text) < 1 Or Val(Text1.Text) > 9801 Then
    MsgBox "录制的数量不能大于9801条,也不能小于1条!"
    Exit Sub
End If
If Combo1.Text = "" Then
    MsgBox "录制的首字母必须选择!"
    Exit Sub
End If
Dim LZSL As Integer, SZM As String, LZYS As Integer
Dim AA() As String, BB() As String, CC() As String, I As Integer, J As Integer, ZF1 As String, ZF2 As String, KKL As Integer
LZSL = Val(Text1.Text)
SZM = Combo1.Text
LZYS = LZSL \ 99
If LZSL / 99 = Int(LZSL / 99) Then
LZYS = LZYS         '得到99的整数倍
Else
LZYS = LZYS + 1     '得到99的整数倍
End If
ReDim AA(1 To LZYS, 1 To 99), BB(1 To LZYS, 1 To 99), CC(1 To LZYS, 1 To 99)
For I = 1 To LZYS
    For J = 1 To 99
        KKL = KKL + 1
        If KKL > LZSL Then Exit For
        If I < 10 Then
        ZF1 = "0" & CStr(I)
        Else
        ZF1 = CStr(I)
        End If
        If J < 10 Then
        ZF2 = "0" & CStr(J)
        Else
        ZF2 = CStr(J)
        End If
        AA(I, J) = SZM & ZF1 & "-" & ZF2   '生成号码
        BB(I, J) = "使用"                  '生成状态
        CC(I, J) = ""                    '生成备注
    Next J
Next I
KKL = 0
MSFlexGrid1.Clear
With MSFlexGrid1
    .Cols = 4
    .Rows = 1 + LZSL
    .TextMatrix(0, 0) = Space(1) & "序号"
    .TextMatrix(0, 1) = Space(4) & "号码"
    .TextMatrix(0, 2) = Space(4) & "状态"
    .TextMatrix(0, 3) = Space(4) & "备注"
    .ColWidth(0) = 700
    .ColWidth(1) = 1200
    .ColWidth(2) = 1200
    .ColWidth(3) = 1200
    For I = 1 To LZYS
    For J = 1 To 99
    KKL = KKL + 1
        If KKL > LZSL Then Exit For
    .TextMatrix((I - 1) * 99 + J, 0) = (I - 1) * 99 + J
    .TextMatrix((I - 1) * 99 + J, 1) = AA(I, J)
    .TextMatrix((I - 1) * 99 + J, 2) = BB(I, J)
    .TextMatrix((I - 1) * 99 + J, 3) = CC(I, J)
    Next J
    Next I
End With
End Sub
#15
awdrgy12232016-07-11 13:13
回复 14楼 ZHRXJR
非常感谢
#16
pengzhanggui2016-07-11 15:08
打開mdb數據庫,直接複製粘貼是最快的
1