insert into farklı veritabanları aktarımı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 673
Kayıt: 28 Nis 2011 09:33
Konum: İstanbul

insert into farklı veritabanları aktarımı

Mesaj gönderen greenegitim » 10 Eki 2012 08:54

Kod: Tümünü seç

    Query1.SQL.Text:='Insert into Tablo1 (id, alan1, alan2, alan3, alanX) select ("", alan1, alan2, alan3, alanX) from Tablo2';
    Query1.ExecSQL;
bu mantıkla farklı veri tabanındaki tabloya aktarma işlemini nasıl yapabilirim?
konuyu açmak gerekirse firebird e isler tablom var aynı isler tablosu mysql de de var firebirden mysql e veri aktarımı yapmak istiyorum sql ile varmıdır bir yolu yoksa kayıtları
zquery1aciklama.text:=ibquery1aciklama.text;
gibi tek tekmi göndermem gerekir.
Mücadele güzelleştirir!

Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 07:56
Konum: yine yeniden Ankara ^_^

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen unicorn64 » 10 Eki 2012 09:18

farklı veritabanı sistemleri (mysql-firebird) olunca aynı bağlantı nesnesiyle bağlanıp aynı query nesnesiyle işlem yapmaya imkanı yoktur diye düşünüyorum. aynı sistem olsa çözüm var da farklı farklı olunca kaynaktan sorgulayıp döngüyle hedefe aktarmaktan başka çözüm gelmiyor aklıma...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim

Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 673
Kayıt: 28 Nis 2011 09:33
Konum: İstanbul

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen greenegitim » 11 Eki 2012 09:23

Sanırım kaba kuvvet devam :)
Mücadele güzelleştirir!

Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4319
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen aslangeri » 31 Eki 2012 09:29

s.a.
datapum diye aratırsanınz bu işlemi yapan programlar var. ancak tabloların eşleştirmelerini vs yapmanız lazım.
ayrıca kaynak datanın scriptini oluşturarakda aktarımı yapabilirsiniz. tabi keylere (master ve foreign) dikkat etmek lazım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim

arifcell
Üye
Mesajlar: 7
Kayıt: 23 Eki 2005 12:16
Konum: İstanbul

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen arifcell » 31 Eki 2012 03:53

Ornek kod olarak degerlendırebılırsın
ıkı ayrı connectıon kurup
ıkı ayrı sorgu acıp asagıdakı gıbı bır duzenleme ıle calıstırabılırsın.
kolay gelsın.


K_Sorgu1.Close;
K_Sorgu1.SQL.Text:='SELECT SRKODU, KODU, ADI FROM DEPARTMAN WHERE SRKODU='+#39+Sirket.Text+#39;

Application.ProcessMessages;
TRY
K_Sorgu1.Open;
IF K_Sorgu1.RecordCount<>0 THEN
BEGIN
SayacKontrol(NIL);
K_Sorgu1.First;
WHILE NOT K_Sorgu1.Eof DO
BEGIN
Application.ProcessMessages;
IF H_Datatip.Text='Pdks3.0' THEN
BEGIN
H_Sorgu1.Close;
H_Sorgu1.SQL.Text:='INSERT INTO DEPARTMAN '+
'(SRKODU, KODU, ADI) VALUES ('+
#39+K_Sorgu1.Fields[0].AsString+#39+','+
#39+K_Sorgu1.Fields[1].AsString+#39+','+
#39+K_Sorgu1.Fields[2].AsString+#39+');';
END;
IF H_Datatip.Text='PersonelCI' THEN
BEGIN

END;
TRY
H_Sorgu1.ExecSQL;
BILGI.Caption:='DEPARTMAN BILGISI AKTARILIYOR';
Yaz_Guncelle(NIL);

EXCEPT
HataLogYaz(H_Sorgu1);
BILGI.Caption:='DEPARTMAN BILGISI AKTARILAMADI';
Hata_Guncelle(NIL);
END;
Oku_Guncelle(NIL);
K_Sorgu1.Next;
END;
END;
EXCEPT
HataLogYaz(K_Sorgu1);
Application.ProcessMessages;
END;
BILGI.Caption:='DEPARTMAN BILGISI AKTARIM ISLEMI TAMAMLANDI';
SayacTemizle(NIL);
Gül Bahçesine Giren Gül Olur.
Gül Olmasa Bile Gül Kokar.

denizfatihi
Üye
Mesajlar: 220
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen denizfatihi » 26 Mar 2015 03:36

Merhaba,

Konu ile ilgili olduğu için farklı bir başlık açmak istemedim.
Mssql kullanmakla beraber 2 adet farklı veritanım mevcut
A dan B ye tranfer kısmı tamam yanlız aktarılan veriler şayet daha önce mevcut ise tekrar aktarılmaması adına nasıl bir kontrol eklemem lazım aynı varitabanında olunca aşağıdaki gibi tekrar kaydı engelliyoruz yanlız farklı veritabanında nasıl yapmam gerekiyor.
Konu ile ilgili yardımınızı rica ederim.

Kod: Tümünü seç

