我有一个本地access文件,其中有一个表为userinfo,里面有一个userid字段
在sql server上有一个t_user表,也有一个userid字段,现在想根据本地的来更新sql server的t_user的值,我在Adoquery里是这样写的update t_user set delflag=1 where userid in (select [用户号] from opendatasource('Microsoft.Jet.OLEDB.4.0','Data Source="C:\test.mdb";User ID=Admin;Password=;')...userinfo where status in ('a','b'))结果delphi报错:
 Ad hoc access to OLE DB provider 'Microsoft.Jet.OLEDB.4.0' has been denied.You must access this provider through a linked server.请有相关经验的高手解决,谢谢了

解决方案 »

  1.   

    你的SQL服务器与本地ACCESS是否在一台机器上?
    如果不在一台机器上的话,C:\test.mdb指的就是SQL服务器的C:\test.mdb,那样的话
    就可能问题多多了:服务器有没有装ACCESS?(没有肯定有问题哦),服务器有没有对应数据ACCESS文件?当然可以把地址改掉把本机地址改成局域网相对地址比如\\192.168.0.2\TEMP\TEST.MDB,要注意TEMP文件夹要共享出来且从服务器端能够访问.如果是在一台机器上,随便搜一下,应该可以得到答案
      

  2.   

    我没做过ACCESS资料处理,但上次做EXCEL与SQL资料更新\导入\导出\就被上诉问题搞惨了.
      

  3.   

    delhpi源代码:
    procedure TForm1.Button2Click(Sender: TObject);
    var
     StrList:TStringlist;
    begin
    try
     if ConnectDB=1 then exit;
     StrList:=TStringList.Create;
     StrList.Add('SELECT A.USERID,B.姓名 FROM [ODBC;Driver=SQL Server;');
     StrList.Add('Server='+StrDbhost+';Uid='+StrDbUser+';Pwd='+StrDbPassword+';database='+StrDbDatabase+'].t_user A,');
     StrList.Add('用户基本情况表 B WHERE B.用户号=A.USERID AND B.交费状况 in (''拆机'',''报停'') AND A.ACCTSTATE<>3');
     Sqlsrv.DisableControls;
     Sqlsrv.Close;
     Sqlsrv.SQL.Clear;
     Sqlsrv.SQL:=StrList;
     Sqlsrv.Open;
     Sqlsrv.EnableControls;
     Sb.Panels[1].Text:='当前共有'+inttostr(SqlSrv.recordcount)+'个用户被报停或拆机';
     StrList.Clear;
     StrList.Add('UPDATE 用户基本情况表 A INNER JOIN [ODBC;DRIVER=SQL Server;');
     StrList.Add('Server='+StrDbhost+';Uid='+StrDbUser+';Pwd='+StrDbPassword+';database='+StrDbDatabase+'].t_user B');
     StrList.Add('ON (A.用户号 = B.USERID AND A.交费状况 in (''拆机'',''报停'') AND B.ACCTSTATE=0) SET B.ACCTSTATE = 3');
     ExecQuery.Close;
     ExecQuery.SQL.Clear;
     ExecQuery.SQL:=Strlist;
     ExecQuery.ExecSQL;
     Strlist.Destroy;
     Application.MessageBox('数据导入成功!', '恭喜恭喜', MB_ICONINFORMATION);
    except
      Application.MessageBox('数据库连接失败,请确认数据库参数设置正确!', '系统警告', MB_ICONERROR);
    end;
    end;