FireBirdde Verileriyle Birlikte Tablo Kopyalama

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
AHMERT
Üye
Mesajlar: 9
Kayıt: 02 Ara 2005 08:35
Konum: GAZİANTEP

FireBirdde Verileriyle Birlikte Tablo Kopyalama

Mesaj gönderen AHMERT »

Merhaba Arkadaşlar
Ramazanınız Mübarek Olsun.

Firebird,İnterbase,Sybase bütün veri tabanı bileşenlerini tek bi dosya içerisinde tutuyor. Paradox gibi her tablo için ayrı ayrı dosyalar halinde değil.

Ben şunu sormak istiyorum :
Firebirde oluşturulan vede veri girişi yapılmış tablolardan istediğimi kendi oluşturduğum gdb dosyasının içerisine kopyalama yapabilir miyim? Bu kopyalamada önemli olan tablodaki verilerin aktarılması.

Çalışmalarınızda Başarılar...
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Mesaj gönderen shadowmann »

Borland delphi 7 yi kurduğunuzda datapump gelir. ONunla aktarabilirsiniz. Tablo yokda sa o oluşturur. Genelde sorun çıkarmaz. Ya da database workbench de de datapump var. DP ı kullanırken isterseniz bde yi isterseniz odbc kullanırsınız. Paradox ta klasörü gösterirsiniz. Ben genelde odbc yada kendi yazdığım programı kullanıyorum. Ben fb to mysql yazdım. seçtiğiniz tabloları aktarıyor. Tabii fieldlar aynı adda ise. Dikkat etmen gereken nokta db lerin karakter tablosu. Farklı ise karakterlerde sorun olabilir.
Kullanıcı avatarı
AHMERT
Üye
Mesajlar: 9
Kayıt: 02 Ara 2005 08:35
Konum: GAZİANTEP

Mesaj gönderen AHMERT »

DataPump u hiç kullanmadım. tablodan tabloya veri aktarımı gerektiğinde bunu hep kodla hallettim.
Benim kastettiğim:
Paradoxta herhangi bi dolu tabloyu kendi DATA klasörümün altına kopyalayıp gerekli bağlantılarını yapıp kullanıyordum. Tabi verileride tabloyla birlikte geliyor. Firebirde de aynı şekilde tabloyu verileriyle birlikte kopyalamam mümkün mü? Bunu merak ediyorum.
Bunu dönem işlemlerin de kullanmayı düşündüm.
Data2006.gdb nin içindeki TBL_CARI yi Data2007.gdb ye kopyalanabilir mi?
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Mesaj gönderen shadowmann »

Fdb içindeki bir tabloyu nasıl kopyalayabilirsiniz ki? Sadece tabloyu diğer db ye transfer edersiniz. Paradoxla mysql ve advantage da olur sizin dediğiniz. Yada saat geç oldu ben anlamadım ne sorduğunuzu.
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

