Office中国论坛/Access中国论坛

标题: 如何拆分列 [打印本页]

作者: boy1    时间: 2008-12-11 10:51
标题: 如何拆分列
前提新列数是不确定的,跟付款次数有关
1.如何让列里的“/”之间的数据,自动新建到列?
2.如何将.变为-,变成日期格式?

08.09.23/08.11.23/09.01.23/09.03.23/09.05.23/09.07.23

内有附件
作者: Henry D. Sy    时间: 2008-12-11 11:10
建议自动增加记录,而不是自动增加列,否则会有很多列。
作者: boy1    时间: 2008-12-11 11:13
标题: 如何解决?请在附件中给实现好吗。
原帖由 Henry D. Sy 于 2008-12-11 11:10 发表
建议自动增加记录,而不是自动增加列,否则会有很多列。


如何解决?请在附件中给实现好吗。我不会做
作者: Henry D. Sy    时间: 2008-12-11 22:41
请将excel表整理好导入到access中,假设名称为a表
再建一个空表结构与a表相同,称之为b
  1.     Dim rs As New ADODB.Recordset
  2.     Dim rst As New ADODB.Recordset
  3.     Dim dtmArray() As String
  4.     Dim I As Integer

  5.     rs.Open "a", CurrentProject.Connection, adOpenKeyset, adLockReadOnly
  6.     rst.Open "b", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

  7.     Do While Not rs.EOF
  8.         dtmArray = Split(Replace(rs.Fields(1), ".", "-"), "/")
  9.         For I = 0 To UBound(dtmArray)
  10.             With rst
  11.                 .AddNew
  12.                 .Fields(0) = rs.Fields(0)
  13.                 .Fields(1) = CDate(dtmArray(I))
  14.                 .Update
  15.             End With
  16.         Next
  17.         rs.MoveNext
  18.     Loop
  19.     rst.Close
  20.     rs.Close
  21.     Set rs = Nothing
  22.     Set rst = Nothing
复制代码

作者: boy1    时间: 2008-12-12 13:27
原帖由 Henry D. Sy 于 2008-12-11 22:41 发表
请将excel表整理好导入到access中,假设名称为a表
再建一个空表结构与a表相同,称之为b    Dim rs As New ADODB.Recordset
    Dim rst As New ADODB.Recordset
    Dim dtmArray() As String
    Dim I As Inte ...


非常感谢斑竹的指导。

只是不好意,我是真笨啊。我在ACCESS里建了a,b两个表,代码也拷贝。但为什么,没变化啊。我什么地方做错了请指教?

附上新的含a,b的表
作者: Henry D. Sy    时间: 2008-12-12 14:12
1.你要将你表中的null去掉
2.代码要保存到特定的事件中,比如按钮单击。
作者: boy1    时间: 2008-12-12 14:30
标题: 斑竹帮忙给试试,我真是笨啊。整不出来啊
原帖由 Henry D. Sy 于 2008-12-12 14:12 发表
1.你要将你表中的null去掉
2.代码要保存到特定的事件中,比如按钮单击。


斑竹帮忙给试试,我真是笨啊。整不出来啊
作者: Henry D. Sy    时间: 2008-12-12 14:52
原帖由 boy1 于 2008-12-12 14:30 发表


斑竹帮忙给试试,我真是笨啊。整不出来啊

