如何实现Query的跨库查询?能否给出个具体例子?

解决方案 »

  1.   

    要看你是什么数据库,如果是sql server那么在sql语句中写select * from database_name..table_name,database_name2..table_name
      

  2.   

    同一SQL实例中:1、select * from database_name..table_name,database_name2..table_name2、select * from database_name.dbo.table_name,database_name2.dbo.table_name不同SQL实例中:OPENROWSET ( 'provider_name'
        , { 'datasource' ; 'user_id' ; 'password'
            | 'provider_string' }
        , { [ catalog.] [ schema.] object
            | 'query' } 
        ) 例:
    SELECT a.*
    FROM OPENROWSET('SQLOLEDB','seattle1';'sa';'MyPass',
       'SELECT * FROM pubs.dbo.authors ORDER BY au_lname, au_fname') AS a
      

  3.   

    加上库名就行了.在query中用::隔开,好像是这样.
      

  4.   

    这是我写的语句,在SQL SERVER 的查询分析器中通过了,但在在Delphi6.0下根本通不过,   Select k.dbo.eg.Comm_no,(select Base.dbo.Cskhinfo.Shorname 
      from   Base.dbo.Cskhinfo 
      where Base.dbo.Cskhinfo.Number=K.dbo.eg.comm_no) as Comm_name 
    from k.dbo.eg
      

  5.   

    好像不行,各位大哥,能否自己先试试,看在delphi下能否实现?如果分不够,我可以再加。
      

  6.   

    ,   Select k.dbo.eg.Comm_no,(select [Base].[dbo].[Cskhinfo].[Shorname] 
      from   [Base].[dbo].[Cskhinfo] 类推
      

  7.   

    Select a.Comm_no,a.Shorname as Comm_namefrom k.dbo.eg a,Base.dbo.Cskhinfo where b.Number=a.comm_no试试这个!
      

  8.   

    sorry!Select a.Comm_no,b.Shorname as Comm_name  //上面是 afrom k.dbo.eg a,Base.dbo.Cskhinfo b//上面缺 bwhere b.Number=a.comm_no试试这个!
      

  9.   

    renzhm(戴尔飞) :不行,delphi这样报错:
     Project Project1.exe raised exception class EDBEngiError with message
    'Invalid use of keyword.
    Token: .eg
    Line Number:1'
      

  10.   

    renzhm(戴尔飞) :这个语句在SQL 查询分析器中可以实现,但在具体实施到delphi中就有错误了,你能否在delphi中试试?摆脱了,大哥!
      

  11.   

    to geweiliang(寒剑客) :刚才我试过了,真的没有问题!环境:D6+SQL2000+ADO这是ADOQuery的SQL语句:
    -----------------------------
    select a.* from caacman.dbo.操作员 a,caacpro.dbo.操作员 bwhere a.操作员ID=b.操作员ID------------------------------
    ADOQuery的connectionstring连接的是caacman数据库在Delphi中一切正常!
      

  12.   

    renzhm(戴尔飞):Ado我不太会用,你能否用Query试试?
      

  13.   

    试过了,也没有问题,是不是你的BDE驱动出了问题环境:D6+SQL2000+BDE这是Query的SQL语句:
    -----------------------------
    select a.* from caacman.dbo.操作员 a,caacpro.dbo.操作员 bwhere a.操作员ID=b.操作员ID------------------------------
    Query的DataBaseName连接的是caacman别名;//指向caacman数据库在Delphi中一切正常!
      

  14.   

    renzhm(戴尔飞):bde没问题啊!我试过了,它报caacman.dbo.操作员、caacpro.dbo.操作员无效
      

  15.   

    renzhm(戴尔飞):这是我的程序,
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
       with query1 do
       begin
         Close;
         SQL.Clear;
         SQL.Text:='Select a.Comm_no,b.Shorname as Comm_name from Sdata.dbo.eg ,skysql.dbo.Cskhinfo b '
                    +'where b.Number=a.comm_no';
         Prepare;
         Open;
       end;
    end;
      

  16.   

    SQL.Text:='Select a.Comm_no,b.Shorname as Comm_name from 
    Sdata.dbo.eg a,skysql.dbo.Cskhinfo b '  //Sdata.dbo.eg a 丢了 a
                    +'where b.Number=a.comm_no';去掉Prepare;
      

  17.   

    还是不行,把你的程序发过来吧,我的信箱是:[email protected]
      

  18.   

    renzhm(戴尔飞) :程序怎么没代码?
      

  19.   

    renzhm(戴尔飞) :可以了,谢谢你!