Delphi Can

Orjinalini görmek için tıklayınız: birden fazla veritabanindan ayni verileri dataset de birlestirmek
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2 3
arkadaslar birden fazla veritabanindaki benzer tablodaki bilgileri alip stringgride atiyorum. isimi goruyor.

ama dbgrid kullanmak istiyorum.  

soyle birsey yapabiliyormuyuz.

once ilk veritabanina baglan bilgileri al datasete aktar sonra ikinci veritabanina baglan bilgileri al datasete aktar  
sonra datasetin icini dbgride aktar.

bu sekilde bir calismayi veya buna benzer bir calismayi nasil yapabilirim 
datset mi datatable mi kullanayim.

hangi baslik ile konuyu arastirayim.

saygilarimla
clientdataset ekleyip datalari ona atip dbgridde gosterebilirim sanirim
deneyecegim.
saygilar
iki db'den de veri alacağın tablo tamamen aynı mı
Birden fazla dbden okunan veriler birleştirilerek tek bir dbgrid üzerinde gösterim mi isteniyor.
Anladığım kadarıyla iki farklı databasede aynı sunucuda
böyle bir durumda ,Adoquery ve dataset ile bu işi çözebilirsiniz, Adoquery nin içinde databaseleride seçip sorguyu birleştirebilirsiniz.
Firebird'de iki farklı veritabanını birleştirmek için EXECUTE STATEMENT veya EXTERNAL DATA SOURCE yöntemlerini kullanabilirsiniz. Ancak, Firebird 2.5.8'de bu özelliklerin kısıtlı olduğunu unutmayın. İki veritabanından veri çekmek ve birleştirmek için aşağıdaki gibi bir yöntem izleyebilirsiniz.
Örnek: EXECUTE STATEMENT ile Birleştirme
Farz edelim ki iki veritabanınız var:
  1. DB1:
    CUSTOMERS
  2. tablosu
  3. DB2:
    ORDERS
  4. tablosu
Aşağıdaki adımları izleyerek birleştirme yapabilirsiniz:
1. İlk olarak, bağlantı dizinlerini belirleyin
sql

Kod:
-- DB1 bağlantı dizesi: 'C:\Databases\DB1.FDB'
-- DB2 bağlantı dizesi: 'C:\Databases\DB2.FDB'
2. SQL Örneği sql
Kod:
-- DB1 üzerinde çalışıyorsunuz
SELECT
   C.CUSTOMER_ID,
   C.CUSTOMER_NAME,
   O.ORDER_ID,
   O.ORDER_DATE
FROM
   CUSTOMERS C
LEFT JOIN
   (
       SELECT
           O.ORDER_ID,
           O.CUSTOMER_ID,
           O.ORDER_DATE
       FROM
           EXTERNAL DATA SOURCE 'C:\Databases\DB2.FDB'
           AS O
   ) O
ON
   C.CUSTOMER_ID = O.CUSTOMER_ID;
Bu yöntem genellikle EXTERNAL DATA SOURCE özelliğini kullanır.

3. EXECUTE STATEMENT Örneği
EXECUTE STATEMENT ile iki veritabanına bağlanarak veriyi birleştirebilirsiniz. Bunun için:
sql
Kod:
-- DB1 üzerinde çalışıyorsunuz
SELECT
   C.CUSTOMER_ID,
   C.CUSTOMER_NAME,
   O.ORDER_ID,
   O.ORDER_DATE
FROM
   CUSTOMERS C
LEFT JOIN
   (
       SELECT
           ORDER_ID,
           CUSTOMER_ID,
           ORDER_DATE
       FROM
           EXTERNAL DATA SOURCE 'C:\Databases\DB2.FDB'
   ) O
ON
   C.CUSTOMER_ID=ON
sql
Kod:
-- DB1 üzerinde çalışıyorsunuz
SELECT
   C.CUSTOMER_ID,
   C.CUSTOMER_NAME,
   O.ORDER_ID,
   O.ORDER_DATE