作者: boy1    时间: 2008-12-12 17:55
[quote]原帖由 Henry D. Sy 于 2008-12-12 14:52 发表
[/quote

谢谢啊,真的不知道该如何表达。帮了我大忙了,再次感谢斑竹无私的帮助。[:22]
作者: boy1    时间: 2008-12-13 14:34
标题: 还得麻烦各位
如果 1:    a表中共有16列数据且修改的数据列也在16列 ,都要对应到b表。--------代码该如何改?

        2:    a表是查询表类型,代码是否需改动。如何改?

[ 本帖最后由 boy1 于 2008-12-13 14:40 编辑 ]
作者: Henry D. Sy    时间: 2008-12-13 16:21
什么意思
作者: boy1    时间: 2008-12-14 10:19
标题: 版主请看图示
还有这句是什么意思 CurrentDb.Execute strSQL

[ 本帖最后由 boy1 于 2008-12-14 11:07 编辑 ]
作者: Henry D. Sy    时间: 2008-12-14 10:28
1. 应该尽量控制null值,如何改写代码要看你具体要求,和有效性规则。
2. 可以加个局部循环
3. 不用,a代表查询表的名称
4. datediff("d",日期字段名,date())<=10
作者: boy1    时间: 2008-12-14 13:07
原帖由 Henry D. Sy 于 2008-12-14 10:28 发表
1. 应该尽量控制null值,如何改写代码要看你具体要求,和有效性规则。
2. 可以加个局部循环
3. 不用,a代表查询表的名称
4. datediff("d",日期字段名,date())





附上新的实例文件,请麻烦给与修改。谢谢。又麻烦您了。

[ 本帖最后由 boy1 于 2008-12-14 15:30 编辑 ]
作者: Henry D. Sy    时间: 2008-12-14 16:54
日期出现错误是因为,原数据有误引起的,你说11月份有31天的吗??
  1. Private Sub Command0_Click()
  2.     Dim rs As New ADODB.Recordset
  3.     Dim rst As New ADODB.Recordset
  4.     Dim dtmArray() As String
  5.     Dim strTemp As String
  6.     Dim I As Integer, J As Integer

  7.     rs.Open "a", CurrentProject.Connection, adOpenKeyset, adLockReadOnly
  8.     rst.Open "b", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

  9.     Do While Not rs.EOF
  10.         If IsNull(rs.Fields(rs.Fields.Count - 1)) Then
  11.             strTemp = "1900-1-1"
  12.         Else
  13.             strTemp = rs.Fields(rs.Fields.Count - 1)
  14.         End If
  15.         dtmArray() = Split(Replace(strTemp, ".", "-"), "/")
  16.         For I = 0 To UBound(dtmArray)
  17.             With rst
  18.                 .AddNew
  19.                 For J = 0 To rs.Fields.Count - 2
  20.                     .Fields(J) = rs.Fields(J)
  21.                 Next
  22.                 .Fields(J) = CDate(dtmArray(I))
  23.                 .Update
  24.             End With
  25.         Next
  26.         rs.MoveNext
  27.     Loop
  28.     rst.Close
  29.     rs.Close
  30.     Set rs = Nothing
  31.     Set rst = Nothing
  32.     Me.b.Requery
  33.     Me.Command1.SetFocus
  34.     Me.Command0.Enabled = False
  35.     Me.签约时间开始.Enabled = True

  36. End Sub
复制代码

[ 本帖最后由 Henry D. Sy 于 2008-12-14 17:17 编辑 ]
作者: boy1    时间: 2008-12-14 17:58
[:32]不好意思,随意的日期竟然造成麻烦实在对不住啊。

[ 本帖最后由 boy1 于 2008-12-14 18:07 编辑 ]
作者: Henry D. Sy    时间: 2008-12-14 19:29
你到底是查询30天以内,或是 30 天以上,或 30天。
作者: boy1    时间: 2008-12-14 22:11
标题: 未来30以内,未来10天内等。
[:50] 未来30以内,未来10天内等。

比如:2009年1月15日需交租金,今天是2008年12月14日。我需要提前30天,或10天做提醒。
作者: Henry D. Sy    时间: 2008-12-14 22:24
Private Sub 签约时间开始_AfterUpdate()
    Dim strWhere As String
    strWhere = "DateDiff('d', Date(), 付款日期)<= " & Me.签约时间开始 & " and DateDiff('d', Date(), 付款日期)>=0"
    Me.b.Form.RecordSource = "select * from b where " & strWhere
End Sub
作者: boy1    时间: 2008-12-15 08:45
[:50] [:50] [:50] [:50] 谢谢版主啊,您辛苦了。版主无私的版主让我非常感动,我会尽我的能力来回馈我们的论坛。也祝我们的论坛越办越好。
作者: boy1    时间: 2008-12-15 22:50
标题: 这句不懂?给解释一下,谢谢。
这句不懂?给解释一下,谢谢。

If IsNull(rs.Fields(rs.Fields.Count - 1))
作者: Henry D. Sy    时间: 2008-12-15 22:59
rs.Fields.Count       'rs记录集的字段数量
rs.Fields.Count - 1  '表示最后一个字段的索引,因为字段的索引是从0开始起算的
rs.Fields(rs.Fields.Count - 1)  ’表示最后一个字段值
IsNull(aaa)                 '判断aaa是不是为空
那么整句就是
如果rs记录集的最后一个字段为空的话,就...................
作者: boy1    时间: 2008-12-16 08:29
标题: 版主回复的太快了,非常感谢。还有个语句不明白?
1.Me.b.Form.RecordSource = "select * from b where " & strWhere    什么意思?还有& strWhere ?
Me.b.Form.RecordSource = "select * from b  " & strWhere       什么意思?是把b表的内容赋值给b控件吗?
   差一个where有什么区别?

2.dtmArray() = Split(Replace(strTemp, ".", "-"), "/")
ubound()查看定义应是取数组内的哪一维的最大可用下标?
UBound(dtmArray) 这个函数是怎么运行的?不明白

3.For I = 0 To UBound(dtmArray)    With rst 什么意思?还有with是个函数吗?退出用end with。

for <控制变量>:=<表达式1> to <表达式2> do <语句>;这是一个for语句的一般格式,请问我们这段代码为什么没有do呢?
还是For...Next的语句?这是for语句的什么格式?
4. .Update与rs.update,.addnew与rs.addnew相同是吗?
5.原数据表的倒数第二列,需要Replace(****, ".", "-"),该语句如何加到代码里?加到代码哪一行?还有对应的语句吗?

[ 本帖最后由 boy1 于 2008-12-16 11:15 编辑 ]
作者: Henry D. Sy    时间: 2008-12-16 11:44
问题1  strWhere 这里是条件字符串
          等值于 DateDiff('d', Date(), 付款日期)<= " & Me.签约时间开始 & " and DateDiff('d', Date(), 付款日期)>=0
          也就是
          Me.b.Form.RecordSource = "select * from b where " & strWhere
          等值与
          Me.b.Form.RecordSource = "select * from b where DateDiff('d', Date(), 付款日期)<= " & Me.签约时间开始 & " and DateDiff('d', Date(), 付款日期)>=0"

问题2,3,4 在帮助上都写得很清楚,请按f1查看
问题5 倒数第二列的索引===rs.Fields.Count - 2
         那么就是
         Replace(rs.Fields(rs.Fields.Count - 2), ".", "-")

[ 本帖最后由 Henry D. Sy 于 2008-12-16 11:45 编辑 ]
作者: boy1    时间: 2008-12-16 12:34
标题: 感谢感谢!!
感谢感谢!![:28]
作者: boy1    时间: 2008-12-16 15:07
标题: 请斑竹给程序再调试一下,拜托。
1.我把a表换成了工作中的一张表,但不知什么原因出错。            

2.倒数第二列需要转换格式Replace(rs.Fields(rs.Fields.Count - 2), ".", "-")   

3.在这个表上如何设置一个模糊搜索。
                                                     
本想拿版主的例子改改套用,可是水平实在太差。请版主再辛苦一下。

[ 本帖最后由 boy1 于 2008-12-16 15:20 编辑 ]
作者: Henry D. Sy    时间: 2008-12-16 17:31
dddddd
作者: boy1    时间: 2008-12-16 19:33
标题: 版主的作品好,人更好。
好啊。。我也顶,说一个字顶。说两个字,谢谢。啊[:32]
作者: boy1    时间: 2008-12-16 20:32
标题: 155数据测试,报错。
[attach]33867[/attach]

[ 本帖最后由 boy1 于 2008-12-16 22:07 编辑 ]
作者: Henry D. Sy    时间: 2008-12-16 20:48
数据表的第三条记录的最后一个字段,付款日期的字段值有误,多了一小点
作者: Henry D. Sy    时间: 2008-12-16 20:49
放大给你看看
09.01.25`
作者: boy1    时间: 2008-12-16 21:12
标题: 恨死自己了
[:31] 可恨的'
作者: boy1    时间: 2008-12-16 22:15
标题: 想加个EXECEL输出功能和报表打印功能
欣喜之余,想起个小问题。

求助版主[:50]

1.对于搜索出的查询记录,如何生成表单

2.对于搜索出的查询记录,如何execel文件
作者: WANGDUYU    时间: 2008-12-16 22:18
版主真是超级有耐心!
一答一问,也是很好的学习过程,仔细研究一下。
作者: Henry D. Sy    时间: 2008-12-17 01:15
dddddd
作者: boy1    时间: 2008-12-17 07:04
标题: 真心感谢版主,您辛苦了。
真心感谢版主,您辛苦了。
作者: boy1    时间: 2008-12-17 12:29
标题: 打开文件自动运行程序,影响窗体改名如何解决
打开文件自动运行程序,影响窗体改名如何解决。[:32]
作者: Henry D. Sy    时间: 2008-12-17 13:47
不明白什么意思
作者: boy1    时间: 2008-12-17 15:14
标题: 就是这个图示,是宏引用的问题怎么解决。
我找不到这个宏,改变引用的窗体名。
作者: Henry D. Sy    时间: 2008-12-17 15:21
你是不是更改了窗体的名字
A。 检查启动里的设置,如果设置了启动窗体,看看启动的窗体是不是你更改窗体名字前的名字。如是,更改为当前你窗体的姓名字。
B。 如果没有设置启动窗体,哪就看看,有没有一个叫Autoexec的宏,看看里面打开的是什么窗体,跟你现有的窗体名字相符与否。
作者: boy1    时间: 2008-12-17 21:36
标题: “付款日期”,查询不出结果。
查询项目内     “付款日期”,查询不出结果。如何该代码?
作者: Henry D. Sy    时间: 2008-12-17 22:14
不是查不出,而是没有符合条件的,增加60.90天的试试。
(除非你更改过查询语句)
作者: Henry D. Sy    时间: 2008-12-17 22:59
知道哪里错误
更正一下:
  1. Private Sub Command12_Click()
  2.     strWhere = ""
  3.     If Not IsNull(Me.签约时间开始) Then
  4.         strWhere = strWhere & "DateDiff('d', Date(), 付款日期) <= " & Me.签约时间开始 & " and DateDiff('d', Date(), 付款日期)>=0 And "
  5.     End If
  6.     If Not IsNull(Me.txt日期) Then
  7.         Select Case Me.Combo9
  8.         Case "付款日期"
  9.             strWhere = strWhere & "Format(付款日期, 'yyyy-mm') like '*" & Format(Me.txt日期, "yyyy-mm") & "*' And "
  10.         Case Else
  11.             strWhere = strWhere & Me.Combo9 & " like '*" & Me.txt日期 & "*' And "
  12.         End Select
  13.     End If
  14.     If Len(strWhere) <> 0 Then
  15.         strWhere = Left(strWhere, Len(strWhere) - 5)
  16.     End If
  17.        Debug.Print strWhere
  18.     Me.b子窗体.Form.Filter = strWhere
  19.     Me.b子窗体.Form.FilterOn = True
  20. End Sub
复制代码

作者: df    时间: 2008-12-18 00:44
版主的作品好,人更好
作者: boy1    时间: 2008-12-18 09:09
标题: 谢版主指导,又得辛苦版主请看一下截图
版主请看截图

[ 本帖最后由 boy1 于 2008-12-18 09:27 编辑 ]
作者: Henry D. Sy    时间: 2008-12-18 09:22
你要输入,2008-11  或者  2009-1,记得这是你要求的。
作者: boy1    时间: 2008-12-18 09:30
版主说的是,谢过版主。为什么日期的搜索不能像其他通配符那样,2008-11-09中的任意一部分呢?

明白了,
strWhere = strWhere & "Format(付款日期, 'yyyy-mm') like '*" & Format(Me.txt日期, "yyyy-mm") & "*' And "

第一个为什么是单引号?

[ 本帖最后由 boy1 于 2008-12-18 09:45 编辑 ]
作者: Henry D. Sy    时间: 2008-12-18 09:51
第一个format是作为字符串,第二个是作为变量。
作者: boy1    时间: 2008-12-18 10:20
标题: 请教“报表内容”输出成EXECEL文件如何写代码?
“报表内容”输出成EXECEL文件如何写代码?先谢过版主
作者: Henry D. Sy    时间: 2008-12-18 10:42
DoCmd.OutputTo acOutputReport, "rptA"
看帮助,
参阅 OutputTo 方法
作者: boy1    时间: 2008-12-18 11:40
标题: 谢版主,指教。
谢版主,指教。[:32]
作者: boy1    时间: 2008-12-18 17:22
标题: 小问题:请教
小问题:请教
作者: Henry D. Sy    时间: 2008-12-18 17:31
要导入的表(就是b表)中的序号不要设置为主键。
作者: boy1    时间: 2008-12-18 21:55
标题: 实在不好意思,忙活了两小时也没弄明白
寻求版主指教,上传一个要导入的EXECEL文件。[:30]

我的导入方法:1。导入a表,在复制a表改名为b。(b没设主键)


                         2.a,b分别导入(b没设主键)

请教版主为什么,换个看起来没什么差别的表(只是多填了几列)却出错呢?出错了解决思路是什么?
作者: Henry D. Sy    时间: 2008-12-18 21:57
什么意思呀,看不太懂。
作者: boy1    时间: 2008-12-18 22:11
标题: 我把新表导入程序后,程序提示出错。
上传的EXECEL表,是要替换原来的a表的。我把新表导入程序后,程序提示出错。版主帮给看看是什么问题

倒数第二列数据也核对了,没发现出错。


新表在上帖

[ 本帖最后由 boy1 于 2008-12-18 22:16 编辑 ]
作者: Henry D. Sy    时间: 2008-12-18 22:55
导入时,不要设什么id主键,access会询问你的,不要管他。
导入后,a表最后存在着很多空记录,请把他们删除掉。
作者: boy1    时间: 2008-12-19 06:49
标题: 版主辛苦了
解决了,谢谢版主。版主辛苦了[:22]
作者: boy1    时间: 2008-12-19 10:31
Private Sub Command13_Click()
    Dim strSQL As String
    Dim qdf As DAO.QueryDef
    Set qdf = CurrentDb.QueryDefs("qdfA")
    If strWhere = "" Then
        strSQL = "select * from b"
    Else
        strSQL = "select * from b where " & strWhere
    End If
    qdf.SQL = strSQL
    DoCmd.OutputTo acOutputQuery, "qdfa", acFormatXLS, CurrentProject.Path & "\qdfa.xls", True
End Sub
只输出表(b)里的指定列如:分行,案名,业主姓名,业主电话等项到 qdfa.xls,如何改代码?麻烦版主给改写一下,谢谢。
作者: Henry D. Sy    时间: 2008-12-19 11:04
strSQL = "select * from b"
strSQL = "select * from b where " & strWhere
将上面这两句中的“*”号,换成你要输入的字段名
比如
strSQL = "select 分行,案名,业主姓名,业主电话 from b"
作者: boy1    时间: 2008-12-19 11:20
标题: 谢谢版主,我又有进步了。
谢谢版主,我又有进步了。[:50]
作者: boy1    时间: 2008-12-21 08:18
标题: 有难题请教,请版主指教
1.程序设置的查询是最近几天的查询范围,连续几天的查询就会出现重复查询的问题。

比如:昨天符合条件最近7天的数据是:1,2,3,4,5,6,7  (7个数)

          今天符合条件最近7天的数据是: 2,3,4,5,6,7 ,8 (7个数)红字为重复的筛选

           如何将重复的数据做标记,不在重复筛选。代码如何实现?
作者: Henry D. Sy    时间: 2008-12-21 08:27
怎么会有这种想法
就是说只要曾经查询过的记录,在以后的查询中不在出现,对不对。
作者: boy1    时间: 2008-12-21 09:26
标题: 是版主理解的意思
对,版主说的对。如果每天都查询一次最近7天的数据,则每天都有前一天的重复数据需要手工筛选出来。经常会忘了,哪些信息已经提示了。

[ 本帖最后由 boy1 于 2008-12-21 09:29 编辑 ]
作者: Henry D. Sy    时间: 2008-12-21 09:45
哪你就改成查询当天的不就行了
作者: boy1    时间: 2008-12-21 10:06
标题: 改成当天查询的话,就达不到提前提示的效果了。
改成当天查询的话,就达不到提前提示的效果了。
作者: Henry D. Sy    时间: 2008-12-21 10:22
你的要求很矛盾,你要想把自己的思路搞清楚
像这样要求,只要多查询几次,你就再也查不到任何记录了。
作者: boy1    时间: 2008-12-21 10:43
标题: 啊,是吗。这么严重啊
[:31]
啊,是吗。

本想只是已经查询的数据标记一下,不再被以后的查询中被筛选出来。
作者: Henry D. Sy    时间: 2008-12-21 11:43
对啊
假设共有5条记录,一会儿标记2条,等会再标志3条,你说第三次你能查到什么记录??
作者: jackywjia    时间: 2020-7-12 21:16
受益匪浅




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3