Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 访问表中的VBA搜索和修复_Sql_Database_Vba_Ms Access_Sql Update - Fatal编程技术网

Sql 访问表中的VBA搜索和修复

Sql 访问表中的VBA搜索和修复,sql,database,vba,ms-access,sql-update,Sql,Database,Vba,Ms Access,Sql Update,我在Access数据库中有一个表,其中填入了数据。它是在25年内填写的,因此存在不一致之处 但有一列是可以的。我想用这个列来修复另一列中的数据。样本如下: Column1 | Column2 ICDS-1 | 01 ICDS-1A | 1A ICDS-2 | 02 ICDS-3 | 3 ICDS-4A | 04 OTHER | ... 对于Access VBA宏,我要做的只是使用列1中的数据并在连字符处拆分它如果没有连字符,则应

我在Access数据库中有一个表,其中填入了数据。它是在25年内填写的,因此存在不一致之处

但有一列是可以的。我想用这个列来修复另一列中的数据。样本如下:

Column1     | Column2
ICDS-1      | 01
ICDS-1A     | 1A
ICDS-2      | 02
ICDS-3      | 3
ICDS-4A     | 04
OTHER       |
...
对于Access VBA宏,我要做的只是使用
列1
中的数据并在连字符处拆分它如果没有连字符,则应跳过该行

Column1     | Column2
ICDS        | 1
ICDS        | 1A
ICDS        | 2
ICDS        | 3
ICDS        | 4A
OTHER       |
...
虽然这似乎是一项很简单的任务,我可以在Excel中很快完成,但我似乎无法开始使用Access VBA,即使在谷歌搜索了一段时间之后

或者我完全走错了方向,我应该使用一些SQL查询吗

感谢您的帮助。谢谢

更新:使用OpiesDad回答以下VBA代码(现在使用实际的表名和列名)进行替换,但它不会跳过没有连字符的行(我在上面的问题中更新了这一点):


更新2:已解决,请参阅带有最终查询和VBA代码的OpiesDad答案。

您不需要VBA

运行以下SQL:

SELECT Iif(InStr([Column1],"-") = 0, [Column1], left([Column1], InStr([Column1], "-") - 1)) As NewCol1
       , Iif(InStr([Column1],"-") = 0, "", right([Column1], Len([Column1]) - InStr([Column1], "-"))) As NewCol2
       , [Column1]
       , [Column2]
FROM myTable
InStr函数查找您要查找的值,并返回字符串中找到该值的位置(第一个位置是位置1)。Left和Right函数分别从字符串的左侧和右侧返回所选的字符数

这将显示结果(而不是覆盖表)

要覆盖该表,请执行以下操作:

UPDATE myTable
SET Column1 = left([Column1], InStr([Column1], "-") - 1)
   , Column2 =  right([Column1], Len([Column1]) - InStr([Column1], "-"))
WHERE (InStr([Column1], "-") > 0 )
执行更新查询的VBA代码(使用实际表名和列名):


好的,所以我设法用
DoCmd.RunSQL“UPDATE[MASTER TABLE]SET[SERIES ABB]=Left([SERIES ABB]、InStr([SERIES ABB]、“”-“”)-1)、[#IN SERIES]=right([SERIES ABB]、Len([SERIES ABB])-InStr来应用您的代码。
现在的问题是,
Column1没有连字符的行大约有250行。在这些字段中,整个
列1
字段移到
列2
。但我需要这些行保持原样。请参阅第一部分的更新。使用“IIf”功能。太好了!谢谢你的帮助。一个
WHERE
语句解决了这个问题。请参阅您帖子的更新。
UPDATE myTable
SET Column1 = left([Column1], InStr([Column1], "-") - 1)
   , Column2 =  right([Column1], Len([Column1]) - InStr([Column1], "-"))
WHERE (InStr([Column1], "-") > 0 )
DoCmd.RunSQL 
   "UPDATE [MASTER TABLE] 
    SET [SERIES ABB] = Left([SERIES ABB], InStr([SERIES ABB], ""-"") - 1), 
        [# IN SERIES] = right([SERIES ABB], Len([SERIES ABB]) - InStr([SERIES ABB], ""-""))
    WHERE (InStr([SERIES ABB], ""-"") > 0 )"