| 网站首页 | 业界新闻 | 群组 | 人才 | 技术文章 | 下载频道 | 博客 | 代码贴 | 编程论坛
绝地游戏外挂辅助教学千里之行 始于足下
共有 316 人关注过本帖
标题:删除ListView1中的记录
只看楼主 收藏
opelwang
Rank: 1
等 级:新手上路
帖 子:76
专家分:3
注 册:2009-7-2
结帖率:87.5%
  已结贴   问题点数:20  回复次数:4   
删除ListView1中的记录
窗体中,加载Access中的数据到ListView1列表中后,

可以选择ListView1中的多项内容,点击删除后,对应的Access数据库的数据,也一并删除。

同时,Access数据中的序号,重新按顺序编号。

求解,谢谢!  附件:  
附件: 您没有浏览附件的权限,请 登录注册
2017-08-08 19:47
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:189
帖 子:4068
专家分:25057
注 册:2008-10-15
  得分:0 
百度到一个函数,你自己测试一下吧。

'============================================================================================================================
'-函数名称: AutoNum
'-功能描述: 具有断号重续功能的自动编号函数,支持文本型和长整型数值的自动编号
'-输入参数: 参数1:TableName 必需的,表名
' 参数2:FieldName 必需的,自动编号字段名
' 参数3:Prefixal 可选的,编号前缀,编号字段数据类型为文本时才起作用
' 参数4:Digit 可选的(文本型编号时为必需),文本型编号位数(不包含前缀的)
' 参数5:SerialNumber 可选的,设为true时使用断号重续,设为false时不理会断号,只在已有最大编号上加1
'-其它说明: 使用文本型自动编号时,如果记录数目可能会比较大时,建议使用含有日期的前缀或将编号位数设大一些,否则如果达到编号
' 上限将不能添加记录
'
'-使用注意: 调用的自动编号字段必须设置唯一索引,并且不能允许为空,最好是作为主键使用
'-返回参数: 正常情况下返回从1开始的最小断号,如无断号返回最大号加1;出错时返回Null
'-兼 容 性: 字段的数据类型必须为文本型或者长整型数值,如设成其它均会只返回Null
'-使用示例: Me.OrderID.DefaultValue="""" & AutoNum("Orders","OrderID","OD" & Format(Date(),"yyyymm"),5) & """"
' 返回值:OD19910100001,OD19910100002,OD19910400001,……
'-相关调用:
'-作 者: 红尘如烟
'-创建日期: 20010-4-25
'=============================================================================================================================
Function AutoNum(TableName As String, FieldName As String, _
Optional Prefixal As String, Optional Digit As Integer, _
Optional SerialNumber As Boolean = False) As Variant
On Error GoTo Err_AutoNum
Dim strSQL As String
Dim intDataType As Integer
Dim rst As DAO.Recordset
Dim strErrMsg As String
Dim intI As Integer
Dim strExpr As String
If TableName = "" Or FieldName = "" Then Err.Raise 3265
If TableName Like "[[]*]" Then TableName = Mid$(TableName, 2, Len(TableName) - 2)
If FieldName Like "[[]*]" Then FieldName = Mid$(FieldName, 2, Len(FieldName) - 2)
strExpr = Prefixal
strExpr = Replace(strExpr, "'", "''")
intDataType = CurrentDb.TableDefs(TableName).Fields(FieldName).Type
If intDataType = 10 Then
If Digit < 1 Then Err.Raise 1, , "文本型自动编号的编号位数不能小于1位。"
If SerialNumber Then
strSQL = "SELECT (Right([" & FieldName & "]," & Digit & ")+0) AS Expr1000 FROM [" & TableName & "] " & _
"WHERE Left([" & FieldName & "]," & Len(Prefixal) & ")= '" & strExpr & "' " & _
"ORDER BY (Right([" & FieldName & "]," & Digit & ")+0);"
Else
strSQL = "SELECT Max(Right([" & FieldName & "]," & Digit & ")+0) AS Expr1000 FROM [" & TableName & "] " & _
"WHERE Left([" & FieldName & "]," & Len(Prefixal) & ")= '" & strExpr & "';"
End If
ElseIf intDataType = 4 Then
If SerialNumber Then
strSQL = " SELECT [" & FieldName & "] AS Expr1000 FROM [" & TableName & "] ORDER BY [" & FieldName & "];"
Else
strSQL = " SELECT Max([" & FieldName & "]) AS Expr1000 FROM [" & TableName & "];"
End If
Else
Err.Raise 2, , "不支持此数据类型的自动编号。"
End If
' Debug.Print strSQL
Set rst = CurrentDb.OpenRecordset(strSQL)
If rst.RecordCount = 0 Then
AutoNum = 1
Else
If SerialNumber Then
rst.MoveLast
If rst!Expr1000 = rst.RecordCount Then
AutoNum = rst.RecordCount + 1
Else
rst.MoveFirst
For intI = 1 To rst.RecordCount
If rst!Expr1000 <> intI Then
AutoNum = intI
Exit For
Else
rst.MoveNext
End If
Next
End If
Else
AutoNum = Nz(rst!Expr1000, 0) + 1
End If
End If
If intDataType = 10 Then
If Len(AutoNum) > Digit Then
Err.Raise 3, , "自动编号已达最大上限,不能再添加记录。"
Else
AutoNum = Prefixal & Format$(AutoNum, String$(Digit, "0"))
End If
End If
Exit_AutoNum:
Set rst = Nothing
Exit Function
Err_AutoNum:
AutoNum = Null
Select Case Err
Case 3265
strErrMsg = "指定的表名或字段名不存在。"
Case Else
strErrMsg = Err.Description
End Select
MsgBox "#" & Err & vbCrLf & strErrMsg, vbCritical, "自动编号函数出错"
Resume Exit_AutoNum
End Function
转至《Office中国论坛》
-------------------
我想到的是对整个数据库的数据重新更新,编排序号。
你的不重复关键字,没有确定,只能以序号来确定,所以这个编排序号,需要倒序进行。