WHERE FATREF NOT IN  (select FATREF FROM FATURA)

mkysoft
Kıdemli Üye
Mesajlar: 2833
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen mkysoft » 26 Mar 2015 03:46

Farklı yada aynı veri tabanı (üreticisi önemli değil) üzerinde transactional işlem yapmak mümkün:
1- Veritabanları bir birlerine linked olarak bağlanabiliyor ancak bu yöntemi tüm firmalar desteklemiyor. Mesala Oracle <-> MSSQL mümkün.
2- İşletim sistemi seviyesinde transaction objesi kullanılarak farklı veri tabanlarında işlem yapılabiliyor. Bu desteği sağlayan bildiğim veri tabanları: MySQL, Firebird, Oracle, MSSQL. Windows işletim sistemlerinde bu sistem MS DTC Service üzerinden çalışıyor. Teknoloji DTC - distrubited transaction control olarak isimlendiriliyor. Teknik olarak low level seviyede bunu nasıl sağladığını bende merak ediyorum. Sonuç olarak çalışıyor.

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4715
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen mrmarman » 27 Mar 2015 09:16

SQLserver-Oracle bağlantısını tecrübe ettiğim içi onu örnekleyim.

SQLServer üzerine ORACLE için LinkedServer kurup kullanıyorum. SQLServer'a ORACLE erişim şifreleri vs. içeren bir script ile izinler vs. bildirilip bir alias belirleniyor.

Sonra SQLServer sorgularında veritabani.dbo.tabloadi üçlemesi kullanır gibi köşeli parantezle [alias]..database. viewadi vb. şeklinde iki nokta yanyana ile dilersen JOIN ediyorsun dilersen hiç Oracle'a bulaşmadan tüm trafiği sqlserver üstleniyor.

Firebird cephesine gelince. İşte bu örnekteki gibi sqlserver'in içinden firebird erişimi yapılabilir. Araya sanki datasnap mantığı gibi sqlserver Layer koyunca bir sürü veritabanı (tabi server tarafından erişilebilir olması kaydıyla) aynı anda linklenebilir diye düşünüyorum.

Firebird için google taraması ile şunu gördüm.
Resim Resim

denizfatihi
Üye
Mesajlar: 220
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen denizfatihi » 27 Mar 2015 10:09

Teşekkür ederim.
Köşeli parantez olayı çok imiş, işimi çözdü.

Kod: Tümünü seç

veritabani.dbo.tabloadi

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4715
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen mrmarman » 27 Mar 2015 11:17

Cloud'dan kodlarıma yeniden bir göz gezdirdim, LinkedServer öncesi JOIN ettiğim oracle bağlantım şöyle imiş.

Kod: Tümünü seç

SQL.Add('LEFT JOIN                                                                                                  ');
      SQL.Add('( SELECT * FROM OPENROWSET(                                                                                ');
      SQL.Add(' ''OraOLEDB.Oracle''                                                                                       ');
      SQL.Add(' ''msdaora''                                                                                               ');
      SQL.Add(',''(DESCRIPTION=(CID=GTU_APP)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.0.xxx)(PORT=1521)))(CONNECT_DATA=(SID=trtxxx)(SERVER=DEDICATED)))''  ');
      SQL.Add(';''xxxloginadi'                                                                                           ');
      SQL.Add(';''xxxparola''                                                                                            ');
      SQL.Add(',''select * from "PERSONEL"."PRODUKSIYON_VIEW"'' )) PP                                                     ');
      SQL.Add('ON (PP.SICIL_NO = P.P_SicilNo)                         
Sonra bu yapı LinkedServer ile şuna dönmüş

Kod: Tümünü seç

SQL.Add('LEFT JOIN                                                                                                  ');
      SQL.Add('[ORA9]..PERSONEL.PRODUKSIYON_VIEW PP ');
      SQL.Add('ON (PP.SICIL_NO = P.P_SicilNo)' ) ;
      
Firebird ile tek seferlik benzeri bir yapı kullanmak isteyen olursa diye yazdım. OPENROWSET bile günü kurtarabilir.
En son mrmarman tarafından 27 Mar 2015 01:46 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Resim Resim

denizfatihi
Üye
Mesajlar: 220
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen denizfatihi » 27 Mar 2015 11:24

Hocam kodlara bakınca tv kanalında çalıştığınız çok belli,
personel ve prodüksiyon kelimeleri
Benim de aynı sorun başımda :)

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4715
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen mrmarman » 27 Mar 2015 11:25

Hocam bir sen bilmiyordun TV kanalında çalıştığımı, kadro tamam :lol:

TRT'deyim
Resim Resim

denizfatihi
Üye
Mesajlar: 220
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen denizfatihi » 27 Mar 2015 12:24

Beyaztv :)

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4715
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen mrmarman » 27 Mar 2015 12:29

@brs de orada değil miydi?
Kanal A mıydı yoksa
Resim Resim

denizfatihi
Üye
Mesajlar: 220
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: insert into farklı veritabanları aktarımı

Mesaj gönderen denizfatihi » 27 Mar 2015 12:33

Kanal A olması lazım

Cevapla