2009-05-23 37 views
1

有谁有如何加入3个表,我有以下语句的例子,但我得到一个缺少(语法错误“操作错误”)MS-访问:加入3个表

da = New OleDbDataAdapter("SELECT [S].[Scheduled Vege], [V].[Description], 
     [DS].[Task], [DS].[Task Date], [DS].[Completed] FROM [Scheduled] AS S 
     INNER JOIN [Date Schedules] AS DS ON [S].[SchedID] = [DS].[SchedID] 
     INNER JOIN [Vegetables Descriptions] AS V ON [V].[Task] = [DS].[Task] 
     WHERE [DS].[TaskNumber] >= " & aFromDate & " AND [DS].[TaskNumber] <= " & aToDate & " 
     AND [DS].[Completed] = '" & aCompleted & "' ", conn) 

谢谢

回答

4

发现问题,因为它是一个访问数据库,fisrt from语句和INNER JOIN需要在括号中,如下所示。

da = New OleDbDataAdapter("SELECT [S].[Scheduled Vege], [V].[Description], 
[DS].[Task], [DS].[Task Date], [DS].[Completed] FROM ([Scheduled] AS S 
INNER JOIN [Date Schedules] AS DS ON [S].[SchedID] = [DS].[SchedID]) 
INNER JOIN [Vegetables Descriptions] AS V ON [V].[Task] = [DS].[Task] 
WHERE [DS].[TaskNumber] >= " & aFromDate & " AND [DS].[TaskNumber] <= " & aToDate & " 
AND [DS].[Completed] = '" & aCompleted & "' ", conn) 
0

如果您删除WHERE子句,是否执行查询?立即跳出来的唯一的事情是你的日期不一定会成为OleDB提供者喜欢的格式。

我的猜测是,你需要封装你的日期,如'1-Jan-2009'或类似的东西。

+0

它必须是与以下 – Domitius 2009-05-23 17:23:19

0

您的加入看起来不错,但我认为您的问题可能是您将'TaskNumber'与'aFromDate'比较的位置;数字和日期在SQL中是不同的类型,并且会导致尝试比较它们的问题。

+0

的加盟,请参阅响应Ø对不起,既表字段和aFromDate变量是数字字段存储日期为数字这种格式20091101或20100225. – Domitius 2009-05-23 17:22:10