SELECT INTO查询错误“必须包含至少一个表或查询”

时间:2014-02-21 14:53:22

标签: sql delphi ado

这个旧应用程序是桌面Jet数据库的数据库前端,Access 2000文件格式。

  • Delphi 2007
  • TADOConnection.Provider = Microsoft.Jet.OLEDB.4.0。
  • TADOCommand

最初数据库没有密码。客户端希望保护db密码以防止窥探(是的,它是错误的安全性)。

现在,我有一个令人沮丧的问题,即使用SELECT INTO SQL将数据复制到单独的存档数据库中的新表中。

此函数以前有效,但在向db添加密码后,它返回“EOleException”,“查询输入必须包含至少一个表或查询”。

下面的代码包含原始的Jet SQL。

var
   dbNameArch, dbNameInt, tblName, IntDataSource, cs1 : string;
const
  SProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
  SPassword = 'Password=' + '''xxxxxxxxx''';
begin
  dbNameArch := PathToArchive + 'archive.mdb';
  dbNameInt := PathToDb + 'active.mdb';
  tblName := CreateTableName;

  IntDataSource :=SProvider + dbNameInt + ';Persist Security Info=False;Jet OLEDB:Database '+ SPassword;
  ADOConnection2.ConnectionString := IntDataSource;
  ADOConnection2.LoginPrompt := False;
  ADOCommand2.Connection := ADOConnection2;

  try
      // ORIGINAL working query before password added
      // cs1 := 'SELECT * INTO ' + tblName + ' IN "'+ 
      //         dbNameArch + '" FROM Interventions WHERE InterDate < #' + 
      //         cxDateEditStart.Text + '#';

      // NEW query with password throws error
      cs1 := 'SELECT * INTO ' +  tblName + ' IN "' + 
              dbNameArch + '"' + SPassword + ' FROM Interventions WHERE InterDate < #' + 
              cxDateEditStart.Text + '#';

      ADOCommand2.CommandText := cs1;
      ADOCommand2.Execute;
  except
      on E : Exception do
         begin
            strTemp := 'Unable to create archive table.' + #13 + #13 +
                       E.ClassName + ' error with message:' + #13 +
                       E.Message;
            MessageDlg('Archive error', strTemp, mtError, [mbOK], 0, dckActiveForm);
            ADOConnection2.Close;
            Exit;
         end;
  end;

... etc.

失败的查询字符串(cs1)的长度是197个字符,是否太长?

我的智慧结束了,有人能指出我做错了什么吗?

0 个答案:

没有答案