karşılaştırma sonucu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Tropic
Üye
Mesajlar: 48
Kayıt: 12 Nis 2005 10:45

karşılaştırma sonucu

Mesaj gönderen Tropic »

Arkadaşlar

2 adet db gride 2 ayrı tablodan 2 ayrı query ile veriler listeletiyorum. 1. gride sorgudan gelen EvrakNo(columns[0]), Barkod(columns[1]), Miktar(columns[3]) columns ları haricinde kendi tanımladığım bir ISIM(columns[2]) columns u var. Bu columnsa aşağıdaki kodlarla 1. ve 2. tablodan gelen Barkod alanlarındaki veriler birbirine eşitse bu barkoda ait ismi 2. tablodaki ACIKLAMA alanından alıp grid1 de tanımladığım ISIM columns una yazmasını istiyorum.
Fakat karşılaştırma sonucundaki değer boş...

Kod: Tümünü seç

   ADOQuery1.Close;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add('Select EvrakNo,Barkod,Miktar From DATALAR Where Islem = ''S'' Order By SiraNo');
   ADOQuery1.Open;

   ADOQuery3.Close;
   ADOQuery3.SQL.Clear;
   ADOQuery3.SQL.Add('Select BARKOD,ACIKLAMA From STOK');
   ADOQuery3.Open;

   With AdoQuery3 do
      While NOT EOF do begin
        if ADOQuery1.Fields[2].AsString = ADOQuery3.Fields[0].AsString then
        begin
        Dbgrid1.Columns[2].FieldName:= ADOQuery3.Fields[1].AsString;
        end;
        Next;
        end;
        
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Degisikligi dbgrid uzerinde yapma. Dbgridin bagli oldugu querydeki ilgili alani degistir.

Kolay gelsin...
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Tropic
Üye
Mesajlar: 48
Kayıt: 12 Nis 2005 10:45

Mesaj gönderen Tropic »

hdayi yazdı:Degisikligi dbgrid uzerinde yapma. Dbgridin bagli oldugu querydeki ilgili alani degistir.

Kolay gelsin...

Hocam anlamadım, örnek verirmisin...
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Ornek vermem biraz zor zira delphi yok makinada ancak sunun gibi bisey olacak.

Kod: Tümünü seç

if ADOQuery1.Fields[2].AsString = ADOQuery3.Fields[0].AsString then
        begin
             ADOQuery13Fields[2].AsString := ADOQuery3.Fields[1].AsString;
        end; [quote]

Kolay gelsin...[/quote]
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Tropic
Üye
Mesajlar: 48
Kayıt: 12 Nis 2005 10:45

Mesaj gönderen Tropic »

Hocam sizin verdiğiniz yapı benim yapmak istediğim yapıyla uyuşmuyor. Ben aşağıdaki yapı ile veritabanı üzerinde ilişkisi olmayan 2 tabloyu delphi üzerinde binevi ilişki kurdurarak istediğim columns a almak istiyorum. Aşağıdaki kod yapısı doğru değil sanırım denemelerime göre. Yapmak istediğim şeyin doğru kod yapısı nasıl olmalı, fikir verecek arakadaşlar varmı?

Kod: Tümünü seç

