4

我想在 MS Access 上创建 VIEW 定义。我使用了以下CREATE VIEW语句:

SELECT 
   MFP.FollowUpPlan_Id, 
   MFP.FollowUpPlan_Name AS PlanName, 
   DFP.Sequence_No AS SequenceNo, 
   MFS.FollowUpSchedule_Name AS ScheduleName    
FROM 
   MAS_FollowUp_Plan AS MFP, 
   DET_FollowUp_Plan AS DFP, 
   MAS_FollowUp_Schedule AS MFS
WHERE 
   (((MFP.FollowUpPlan_Id)=DFP.FollowUpPlan_Id) AND
   ((DFP.FollowUpSchedule_Id)=MFS.FollowUpSchedule_Id)) AND
   MFP.is_Deleted = FALSE AND
   DFP.is_Deleted = false     
ORDER BY 
   MFP.FollowUpPlan_Id, DFP.Sequence_No;       

但它抛出一个错误:

Only Simple Select Queries are allowed in view.

请帮助,在此先感谢。

4

3 回答 3

7

正如 Jeroen 解释的那样,这里的问题是 AccessCREATE VIEW声明的限制。对于这种情况,您可以CREATE PROCEDURE改用。它将创建 dbQueryDefs集合的新成员 --- 因此从 Access 用户界面将显示为一个新的命名查询。

以下语句对我使用 VBScript 中的 ADO 有效。从这里以前的Delphi问题来看,我的理解是Delphi也可以使用ADO,所以我相信这也对你有用。

CREATE PROCEDURE ViewSubstitute AS
SELECT
    MFP.FollowUpPlan_Id,
    MFP.FollowUpPlan_Name AS PlanName,
    DFP.Sequence_No AS SequenceNo,
    MFS.FollowUpSchedule_Name AS ScheduleName
FROM
    (MAS_FollowUp_Plan AS MFP
    INNER JOIN DET_FollowUp_Plan AS DFP
    ON MFP.FollowUpPlan_Id = DFP.FollowUpPlan_Id)
    INNER JOIN MAS_FollowUp_Schedule AS MFS
    ON DFP.FollowUpSchedule_Id = MFS.FollowUpSchedule_Id
WHERE
    MFP.is_Deleted=False AND DFP.is_Deleted=False
ORDER BY
    MFP.FollowUpPlan_Id,
    DFP.Sequence_No;
于 2012-09-01T14:53:12.850 回答
4

在 Access 中创建视图时ORDER BY不能混用JOIN。它会给你错误Only simple SELECT queries are allowed in VIEWS.(注意复数视图)

在 中拥有多个表FROM是一种 to JOIN

  • 要么删除ORDER BY,
  • 或者只有一个表FROM并且没有JOINs。

我记得过去(当我做的 Access 东西比现在多)时,我在一个带有单个表选择的大型查询中也看到了这一点ORDER BY

ORDER BY共识是无论如何你都不应该有意见,所以这是你最好的做法。

您可能会收到相同错误消息的另一个原因是您添加了参数或子选择。Access 也不喜欢视图中的那些,但在您的视图中并非如此。

于 2012-08-31T09:28:02.553 回答
1

在 Delphi 中声明变量 olevarCatalog ,cmd 为 OleVariant,使用 ComObj

olevarCatalog := CreateOleObject('ADOX.Catalog');
olevarCatalog.create(YourConnectionString); //This Will create MDB file.
// Using ADO Query(CREATE TABLE TABLEName....) add the required Tables.

// To Insert View Definition on MDB file.
cmd := CreateOleObject('ADODB.Command');
cmd.CommandType := cmdText;
cmd.CommandText := 'ANY Kind of SELECT Query(JOIN, OrderBy is also allowed)';
olevarCatalog.Views.Append('Name of View',cmd);
cmd := null;

这是使用 Delphi 创建 MS ACCESS 文件 (.MDB) 和 VIEW 的最佳方式。

于 2012-09-04T10:22:52.357 回答