2 farlklı database tekbir dbgridde toplamak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

2 farlklı database tekbir dbgridde toplamak

Mesaj gönderen Armani »

Merhaba arkadaşlar.
Bir sorum olacaktı sizlere. 2 database var.
birincisi *.mdb, diğeri ise Sql ile başka bir database e bağlandım.

bu iki database i 2 ad. dbgridde ayrı ayrı görebiliyorum. istedigim sorguları yapıyorum. Fakat burdaki amacım bu 2 database i tek bir dbgridde toplamak. Toplamakdaki kastım birleştirmek. yani
ör// elma ile ilgili bilgileri *.mdb den elmanıın fiatları ile ilgili bilgileri sql üzerinden tek bir dbgridde birleştirmek.
Bunun için biraz araştırdım mem data ile databaseleri burda toplayarak istedigim dataları dbgridde çağırarak olabiliyormuş .Bunu başarabilecegimi sanmıyorum..
Farklı bir yolu varmı. Var ise detaylı yazarsanız sevinirim.

Teşekkürler
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Bir tarafın Query'sini çekersiniz ve diğer kanattan çekeceğiniz bilgileri Calculated Field tanımlayarak yaparsınız ama açıkçası işinize pek yaramaz.

Eğer veri girişinden filan bahsediyorsanız sizi bayaa üzer bu olay !...
Bence en mantıklısını yapıp bu iki ayrı Database'i bir araya getirin.

Zira her bir database için farklı connection'lar kurmak zorunda kalacaksınız ve Data bütünşüğünüzü de ister istemez yitireceksiniz. Sizi çok ama çok sıkıntıya sokar.

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Evet bu mumkun.... 2 adet TDatabase nesnesi kullanmanız gerekiyor tabi...

ilgili kodu asagidaki mesajda bulabilirsiniz....
viewtopic.php?t=1539
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

teşekkürler fahrettin abi,kuri bey. Acemi oldugum için sizin önerilerinizi beceremedim. fakat ben çözüm yolunu şu şekilde bulmaya çalıştım. Ama kodlarım berbat oldugu için tam olarak gerçekleştiremedim

Amacım: Adoquery2 de Product_ID kolonunda girdigim(new veya chance recort) bir ID numarasını Adoquery1 de sorgulayıp o Id ye ait diger bilgileri ado2 ye taşımak.

Bununla ilgili demelerimde şu kodları yazdım

Kod: Tümünü seç

procedure TForm1.DBGrid2DrawColumnCell......
var
Gms : String;
  begin
  gms := adoquery2.FieldByName('Product_ID').Asstring;

      ADOQuery1.sql.Clear;
      ADOQuery1.SQL.add('select * from ARTICLE');
      ADOQuery1.sql.add('where P_ART_NO =''' + gms+'''');
      ADOQuery1.open;

    end;
ADOQuery2Manufacturer.Value := ADOQuery1SRA_SUPPL_NO.asstring;
ADOQuery2Name.Value := ADOQuery1ART_DESCR.AsString;
ADOQuery2Category.Value := ADOQuery1AGB_ART_GRP_NO.asstring;
  end;
end;
Bu kod hakkında yanlışlarımı gösterebilirseniz sevinirim.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Armani yazdı:

Kod: Tümünü seç

procedure TForm1.DBGrid2DrawColumnCell......
var
Gms : String;
  begin
  gms := adoquery2.FieldByName('Product_ID').Asstring;

      ADOQuery1.sql.Clear;
      ADOQuery1.SQL.add('select * from ARTICLE');
      ADOQuery1.sql.add('where P_ART_NO =''' + gms+'''');
      ADOQuery1.open;

    end;
ADOQuery2Manufacturer.Value := ADOQuery1SRA_SUPPL_NO.asstring;
ADOQuery2Name.Value := ADOQuery1ART_DESCR.AsString;
ADOQuery2Category.Value := ADOQuery1AGB_ART_GRP_NO.asstring;
  end;
end;
Amacın sadece bir taraftan bilgileri alıp diğer tarafta göstermek ise,
Table'ın veya Query'nin üzerinde double click yapıp Field'larını getir,
daha sonra field list üzerinde sağ click ile new Field'ı seç,
isim, tip ve field boyutu bilgilerini gir ve sonra FieldKind'ını belirt (Calculated).

Böylelikle yeni bir fieldı ilgili query'e eklemiş olursun. Fakat bu eklemiş olduğun yeni field sadece client makinada göstermelik olarak yer alacak bir bilgidir, fakat buraya bilgi nereden gelecek diye sorduğunda da,
table'ın Eventlerinden OnCalculatedField eventine, oraya gelecek bilgiyi koyabilirsin.

Örneğin. bizim calculated field'ımızın adı Table1CALCFIELD olsun

Kod: Tümünü seç

  if Table1CINSIYET.AsInteger = 1 then
  begin
    Table1CALCFIELD.AsString := 'ERKEK' ;
  end
  else
  begin
    Table1CALCFIELD.AsString := 'DİŞİ' ;
  end ;
Yukarıdaki örnekte CINSIYET alanına gelen değer 1 ise Ekranda ERKEK görülecektir, değilse DİŞİ görülecektir.

Gibi gibi ....

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

teşekkürler kuri.
ben bu problemi daha farklı bir yöntemle çözdüm

Kod: Tümünü seç

procedure TForm1.DBGrid2KeyPress(Sender: TObject; var Key: Char);
 var
  gms : String;
   begin
    gms := Adoquery2.fieldbyname('Product_ID').AsString;
    begin

      ADOQuery2.Edit;
      ADOQuery1.sql.Clear;
      ADOQuery1.SQL.add('select * from ARTICLE');
      ADOQuery1.sql.add('where P_ART_NO =''' +gms+'''');
      ADOQuery1.open;
    end;
  begin
      if ADOQuery1.RecordCount = 0 then
      ShowMessage(Gms + ' Nolu Artikel Bulunamadı!');

    end;
    ADOQuery2Manufacturer.Value := ADOQuery1SRA_SUPPL_NO.asstring;
    ADOQuery2Name.Value := ADOQuery1ART_DESCR.AsString;
    ADOQuery2Category.Value := ADOQuery1AGB_ART_GRP_NO.asstring;
   Adoquery1.Close;
Cevapla