kod ile bunu yapmanız lazım (yani iki database'ede bağlanıp bir tablodan okuyuğ diğerine yazmak). fakat unutmamız gereken eğer generator kullandıysanız onu eşitlemek, bağlı kayıtlar varsa onların bağlantılarının problem yaratmamasını sağlamak ...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
pardoxda olduğu gibi kopyala yapıştır olmaz.
tablonun ddl ini alırsınız.
kayıtları export import edersiniz.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
AHMERT
Üye
Mesajlar: 9
Kayıt: 02 Ara 2005 08:35
Konum: GAZİANTEP

Mesaj gönderen AHMERT »

Arkadaşlar yorumlarınız için teşekkürler.

Tabiki bu copy paste ile olacak bişey değil.
Aklıma gelen: ilk olarak kopyalamak isteğim tabloyu sql ile yeni data dosyamda oluşturmak, tabi trigger gen. ve sp leride aynı şekilde oluşturmak. bundan sonra bi while do döngüsüyle bütün verileri oluşturdum tabloya aktarmak. bu çözüm olur fakat çok uzun bi iş. Ben burda daha pratik bi yol bilen arkadaşlar olabilir diye sordum.

Ben bunun üzerinde biraz daha uğraşayım...

Çalışmalarınızda başarılar...
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Eğer FireBird dışında bir VT kullansaydın örneğin MS-SQL bu işlem aynen Copy-Paste kadar kolay bir işlem olacaktı.

BDE kullanmak şartıyla bu işlemi basit SQL komutlarıyla FireBird için de yapabilirsin. Benim buna benzer ihtiyaçlar için hazırladığım bir procedure var. Direk işini görebilir veya gerekirse düzeltmeler yaparak kullanabilirsin. Tabi ki BDE kullanman ilk şart:

Kod: Tümünü seç

procedure MyBDETableToInterBaseTable(const aBDETableFileName, aInterBaseDatabaseFileName, aInterBaseTableName, aDummyAliasName: string);
var
  MyList: TStringList;
  aBDETableName: string;
  L: Integer;
begin
  aBDETableName := ExtractFileName(aBDETableFileName);
  L := Length(ExtractFileExt(aBDETableName));
  if L > 0 then aBDETableName := System.Copy(aBDETableName, 1, Length(aBDETableName) - L);
  MyList := TStringList.Create;
  try
    MyList.Add('SERVER NAME=' + aInterBaseDatabaseFileName);
    MyList.Add('USER NAME=SYSDBA');
    MyList.Add('PASSWORD=masterkey');
    Session.DeleteAlias(aDummyAliasName);
    Session.AddAlias(aDummyAliasName, 'INTRBASE', MyList);
    with TQuery.Create(nil) do
    try
      DatabaseName := ExtractFilePath(aBDETableFileName);
      SessionName := 'Default';
      SQL.Text := 'INSERT INTO ":' + aDummyAliasName + ':' + aInterBaseTableName + '" SELECT * FROM ' + aBDETableName;
      ExecSQL;
    finally
      Free;
    end;
  finally
    MyList.Free;
    Session.DeleteAlias(aDummyAliasName);
  end;
end;
İyi çalışmalar.
Kullanıcı avatarı
AHMERT
Üye
Mesajlar: 9
Kayıt: 02 Ara 2005 08:35
Konum: GAZİANTEP

Mesaj gönderen AHMERT »

Sevgili Hakan Can çok teşekkürler.
Gönderdiğin kodlar sorduğum olayı açıklar tarzdan. Kodları en kısa zamanda düzenleyip kullanacağım.
Bunu dönem işlemlerinde kullanacağım. Başarılı olursam burdan gerekli açıklamayla kodları göndereceğim.
Şimdiye kadar dönem açıp kapama olayına pek sıcak bakmıyordum. Parçalar halinde data ları tutmak pek kullanışlı gelmiyor. fakat tablodaki veri sayısı artınca ister istemez yavaşlamalar oluyor ve program kullanıcılarımız o kadar büyük firmalar değil. yani öyle bütün verilere göre istatistikler isteyen firmalar değil.

ben paradoxta dönem işlemlerinde yedek alıp yeni dönem yılına gerekli boş tabloları atıyorum ve DATA klasörümde Data_2006, Data_2007 Alt klasörler oluşturuyorum ve bu klasörlerin adreslerini ayarlar tablosunda tutup, Dönem işlemleri penceresinde kullanıcı istediği dönemi varsayılan dönem olarak atıyor ve değişiklikler yapabiliyor. Ben bu mantığı kullanıyorum ve şimdiye kadar bi sıkıntı yaşamadım. bunu aynı şekilde Firebirde uygulamam ne kadar uygun olur bunu deneyip görecegiz.

Burda sizin dönem işlemlerini nasıl hallettiğinizi sormak istiyorum. sizin fikirleriniz çok önemli.

Çalışmalarınızda başarılar....
Kullanıcı avatarı
AHMERT
Üye
Mesajlar: 9
Kayıt: 02 Ara 2005 08:35
Konum: GAZİANTEP

Mesaj gönderen AHMERT »

Arkadaşlar veri tabanındaki tabloları bütün özellikleri ve verileri ile birlikte sql text olarak tek kodla çıkartabiliyoruz.

IBExtract companenti ile:

Kod: Tümünü seç

IBEXTRACT1.ExtractObject(EOTABLE,'TBL_CARI',[etDomain, etTable, etRole, etTrigger, etForeign,  etIndex, etData, etGrant, etCheck]);
MEMO1.Text:= IBExtract1.Items.Text;
yazabileceğiniz parametreler delphi yardımda mevcut.
eoDatabase
eoDomain
eoTable
eoView
eoFunction
eoTrigger
eoForeign
eoChecks

Sıra bunu sqlscript ile oluşturmaya geldi fakat benim companentlerimin arasında ibsqlscripti bulmadım :( :?:
Cevapla