我正在尝试将旧的Access数据库中的一些数据迁移到新的数据库,更改了一些列,例如旧的“地址”过去被划分为街道,数字,城市和邮政编码现在只有一列。 因此,在更新新数据库之前,我需要将所有列合并为一个。 我没有得到任何错误,也没有任何警告,但它只显示更新数据库中的第一列。
我正在尝试做什么:
//Open the connection with the database
oldBuys.Open()
newBuys.Open()
Dim codTable As New DataTable
Dim codTemp As Integer
Dim addressTable As New DataTable
Dim tempValue As String
//Command to find all the client codes on the new database
Dim findAllCodes As New OleDb.OleDbDataAdapter("SELECT Cod FROM Data", newBuys)
findAllCodes .Fill(codTable)
//Search for all the adress of that code
For i = 0 To codTable.Rows.Count - 1
codTemp = codTable.Rows(i).Item(0)
//Union all the values
Dim findAllAdress As New OleDb.OleDbCommand("SELECT Street FROM Data" & _
" WHERE Cod=@cod1 UNION ALL SELECT Number FROM Data WHERE Cod=@cod2 UNION ALL SELECT City" & _
" FROM Data WHERE Cod=@cod3 UNION ALL SELECT State FROM Data WHERE Cod=@cod4 UNION" & _
" ALL SELECT postalCode FROM Data WHERE Cod=@cod5", cnCompraAntigo)
findAllAdress.Parameters.AddWithValue("@cod1", codTemp)
findAllAdress.Parameters.AddWithValue("@cod2", codTemp)
findAllAdress.Parameters.AddWithValue("@cod3", codTemp)
findAllAdress.Parameters.AddWithValue("@cod4", codTemp)
findAllAdress.Parameters.AddWithValue("@cod5", codTemp)
//Transfer the value to the variable
tempValue = findAllAdress.ExecuteScalar
//Try to update the new database
Dim updateAllAdress As New OleDb.OleDbCommand _
("UPDATE Data SET fullAdress=@end WHERE Cod=@cod", newBuys)
updateAllAdress.Parameters.AddWithValue("@end", tempValue)
updateAllAdress.Parameters.AddWithValue("@cod", codTemp)
updateAllAdress.ExecuteNonQuery()
Next
newBuys.Close()
oldBuys.Close()
答案 0 :(得分:1)
我怀疑你只需要这个(||
是SQL字符串连接运算符):
//Union all the values
Dim findAllAdress As New OleDb.OleDbCommand("SELECT Street || Number || City || State || postalCode FROM Data" & _
" WHERE Cod=@cod1", cnCompraAntigo)
findAllAdress.Parameters.AddWithValue("@cod1", codTemp)
答案 1 :(得分:1)
您需要这样的SQL Select:
SELECT [Street] & ' ' & [Number] & ' ' & [City] & ' ' & [State] & ' ' & [postalCode]
FROM Data WHERE Cod = ...
答案 2 :(得分:1)
您正在尝试执行的操作可以在SELECT语句中连接列,如下所示:
SELECT Street & ' ' & Number & ' ' & PostalCode & ' ' & City & ' ' & State
FROM Data
WHERE Cod=@cod1
此SELECT在假设所有列都是字母数字的情况下工作,如果它们中的一些是数字,则必须在连接之前转换列。
UNION语句用于合并不同查询的结果,将结果“表”组合在一个结果集上。
例如,您可以选择表的所有男性名称,而在另一个select语句中检索所有女性名称,使用UNION,您可以在一个结果中组合两个select语句。
编辑:我已经更正了代替+ for&将其调整为Access语法。