Sql access2000中的连接
我搜索了“连接”主题,但找不到我需要的答案。这篇文章很接近,但我试图让它为我的目的工作失败 我有一张这样的桌子Sql access2000中的连接,sql,ms-access,concatenation,Sql,Ms Access,Concatenation,我搜索了“连接”主题,但找不到我需要的答案。这篇文章很接近,但我试图让它为我的目的工作失败 我有一张这样的桌子 Lic# | Permit | Year ------------------------ 1 | NS1 | 2003 1 | NS1 | 2004 1 | NS2 | 2004 2 | TR | 2012 2 | NS2 | 2012 3 | OR
Lic# | Permit | Year
------------------------
1 | NS1 | 2003
1 | NS1 | 2004
1 | NS2 | 2004
2 | TR | 2012
2 | NS2 | 2012
3 | OR | 2008
2 | OR | 2011
2 | NS1 | 2011
2 | TR | 2011
Lic# | Permit | Year
-----------------------------
1 |NS1 | 2003
1 | NS1, NS2 | 2004
2 | TR, NS2 | 2012
3 | OR | 2008
2 | OR, NS1, TR | 2011
……等等。此表中列出了许多唯一的许可证编号,并分别列出了许可证类型和年份(从2003年到2012年)
我想要的是创建一个表来显示如下信息
Lic# | Permit | Year
------------------------
1 | NS1 | 2003
1 | NS1 | 2004
1 | NS2 | 2004
2 | TR | 2012
2 | NS2 | 2012
3 | OR | 2008
2 | OR | 2011
2 | NS1 | 2011
2 | TR | 2011
Lic# | Permit | Year
-----------------------------
1 |NS1 | 2003
1 | NS1, NS2 | 2004
2 | TR, NS2 | 2012
3 | OR | 2008
2 | OR, NS1, TR | 2011
正如我在评论中所说,在MySQL中使用
group\u concat()
函数很容易,但是如果你想在MS Access中使用它,我认为你必须使用VBA来处理这个问题
我建议你履行这一职能:
public function concatenatePermits(licNo as integer, year as integer)
dim db as DAO.database, rec as DAO.recordset, strSQL as string
dim ans as string
set db = currentdb()
strSQL = "select permit from [your table] " & _
"where [lic#]=" & licNo & " and year=" & year & ";"
set rec = db.openrecordset(strSQL, dbOpenDynaset, dbReadOnly)
ans = ""
with rec
.moveFirst
do
if ans = "" then
ans = !permit
else
ans = ans & "," & !permit
end if
loop until .EOF
end with
rec.close
db.close
concatenatePermits = ans
end function
此函数可用于任何查询。缺点:如果表非常大,则使用此函数的查询的执行速度可能会非常慢。我认为更好的方法是创建一个空表,然后使用VBA逐行填充它
希望这对你有帮助
使用VBA添加行 在注释中,您询问如何使用VBA将行添加到表中。假设该表存在,并且您有想要输入该表的数据,我建议您这样做:
public sub addData()
dim db as dao.database, recOut as dao.recordset
' Declare all the variables you need for your code'
set db = currentdb()
' recOut will be the table where you want to store your data '
set recIn = db.openRecordset("tblYourOutTable",dbOpenDynaset,dbEditAdd)
' At some point in your code you will need to store data in your table: '
with recOut
.addNew
![A_Field] = value1
![Another_field] = value2
![Yet_another_field] = value3
.update
end with
' Close the recordset and the database objects '
rec.close
db.close
end sub
您正在尝试创建一个新表或创建一个显示该信息的查询吗?它类似于MySQL中的
group\u concat()
函数。。。然而,我认为MS Access中没有类似的函数理想情况下创建一个新表,但是如果我可以在“数据表”视图中执行一个生成类似结果的select,我可以从中创建一个新表。我还应该补充一点,我从合作伙伴机构的数据库中查询的数据,我知道正在分析,如果这有什么不同的话。请原谅我,但我仍在努力自学,还没有那么丰富的经验。您建议如何使用VBA逐行填写新表。同时,我会给这个一个机会。我非常感谢你的时间和帮助!我尝试了你的建议,得到了错误“无效的SQL语句;应为‘删除’、‘插入’、‘选择’或‘更新’……有什么建议吗?”@Andre831你需要调试代码并找到错误产生的位置。试着理解错误的原因并尝试更正它。如果你像我写的那样使用代码(如果我对字段数据类型的假设是准确的),应该没有问题。我认为错误可能出现在查询的定义(strSQL=…
)或记录集的初始化(set rec=…
)。你能提供更多的信息吗?我复制了它,除了包含表名。我一直在试图找出它,但迄今为止一直无法…有什么容易的,我看了吗?我会继续尝试找出它。再次感谢你的帮助!!!