FROM
   CUSTOMERS C
LEFT JOIN
   (
       EXECUTE STATEMENT 'SELECT ORDER_ID, CUSTOMER_ID, ORDER_DATE FROM ORDERS'
       ON EXTERNAL 'C:\Databases\DB2.FDB'
   ) O
ON
   C.CUSTOMER_ID = O.CUSTOMER_ID;
Bu örnek, EXECUTE STATEMENT kullanarak başka bir veritabanından veri çekme yöntemini gösterir.

Firebird 2.58'de EXTERNAL TABLE kullanımı bazı durumlarda sınırlıdır.

GPT emmiden alıntıdır.
Merhaba, nasıl bir veri çekiceksiniz bilemiyorum ama, mesela bir veritabanındaki cari hesap koduna ait başka bir veritabanındaki ünvanı almak isterseniz aşağıdaki gibi bir kod kullanabilirsiniz.

execute block
returns (
  KOD INTEGER,
  UNVAN varchar(100))
as
begin
  for SELECT KOD, UNVAN
  FROM BARKOD_CARI
  into :KOD, :UNVAN do begin

     execute statement 'select UNVAN from CARI where KOD=' || :KOD
     on external '127.0.0.1/3050:C:\ETICARI\IMALAT\DATA\IML_DB.fdb' as user 'SYSDBA' password 'masterkey'
     into :UNVAN;

     suspend;
  end
end
(29-12-2024, Saat: 15:18)sadikacar60 Adlı Kullanıcıdan Alıntı: [ -> ]arkadaslar birden fazla veritabanindaki benzer tablodaki bilgileri alip stringgride atiyorum. isimi goruyor.

ama dbgrid kullanmak istiyorum.  

soyle birsey yapabiliyormuyuz.

once ilk veritabanina baglan bilgileri al datasete aktar sonra ikinci veritabanina baglan bilgileri al datasete aktar  
sonra datasetin icini dbgride aktar.

bu sekilde bir calismayi veya buna benzer bir calismayi nasil yapabilirim 
datset mi datatable mi kullanayim.

hangi baslik ile konuyu arastirayim.

saygilarimla


bu iş için memdata kullansan daha iyi olur. gride bağlı datasource u memdataya bağla. ilk tablondan while ile çek. döngü bittikten sonra ikinci while ile diğer tablondan veri çek ve bunları memdataya yazdır. hepsini gride yazdıracaktır.
DMvt.SQLQueryL.Open;

DMvt.DataSourceL.DataSet:=DMvt.SQLQueryL;  // normalde dasete bu sekilde bilgileri aktariyordum
DMvt.MemDataset1 :=DMvt.SQLQueryL;   //bu sekilde denedim calismiyor
DMvt.MemDataset1 :=DMvt.DataSourceL.DataSet;  //bu sekildede denedim olmadi
internetden birsey bulamadim memdatasete pratik sekilde data aktaramiyormuyuz.
while ile bilgileri tek tek mi kaydetmeliyiz.

saygilarimla
(03-01-2025, Saat: 21:41)sadikacar60 Adlı Kullanıcıdan Alıntı: [ -> ]
DMvt.SQLQueryL.Open;

DMvt.DataSourceL.DataSet:=DMvt.SQLQueryL;  // normalde dasete bu sekilde bilgileri aktariyordum
DMvt.MemDataset1 :=DMvt.SQLQueryL;   //bu sekilde denedim calismiyor
DMvt.MemDataset1 :=DMvt.DataSourceL.DataSet;  //bu sekildede denedim olmadi
internetden birsey bulamadim memdatasete pratik sekilde data aktaramiyormuyuz.
while ile bilgileri tek tek mi kaydetmeliyiz.

saygilarimla

Merhabalar,

ClientDataSet.AppendData(Query1, True);
ClientDataSet.AppendData(Query2, True);
işinize yarayabilir mi?

https://docwiki.embarcadero.com/Librarie...AppendData

Kolay gelsin.
Sayfalar: 1 2 3