数据表的本地化

本地化的目的是将某一个table或query当做一个数据表来进行处理,并且这个本地化的数据表可以用在sql语句中。

需要用到控件:TFDLOCALSQL。

例如,程序中有两个CONNECTION,分别是CON1和CON2,我们需要在CON1中使用到CON2的数据。

Qry1连接的是con1,ndbairports(也是一个tfdquery)连接的是con2,可以按以下的代码设计:

FDLocalSQL1.Connection :=con1;
NDBAIRPORTS.LocalSQL:=FDLocalSQL1;
FDLocalSQL1.Active := True;
QRY1.Open('SELECT * FROM AIRPORT WHere ICAO IN (SELECT IDENT FROM NDBAIRPORTS)');

注意,要先确认FDLocalSQL1.Active := True;

在上例中,直接把NDBAIRPORTS当做一个表来使用。

当然,如果本身连接都是sqlite的连接,可以用attach来实现此功能,但本地化可以连接两个不同的连接,例如一个是sqlite数据库,一个是oracle数据库。

归根到底,本地化的原理就是:

  1. 设置一个本地化连接控件TFDLOCALSQL。
  2. 将其connection属性设置到需要使用本地化连接的连接TFDconnection。
  3. 将需要使用的表的LocalSQL属性设置到你设置的本地化连接控件。
  4. 注意一定要让本地化连接控件的active:=true,另外,如果本地化连接的表是FDMEMTABLE,则这个内存表一定要打开,空数据表是不允许本地化的。

完成了以上的设置,就可以把其它连接的查询当做一个表来使用了。

如果另一个查询来自非firedac连接怎么办?

其实TFDLOCALSQL的正确打开方式是:

With fdlocalsql1.datasets.add do
Begin
  Dataset:=oaqry1;//使用ODAC连接的ORACLE查询
  Name:=’notamapt’;
End;

这个才是设置本地化连接的完整方式。在qry1中,就可以把notamapt当做一个表来使用了。

跨DBMS的本地化还可以采取使用TFDMETable来实现,具体就是把任何查询拷贝到TFDMEMTable中,然后把内存表当做一个表使用。

 
posted @ 2022-11-22 09:15  Luo大哥  阅读(141)  评论(0编辑  收藏  举报