Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

非简单拆分字段后再合并表,难度超大

nym808  发表于:2013-05-21 06:03:45  
复制

将一个字段依据规则拆分为不确定个数后再合并为一个表

难度超大啊,求解!
源表
合并的选项 A B C
1-/B/F/D/79/ A49/034 B42 HJ
3-/F/0/5/ 018/027 018 018
请注意:斜杠之间为选项,但选项数量是不定的
需求表
合并的选项 A B C
1-/B/ A49/034 B42 HJ
1-/F/ A49/034 B42 HJ
1-/D/ A49/034 B42 HJ
1-/79/ A49/034 B42 HJ
3-/F/ 018/027 018 018
3-/0/ 018/027 018 018
3-/5/ 018/027 018 018

谢谢大虾。

 

Top
chinasa 发表于:2013-05-21 11:07:51

abc

 

 

希望能帮到你



nym808 发表于:2013-05-21 12:00:45
先谢后看。

nym808 发表于:2013-05-21 13:24:54
,神啊,怎么下载不了呢?路过的大神指点一二,感激不尽。


chinasa 发表于:2013-05-21 13:46:23

是下载不了,还是使用不了?能下载啊。

 

DoCmd.SetWarnings 0
Dim rs As New ADODB.Recordset
rs.Open "tb1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.MoveFirst

Do Until rs.EOF
HBI = rs("HB")
ai = rs("A")
bi = rs("B")
ci = rs("C")
lenHB = Len(HBI)

wzxgi = 0
wzxg = InStr(wzxgi + 1, HBI, "/", 1)
KT = Mid(HBI, 1, wzxg)
wzxgi = wzxg


Do Until wzxg = lenHB - 1
wzxg = InStr(wzxgi + 1, HBI, "/", 1)
If wzxg = 0 Then
Exit Do
End If

hbnr = KT & Mid(HBI, wzxgi + 1, wzxg - wzxgi)
 DoCmd.RunSQL "INSERT INTO tb2 ( hb,a,b,c ) values(" & Chr(34) & hbnr & Chr(34) & "," & Chr(34) & ai & Chr(34) & "," & Chr(34) & bi & Chr(34) & "," & Chr(34) & ci & Chr(34) & ")"
wzxgi = wzxg
Loop
rs.MoveNext

Loop
DoCmd.OpenTable "tb2"

 



nym808 发表于:2013-05-22 07:19:25
先给您最佳答案,感觉您的方法是正确的,由于我是初学者,有一些函数不太明白,如:KT = Mid(HBI, 1, wzxg)、wzxgi 等,希望您能依据同样规则帮我拆分一下附件的“合并”列(总列数是随机的),以加深理解,点击下载此附件先谢谢您了。




chinasa 发表于:2013-05-22 08:26:20

帮你做不如告诉你是怎么做的,我把你不懂得地方解释了下,应该比较简单的。

其实你第二个附件与第一个也差不多,

1.你参照TB1结构复制个TB2表。

2.原先的字段“HB”,现在的字段名是“合并”,改下字段名货改下语句中的字段名。

3.原先A/B/C字段,现在多了序号/AA/....等字段,你就参照前面的加上( AI / BI......  以及DoCmd.RunSQL)

 

 

DoCmd.SetWarnings 0
Dim rs As New ADODB.Recordset
rs.Open "tb1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.MoveFirst

Do Until rs.EOF
HBI = rs("HB")    'HBI  是“合并”的汉语拼音HB,在加上字母i,方便记忆。后面的AI代表字段A后面加字母I。你新表中有多字段,就参照AI、BI、CI....继续自己编好了。
ai = rs("A")
bi = rs("B")
ci = rs("C")
lenHB = Len(HBI)   '判断下HB(合并)字段有多长。

wzxgi = 0   'WZXGI意思是“位置斜杠”的汉语拼音再加上字母I。这里设置其初始位置为0.
wzxg = InStr(wzxgi + 1, HBI, "/", 1)    '同上
KT = Mid(HBI, 1, wzxg)  'KT意思是“开头”     按照你的样例,第一个斜杠前面的内容在拆分后需要作为分开字段的开头。比如“1-/” 和“3-/”. MID是个函数,这里的意思是:取HB字段,从第一字符开始取,取WZXG个字符(WZXG就是斜杠的位置,比如第一条记录的第一个斜杠在第3个字符,则WZXG就是3)
wzxgi = wzxg


Do Until wzxg = lenHB - 1
wzxg = InStr(wzxgi + 1, HBI, "/", 1)
If wzxg = 0 Then
Exit Do
End If

hbnr = KT & Mid(HBI, wzxgi + 1, wzxg - wzxgi)   'HBNR就是“合并内容”的汉语拼音。
 DoCmd.RunSQL "INSERT INTO tb2 ( hb,a,b,c ) values(" & Chr(34) & hbnr & Chr(34) & "," & Chr(34) & ai & Chr(34) & "," & Chr(34) & bi & Chr(34) & "," & Chr(34) & ci & Chr(34) & ")"
wzxgi = wzxg
Loop
rs.MoveNext

Loop
DoCmd.OpenTable "tb2"



总记录:6篇  页次:1/1 9 1 :