2011-03-20 76 views
0

有人可以帮我写一个查询,将两个表加入一个。我尝试以下,但我得到的错误:加入两个访问表到一个

"No value given for one or more required parameters."

Dim CmdStr As String = "SELECT col1, col2 FROM table1 UNION SELECT col1,col2 FROM table2" 
+0

您的表结构是什么样的?你的SQL看起来是正确的,但是其中一个表中很可能不存在col1或col2。此外,请包括所有相关的代码。请帮助我们来帮助你。 – JohnFx 2011-03-20 04:08:34

+0

你的编程环境是什么?在VBA中,你当然不能在你声明的同一行中赋值变量。 – 2011-03-24 19:29:24

回答

1

你的问题还不清楚。 UNIONJOIN是完全不同的东西。我们需要更多关于您的表格外观以及您的期望结果的详细信息。

如果您有例如

table1    table2 
| col1 | col2 | | col1 | col2 | 
|------|------| |------|------| 
| 1 | 4 | | 5 | 7 | 

结果为UNION(仅可能的,如果表1和表2具有相同的数据类型)

SELECT col1, col2 FROM table1 
UNION 
SELECT col1, col2 FROM table2 

|------|------| 
| 1 | 4 | 
| 5 | 7 | 

结果为JOIN

SELECT t1.col1, t1.col2, t2.col1, t2.col2 
FROM table1 t1 CROSS JOIN table2 t2 

|t1.col1|t1.col2|t2.col1|t2.col2| 
|-------|-------|-------|-------| 
| 1 | 4 | 5 | 7 | 

进一步有各种不同类型的外的 and inner JOINS 查看概览here

1

假设通过join你不是指在sql语境中该术语的通常含义,如果你问的是sql问题,并且假设你想从这两个表中得到结果,那么你写的sql如果数据库中存在表Table1Table2并且它们都有col1和col2,则表示正确。考虑到UNION运营商默认情况下只选择不同的值,而UNION ALL也会选择重复。但你有错误:
"No value given for one or more required parameters."
似乎并不是一个SQL错误。它似乎是由您的编程代码引发的,最有可能填充数据集/记录集的地方。如果发布更多代码,可以提供更好的答案。

0

我认为你需要共享你的代码的其余部分,它看起来像你使用这样的事情

Dim cmd as ADODB.command 
Dim CmdStr As String = "SELECT col1, col2 FROM table1 UNION SELECT col1,col2 FROM table2" 

cmd.CommandText = cmdStr 

给我们更多的代码,也许我们可以帮助你更好。

0

太感谢你了,在座的各位,我是absolate新的,但我觉得我可以得到它现在的工作.heres我使用的代码

Imports System.Data.OleDb 

Public Class Form1 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\deletedb.accdb;Jet OLEDB:Database Password=1") 
     Dim CmdStr As String = "SELECT col1, col2 FROM table1 UNION SELECT col1,col2 FROM table2"   
     con.Open() 
     Dim cmd As OleDbCommand = New OleDbCommand(CmdStr, con) 
     cmd.ExecuteNonQuery() 
     con.Close() 
     MsgBox("Done") 
    End Sub 
+0

当您将代码拆分为段落(即当您将空行放在中间时)时,Ticks(')停止作为标记符号工作。在这种情况下,将其格式化为代码块(使用“{}”按钮或将所有代码行缩进至少4个空格)。 – 2011-03-21 07:05:17

0

它看起来像这个问题是你的数据源字符串。默认情况下,访问权限有一个名为Admin的用户使用空白密码。除非您已将安全性添加到数据库,否则连接字符串应为

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\deletedb.accdb;User ID=Admin;Password="