指针移最后
N=取记录条数
do while  数据库不是在头 or N>0
更新序号为 N
n=N-1
指针向前移
loop

一句话,时间都要花费很长的时间,随着数据库的增长,这个时间会越来越长。
-------
我的电脑上不装 MS OFFICE 了,所以你的程序我无法调试。
另外,所有的变量都强烈建议申明,一是选项里开这个选项,二是代码窗口第一行凡没有 Option Explicit 这句的,手动补上。可以免去很多麻烦。

-------------
问一句,为啥要排数据库里的序号?

[此贴子已经被作者于2017-8-9 11:03编辑过]


授人于鱼,不如授人于渔
早已停用QQ了
2017-08-09 11:01
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:558
专家分:3188
注 册:2016-5-10
  得分:0 
你的程序大概修改了一下,应该复合你的要求。

可以多选记录一次删除并重新设置序号的连续记录。
附件: 您没有浏览附件的权限,请 登录注册

QQ    2653043392
2017-08-09 12:19
opelwang
Rank: 1
等 级:新手上路
帖 子:76
专家分:3
注 册:2009-7-2
  得分:0 
回复 3楼 ZHRXJR
感谢版主帮忙!
测试了下,有点新意,现提三个问题,敬请指点,谢谢!

如下图所示:

1. 红色框圈住的部分,序号可否修改为不重复:同一个序号,只在列表框出现一次,点击第2次的时候,提示:该序号已经添加。

2. 蓝色框圈住的部分,列字段的宽度,可否固定为指定宽度?

3. 粉红色圈住的部分,可否不出现,因为字段到备注那里已经结束,不应该再出现多余的部分。


附件: 您没有浏览附件的权限,请 登录注册
2017-08-09 19:13
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:558
专家分:3188
注 册:2016-5-10
  得分:20 
ListView1控件好像没有设置列宽与列总数的属性,如果必须设置,最好换成 MSHFlexGrid1 控件,好像大部分编程者在使用列表控件一般选择的均是 MSHFlexGrid1 控件与 MSFlexGrid1 控件。
这个程序是使用 MSHFlexGrid1 控件做的:

你的上面三个问题已经全部解决。
附件: 您没有浏览附件的权限,请 登录注册

QQ    2653043392
2017-08-10 09:36







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.164123 second(s), 8 queries.
Copyright©2004-2017, BCCN.NET, All Rights Reserved