这个旧应用程序是桌面Jet数据库的数据库前端,Access 2000文件格式。
最初数据库没有密码。客户端希望保护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个字符,是否太长?
我的智慧结束了,有人能指出我做错了什么吗?