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ş...
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;
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
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ı?
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;
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.
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.
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.
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
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...
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.
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
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