VB 2010 - MS Access SQL。如何编写更新查询:Table1.Column1 = Table1.Column1 + Table2.Column1 WHERE Table2.SomeColumn = Something

时间:2014-10-12 10:47:39

标签: sql visual-studio-2010 ms-access-2007

我正在尝试像这样制作更新:

Table1.Column1 = Table1.Column1 + Table2.Column1 WHERE Table2.SomeColumn = Something。我需要对表格1和表格2中具有相同名称的25列进行此类更新,但请不要使用INNER JOIN ON Table1.ColumnName = Table2.ColumnName。这对我不起作用,因为我在两个表上都没有相同值的列。我只想从Table2中的某些列获取值,并在Table1的某些列中添加值。

当从不同的列进行更新但同一个表时,它可以正常工作。像这样:

"UPDATE TABLE1 SET TABLE1.Column1=[Table1].[Column1]+[Table1].[Column2] WHERE [Table1].[Column3]=Something;"

但如果我使用Table2:

"UPDATE TABLE1 SET TABLE1.Column1=[Table1].[Column1]+[Table2].[Column1] WHERE [Table2].[Column2]=Something;"

它给我这个错误:没有给出一个或多个必需参数的值。

我使用Visual Basic 2010和MS Access 2007.感谢您的帮助

2 个答案:

答案 0 :(得分:0)

确定。我只是通过MS Access Query Design找到解决方案。

解决方案:

"UPDATE Table1, Table2 SET Table1.Column1 = [Table1].[Column1]+[Table2].[Column1], Tabel1.Colum2 = [Table1].[Column2]+[Table2].[Column2], Table1.ColumnN = [Table1].[ColumnN]+[Table2].[ColumnN] WHERE (((Table2.[SomeColumn])=SomeValue));"

非常感谢。

答案 1 :(得分:0)

Zoran这不一定是你要求的,但你可以通过使用visual basic而不是SQL以编程方式更新表中的值 - 将所有值传递到记录集,然后在将更改提交回更新之前更新记录集桌子。下面的示例获取表中的值并更改字母发送值和日期发送值。可能对你有用。 根据需要替换表名和列名。

Dim strSQL As String

Set db = CurrentDb()

strSQL = "SELECT T008Attendees.PKID, T008Attendees.LetterSentDate, T008Attendees.LetterSent FROM T008Attendees WHERE (((T008Attendees.PKID)=" & ParameterID & "));"

Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)

With rst

If .RecordCount > 0 Then
.MoveFirst
.Edit
!LetterSent = 1
!LetterSentDate = Date
.Update
End If

End With