With AdoQuery3 do 
      While NOT EOF do begin 
        if ADOQuery1.Fields[2..AsString = ADOQuery3.Fields[0].AsString then 
        begin 
        Dbgrid1.Columns[2].FieldName:= ADOQuery3.Fields[1].AsString; 
        end; 
        Next; 
        end; 
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Kod: Tümünü seç

With AdoQuery3 do 
begin
      for i:=0 to AdoQuery3.fields.count-1 do
begin
        begin 
        Dbgrid1.Columns[i+1].FieldName:= ADOQuery3.Fields[i].AsString; 
       end; 
Şu anda delphiyi açmaya müsati olmadığım için böyle yaptım yapman gereken dbgridin fieldname ine istediğin alanı göstermen için query nin kayıtları için döngü değilde alanların sayısına göre döngü açman lazım senin yapmak istediğin dbgrid'in bir alanına tbalodaki bir alanda mevcut tüm kayıtları aktarmak ama bu mümkünmü bilmiyorum dbgridin istediğin columsuna tablodan istediğin alanı fieldnamenine getirerek zaten bütün o alandaki kayıtları çekersin query de ne varsa.bilmem anlatabildimmi.kolay gelsin.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
yazicih
Üye
Mesajlar: 92
Kayıt: 11 Şub 2005 02:10
Konum: Antalya

Mesaj gönderen yazicih »

problemin tam anlaşılmıyor amacın sadece gridde gösterip veritabanına yazdırmamaksa calculated field oluşturacaksın. ve ona atama yapacaksın
dbgrid zaten o kayıdı görür. ama mantığın ne olursa olsun dbgridin columnuna direkt değer atama diye bir şey olamaz.
iqprog

Mesaj gönderen iqprog »

2. gridin 1. kolonu barkod kolonuna eşitse 1. grid alt toplamının en büyüğünü alacaksın. aldığın değer 2.gridde 1. kolonda varsa 2.griddeki 3. kolondaki bilgiyi alıp 1.griddeki 4. kolona yazacaksın. :D
En son iqprog tarafından 28 Ara 2006 05:10 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Tropic
Üye
Mesajlar: 48
Kayıt: 12 Nis 2005 10:45

Mesaj gönderen Tropic »

Arkadaşlar anlatmak istediğim konu çok açık. Tekrar basit bir şekilde anlatmaya çalışayım.

2 tablom var.

1. tablomun A sütunu ve B isimli sütunu var, 2. tablomun B ve C isimli sütunu var. 2 TABLONUNDA B SÜTUNLARININ KAYITLARI AYNI. Bu tablolar ilişkili olmadığı için SQL ile eşleştirip değer alamıyorum.

Bu yüzden,

1. tablonun A ve B sütunlarındaki kayıtları dbgrid1 e aldım. 2 tablonunda B ve C sütunlarındaki kayıtları dbgrid2 ye aldım. Buraya kadar problem yok.

Yapmak istediğim dbgrid1 e ek bir sütun açıp Ek olsun ismi. 2 tablonun B alanlarından 2 gride gelen kayıtları karşılaştırıp A sütunundaki kayıtın eşteşi C sütunu kaydını dbrid1 deki açtığım EK sütununa yazdırmak.

Aşağıdaki örnekteki yapı...

Kod: Tümünü seç

         
 Tablo1                                Tablo2

A sütunu     B sütunu           B sütunu      C sütunu
  AAA            1                  1            Ali
  BBB            2                  2            Veli
  CCC            3                  3            Ahmet
  DDD            4                  4            Hakan


Dbgrid1 de istediğim sonuç aşağıdaki gibi...


           Dbgrid1

A sütunu      B sütunu       Ek

  CCC            3          Ahmet
  DDD            4          Hakan
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

bu sql ile olur ama benim su anda cevap verebilecek durumum yok.
makinada hic bisey yok cunku.

kolay gelsin...
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Tropic
Üye
Mesajlar: 48
Kayıt: 12 Nis 2005 10:45

Mesaj gönderen Tropic »

hdayi yazdı:bu sql ile olur ama benim su anda cevap verebilecek durumum yok.
makinada hic bisey yok cunku.

kolay gelsin...
Hocam SQL ile olması için İLİŞKİ TANIMLARI yapılması gerekli database de. Ben başka bir programın database ini kullanıyorum. Böyle bir şansım yok. Yazdığım prog. tarafından çözüm üretmem gerek...
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Onun için calculatedfields alanı kullanabilirsin bu yolla çözebilirsin sorununu .Kolay gelsin.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Tropic
Üye
Mesajlar: 48
Kayıt: 12 Nis 2005 10:45

Mesaj gönderen Tropic »

Kod: Tümünü seç

         
 Tablo1                                Tablo2

A sütunu     B sütunu           B sütunu      C sütunu
  AAA            1                  1            Ali
  BBB            2                  2            Veli
  CCC            3                  3            Ahmet
  DDD            4                  4            Hakan


Dbgrid1 de istediğim sonuç aşağıdaki gibi...


           Dbgrid1

A sütunu      B sütunu       Ek

  CCC            3          Ahmet
  DDD            4          Hakan

Arkadaşlar bu konuda bana örnek verebilecek bi arkadaş yokmu?
Derdim dbridde göstermek değil calc field v.s. değil...

İLİŞKİSİ OLMAYAN 2 TABLODAKİ BENZER ALANLARI EŞLEŞTİRİP DEĞER LİSTELEMEK.

DAHA AÇIK ANLATAYIM :::

Kod: Tümünü seç

SELECT TABLO1.A, TABLO1.B, TABLO2.C FROM TABLO1, TABLO2 WHERE TABLO1.B=TABLO2.B 


SORGUSUNUN YAPTIĞI İŞİ YAPACAK DELPHI DÖNGÜSÜ NASIL YAPILIR BUNU İSTİYORUM.

YUKARIDAKİ SORGUYU KULLANAMIYORUM ÇÜNKÜ DATABASE DE TABLO1.B İLE TABLO2.B ARASINDA İLİŞKİ YOK...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
arkadaşım ilişki yok derken iki tablodada aynı alan varsa bu bir ilişkidir zaten.
illa vt de bu alanla bu alan ilişkili diye işaretlemene gerk yok önce bu konuda anlaşalım.
sonra çözüme gelelim.
ikitane tane query var

Kod: Tümünü seç

q1     q2
a b   b c 
alanları var.
şimdi q1 in fieldeditörünü aç. fields editörde sağ tıkla newfield de.
newfield editör gelecek.
FieldProperties kısmından name ve type ını yaz.
FieldType Kısmında Lookup seç.
lookup u seçince Lookup definition kısmı aktif olacak. orda
  • Key field b
    dataset q2
    lookup keys b
    result field c
olacak şekilde ayarla.
istediğin işlem gerçekleşmiş olacak.
yalnız q1 i open ettiğin zaman q2 otomatik olarak açılıyor (yanlış hatırlamıyorsam) sqllerini önceden hazırlaman lazım yani.
bide q1 ve q2 nin sqllerini runtime da değiştirmezsen iyi olur. o zaman bu işlemleri kod ile yapman gerekir.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla