Delphi Can

Orjinalini görmek için tıklayınız: farkli tablolardan verileri dataset e toplama
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
arkadaslar 
12 adet farkli veritabanlarinda tablolarim var. tablolarin hepsi ayni

ID:='856954'   sekildeki id yi tum tablolarda arayip buldugum tum satiri datasete atip 12 tabloya baktiktan sonra bulduklarimi dbgrid de 
gostermek istiyorum bu konuda biraz ipucu verebilirmisiniz.

ornegin 4 inci - 7 inci ve 11 inci tablolarda ayni id den kayit buldugunda dbgridde 3 satir veri gosterebilmeliyim.

saygilarimla
Merhaba, istediğiniz bu mu?

Aşağıdaki kodda ben 3 tablo için yazdım. Siz çoğaltıp 12 tablo için yazabilirsiniz. Dikkat etmeniz gereken şey IDNO, KISI_ID gibi alan adları tüm tablolarda olmalı ve aşağıdaki kodda da aynı alan adlarını yazmalısınız.

select IDNO,KISI_ID from
   (select IDNO,KISI_ID from TABLO1
   union all
   select IDNO,KISI_ID from TABLO2
   union all
   select IDNO,KISI_ID from TABLO3
   )A
where KISI_ID='2064'
SELECT * FROM db1.tableName where id= :id
union all 
SELECT * FROM db2.tableName where id= :id 

Yukarıdaki SQL kodunu  Query e ekledikten sonra aşağıdaki gibi parametreye değer göndererek işi çözebilirsin. 

Union : bire bir eşleşen satırlardan sadece 1 tanesini getirir
Union All : tüm kayıtları listeler

     UniQuery1.ParamByName('id').Value := 1; 

ayrıca farklı tablolar için FOR döngüsü ile şarta bağlı SQL kodlarını oluşturabilirsin

Not: Database ye bağlanmak için kullandığın kullanıcı bilgilerinin tüm database lere erişim yetkisi olmalıdır
anladigim kadariyla asagidaki gibi uyarladim hata aldim sanirim tam anlayamadim. union all komutunu arastirmaya devam edeyim 
bakalim hatami bulabilecekmiyim saygilar
var
i:integer;
sql:string;
begin
for i:=1 to 3 do
              begin
              AktifLaneVTbaglan(i);
              sql:='select * from TBL_OYUNLAR where BID='+frmKasaOyunAnaliz.gBID +
              'union all'+
              'select * from TBL_OYUNLAR where BID='+frmKasaOyunAnaliz.gBID +
              'union all'+
              'select * from TBL_OYUNLAR where BID='+frmKasaOyunAnaliz.gBID;

              DMlaneDBCON.IBQuery1.SQL.Clear;
              DMlaneDBCON.IBQuery1.SQL.Add(sql );
              DMlaneDBCON.IBQuery1.Open;

              DMlaneDBCON.DataSource1.DataSet:=DMlaneDBCON.IBQuery1;
              frmKasaOyunAnaliz.DBGrid2.DataSource:=DMlaneDBCON.DataSource1;
              end;
İlk olarak aynı db deki aynı tablo için union kullanmışsınız. Mantıksal olarak hatalı bir durum. Bundan dolayı Union da değil sql de sorun var.

Son olarak da kullandığınız veritabanı hangisi.
union all dan önce ve sonra boşluk da bırkaın
firebird 2.1 versiyon tablolar farkli bilgisayarlarda ayni adi kullaniyorlar. ayni tablodan farkli bilgisayarlarda 12 adet tablo var

asagidaki gibi duzenleme yaptim hata vermedi kod calisti ama sadece 2 ci tablodaki veriden 2 adet getirdi.

birinci tablodaki verileri almadi.

begin
data:='17032023191342';
for i:=1 to 2 do
              begin
              AktifLaneVTbaglan(i);
              sql:='select * from TBL_OYUNLAR where BID='+data +
              ' union all '+
              'select * from TBL_OYUNLAR where BID='+data;

              DMlaneDBCON.IBQuery1.SQL.Clear;
              DMlaneDBCON.IBQuery1.SQL.Add(sql );
              DMlaneDBCON.IBQuery1.Open;

              DMlaneDBCON.DataSource1.DataSet:=DMlaneDBCON.IBQuery1;
              frmKasaOyunAnaliz.DBGrid2.DataSource:=DMlaneDBCON.DataSource1;
              end;



end;

sanirim union all ayni veritabanindaki tablolardan veri cekip birlestirmek icin oysa bende 12 adet veritabani var
her veritabanina baglanip union all kullanmak olmuyor galiba
saygilar
Siz embeded olarak kullanıyorsanız yapmanız gereken her database yi ayrı ayrı bağlantı kurduktan sonra sorgulayarak sorgu sonucunu virtualTable yada memTable a kaydederek dbgrid de gösterebilirsiniz

Embeded değilse ilgili linkteki firebird cross-database i inceleyebilirsiniz.
https://stackoverflow.com/questions/3032...-databases
sagolun hocam aradigim sey bu idi virtualtable ve memtable arastirip ogrenecegim.
her tabloya sirayla girip aradigim veriler varsa memtable atip 12 sinide baktiktan sonra db gride aktaracagim.

merak ettigim bir sey var asagidaki kodda her veritabani baglantisinda dataset sifirlaniyormu. butun veri tabanlarina baksak 
bulduklarimizi dataset de toplasak sonra datagride aktarsak bu mumkun degil mi  
saygilar

data:='17032023191342';
for i:=1 to 2 do
              begin
              AktifLaneVTbaglan(i);
              sql:='select * from TBL_OYUNLAR where BID='+data;

              DMlaneDBCON.IBQuery1.SQL.Clear;
              DMlaneDBCON.IBQuery1.SQL.Add(sql );
              DMlaneDBCON.IBQuery1.Open;

              DMlaneDBCON.DataSource1.DataSet:=DMlaneDBCON.IBQuery1;

              end;
frmKasaOyunAnaliz.DBGrid2.DataSource:=DMlaneDBCON.DataSource1;
aynı DatabaseConnection nesnesi tek db bağlantısı yapacak yapıya sahiptir. Farklı bir database ye bağlanmaya çalıştığınızda mevcut bağlantı otomatik olarak kapatılır bu nedenle de table ve query ler de kapanacaktır.
Sayfalar: 1 2