首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 大家帮忙看几句程序,不知道问题在哪里 [已结贴,结贴人:nbzz505]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-18 17:45:15 楼主
    我写了一个抽奖程序,抽中的号码就删掉了,下次再从数据库浏览剩余的号码,但运行是抽过的号码还是会出现,过程如下:
    Private Sub Timer1_Timer()
        Dim sid As Integer, strRs As String
        Dim rs As DAO.Recordset
       
        Set db = OpenDatabase(App.Path & "\sample.mdb")
        strRs = "select * from mingdan"
        Set rs = db.OpenRecordset(strRs)
       
        Do Until rs.EOF
            Label2.Caption = Int(Rnd * rs!id)
            rs.MoveNext
        Loop
        If rs.RecordCount = 0 Then
            MsgBox ("找不到合适的记录")
            Timer1.Enabled = False
        End If
       
        rs.Close
        db.Close
    End Sub

    Private Sub Command4_Click()
        Timer1.Enabled = False
        Set db = OpenDatabase(App.Path & "\sample.mdb")
        Dim rs As DAO.Recordset
        strRs = "select * from mingdan where id=" & Int(Label2.Caption) & ""
        Set rs = db.OpenRecordset(strRs)
        If Not rs.EOF Then
            rs.Delete
            rs.Close
            db.Close
            MsgBox "中奖者是:" & Label2.Caption & "号"
        Else
            MsgBox ("该号码已抽过")
        End If
        Command3.Enabled = True
    End Sub

    Private Sub Command3_Click()
        Timer1.Enabled = True
        Timer1_Timer
        Command3.Enabled = False
    End Sub
    120  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 19:41:451楼 得分:0
    怎么没有人回答,是我写的不够详细吗
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • DengXingJie
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 22:55:212楼 得分:0
    strRs = "select * from mingdan where id=" & Int(Label2.Caption) & ""
    改成这个试试
    strRs = "delete * from mingdan where id=" & Int(Label2.Caption) & ""

    你的思路可以再改进一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lsftest
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 00:20:253楼 得分:0
    dao.......咸丰年代的东西了.....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 10:08:084楼 得分:0
    2楼好象不对啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jhone99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 10:36:045楼 得分:0
    Label2.Caption = Int(Rnd * rs!id)

    id乘Rnd后又取整还等于id吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • t69490741
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 10:48:476楼 得分:0
    你好像只是从数据库中提取出数据了,并没有删除数据库中的已抽中的号码!
    你可以参照二楼的删除命令,把已经抽中的号码从数据库中删除,这样下次提取数据库的时候就没有这个号码存在了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • _l_
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 10:52:517楼 得分:110
    给你看段我的程序
    ST是个全局变量数组  把所有人的名字一枪头读入数组
    随机产生的名字显示在LabXM 上
    按停止后就把LabXM 里的数字ADDITEM 到LIST1中 

    红色部分就是和LIST1进行比较


    Private Sub Timer1_Timer()
    Dim i As Long
    Dim t As Integer

    LabXM = ""
    LabDetail = ""
    i = 0
    R1:
    Randomize
    i = CLng((UBound(ST) * Rnd))
    If i < 0 Then GoTo R1
    If Check1.Value = 1 Then
        For t = 1 To List1.ListCount
            List1.ListIndex = t - 1
          If Trim(Mid(List1, InStr(List1, "|") + 1)) = Trim(ST(i) & " ") Then
            i = -1
            Exit For
          End If
        Next

    End If
    If i < 0 Then GoTo R1
    If LX = "" Then
        LabXM = ST(i)
        LabDetail = ST(i)
    End If
    End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:11:228楼 得分:0
    引用 6 楼 t69490741 的回复:
    你好像只是从数据库中提取出数据了,并没有删除数据库中的已抽中的号码!
    你可以参照二楼的删除命令,把已经抽中的号码从数据库中删除,这样下次提取数据库的时候就没有这个号码存在了!

    If Not rs.EOF Then
            rs.Delete
    这个就已经删除了啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jhone99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:29:439楼 得分:0
    Label2.Caption 与 rs!id 相差十万八千里
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 12:13:0910楼 得分:0
    引用 9 楼 jhone99 的回复:
    Label2.Caption 与 rs!id 相差十万八千里


    能否具体说明
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fu0212
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 12:28:4311楼 得分:0

    VB code
    If Not rs.EOF Then rs.Delete [color=#FF0000]rs.update[/color] rs.Close db.Close MsgBox "中奖者是:" & Label2.Caption & "" Else


    看我的吧 加分 在加100哦 哈哈
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vbman2003
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 12:30:4312楼 得分:0
    rs.delete
    rs.update  '是不是要加上这个?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jhone99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 13:12:0813楼 得分:0
    Label2.Caption 与 rs!id 不等
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 13:19:5814楼 得分:0
    引用 13 楼 jhone99 的回复:
    Label2.Caption 与 rs!id 不等


    你是对的,我现在还在想怎么解决,rnd*rs!id 变成在rs!id 范围内随便取个数字了而不是取数据库中的数字
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jhone99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 13:25:3115楼 得分:10
    可以把记录放到数组里,根据rnd随机选取
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jhone99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 13:25:3216楼 得分:0
    可以把记录放到数组里,根据rnd随机选取
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jhone99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 13:28:3217楼 得分:0
    记录放数组里,用rnd随机选取
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 13:34:5518楼 得分:0
    谢谢楼上,放数组能否有代码例子吗?我再加分
    弄一个动态数组吗
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • _l_
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 13:42:0019楼 得分:0
    引用 18 楼 nbzz505 的回复:
    谢谢楼上,放数组能否有代码例子吗?我再加分
    弄一个动态数组吗


    看来我在7楼的回复你压根没看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 13:52:1120楼 得分:0
    唉,水平太差,一下子看不大懂
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • _l_
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 14:10:3621楼 得分:0
    我是程序里 名字是读取文本文件里的 1行代表一个人的信息
    Public ST
    Public iCount As Long
    Public LX As String

    Private Sub Command1_Click()
    '定义一个变量 先吧所有数据都到里面
    Dim txtTemp
    Dim Textline As String
    CommonDialog1.CancelError = True
    On Error GoTo ErrHandler
    ' 设置标志
    CommonDialog1.Flags = cdlOFNHideReadOnly
    ' 设置过滤器
    CommonDialog1.Filter = "TEXT Files (*.txt)|*.txt"
    ' 指定缺省的过滤器
    CommonDialog1.FilterIndex = 2
    ' 显示“打开”对话框
    CommonDialog1.ShowOpen
    ' 显示选定文件的名字
    ' CommonDialog1.FileName
    txtTemp = ""
        Open CommonDialog1.FileName For Input As #1  ' 打开配置文件。
            Do While Not EOF(1)
                Line Input #1, Textline
                If Trim(Textline & " ") <> "" Then
                    txtTemp = txtTemp & "|" & Textline
                End If

            Loop
        Close #1
    txtTemp = Mid(txtTemp, 2)
    ST = Split(txtTemp, "|")
    iCount = UBound(ST)
    LX = ""
    ErrHandler:
    End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 15:28:4222楼 得分:0
    引用 17 楼 jhone99 的回复:
    记录放数组里,用rnd随机选取


    Dim sid() As Integer

    ReDim sid(rs.RecordCount)
    For i = 0 To rs.RecordCount
        sid(i) = rs("id")
    Next i

    Do Until rs.EOF
        Label2.Caption = Int(Rnd * sid(i))
        rs.MoveNext
    Loop

    结果下标越界
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • _l_
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 15:34:3723楼 得分:0
    dim st
    dim txttemp
    txttemp=""
    Do not rs.EOF
        txttemp=txttemp & trim(rs("id") & " ") & "|" 
        rs.MoveNext
    Loop
    ST = Split(txtTemp, "|")

    ST就是你要的数组了
    再配合我7楼的代码
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 16:00:3024楼 得分:0
    数组已经取得,但从数组中随机取数就实现不了了
    Label2.Caption = Int(Rnd * sid(i))
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • _l_
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 16:05:2125楼 得分:0
    看见我7楼里这个代码吗?
    Randomize
    i = CLng((UBound(ST) * Rnd))

    这个就是随机数字的产生
    ST(I)就是抽奖结果 

    得了 这个程序读快帮你写好了

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 16:13:2526楼 得分:0
    比如说,我现在数据库里只有两条记录14 和 30
    i = CLng((UBound(ST) * Rnd))
    这个等于是14范围内随机取一个数或者30内随机取一个数了
    删除过的数字还是会跳出来
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 16:16:3027楼 得分:0
    不过_l_ 也辛苦你了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • _l_
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 16:22:1528楼 得分:0
    http://clubfiles3.liba.com/2008/08/19/16/16046250.rar

    你看看我的程序吧  有源代码的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nbzz505
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 16:33:0529楼 得分:0
    谢谢……
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jhone99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 17:07:3830楼 得分:0

    Label2.Caption = sid(int(rnd*rs.RecordCount ))
    修改 删除 举报 引用 回复