Query ile istenen bilgilerin listelenmesi hakkında?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Query ile istenen bilgilerin listelenmesi hakkında?

Mesaj gönderen y.kulac »

arkadaşlar paradox tablo kullanıyorum. tablo adı Giren_Malzeme. bu tabloda Giren_Yer, Demirbas_No, Haricimalzeme_No adlı alanlar var.
tabloda Query1 ile sorgulama yapıyorum.

benim yaptığım işlem şu:

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from Malzeme_Giris');
Query1.Sql.Add('Where Lower(Gelen_Yer) Like Lower("'+Edit1.Text+'%")');
Query1.Open;

bu şekilde sorguladığım zaman Gelen_Yer deki bütün kayıtlar listeleniyor.
ama ben örneğin; Sivil Savunma Genel Müdürlüğü nden gelen demirbaş malzemeleri
listelemek istiyorum. Haricimalzeme_No ları listelemek istemiyorum.

bir adet Edit1 var.buraya gelen yeri yazıyorum. iki adet ComboBox var.
Edit1 e Gelen yeri yazdığım zaman ComboBox1 e tıklayınca Demirbaş numaralı kayıtlar,
Combobox2 ye tıklayınca Haricimalzeme numaralı kayıtlar listelensin.

soru biraz uzun oldu ama kusura bakmayınız. sorunumu tam olarak anlatmak istedim.
herkese iyi çalışmalar diler saygılar sunarım.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Eğer yanlış anlamadıysam ComboBox'ların OnChange olayına kod yazarak Query1 içindeki SQL'i isediğin şekilde düzeltip tekrar aç. Mesela combobox1'i seçince harici no'ya göre birşey istiyorsan

Query1.Close;
Query1.SQL.Clear;
.... // senin yazdığın sql
Query1.SQL.Add('and harici_no='''+combobox1.text+'''');
Query1.Open;

gibi her seferinde isteğine göre manuel oluştur.

Kolay gelsin.
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

merhaba mustafa bey.
comboboxların OnChange olayını kullanmayacağım.
şöyle anlatayım. Edit1 e kurum ismini yazacağım.
combobox1.caption, demirbaş malzemeler
combobox2.caption, harici malzemeler

örneğin B kurumundan bana malzeme gelmiş. gelen malzemelerde
hem demirbaş nolu, hemde haricimalzeme nolu malzemeler var.
edit1 e kurum ismini yazdım. combobox1 e tıklayınca edit1 de
yazan kurumdan gelen demirbaş nolu, combobox2 ye tıklayınca haricimalzeme nolu kayıtlar listelensin istiyorum. yani comboboxların OnClikc olayını kullanacağım. Query1 ile sorgu yapacağım. nasıl bir kod yazmalıyım.
iyi çalışmalar diler saygılar sunarım.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Yapmanız gereken Combobox'larin OnDropDown eventlerini kullanmak. Bu event içinde Combobox'in Imtes ozelliğini once Clear ile temizleyip sonra da ilgili kurum'a ait demirbaşların listesini alacaginiz bir query calistirip query'de gelen kayitlarin tamamini bir dongu icinde Combobox'in items ozelligine eklemek.
Kod yaklaşık söyle bir kod olmalı....

Kod: Tümünü seç

with TQuery.Create(Self) do
begin
  DatabaseName:='DATABASE';
  SQL.Add('Select DEMIRBAS_ADI, .......');
  SQL.Add('From .......');
  SQL.Add('Where .......');
  Open;
  Combobox1.Items.Clear;
  while not Eof() do
  begin
    Combobox1.Items.Add(FieldByName('DEMIRBAS_ADI').AsString);
    Next;
  end;
  Free;
end;

İhtiyaciniz olacak mi bilmiyorum ama bu tür durumlarda onemli birsorun şudur. Eger Combobox'a doldurdugunuz demirbaşlardan biri seçildiğinde seçilenin mesela DEMIRBAŞ_NO 'sunu bilmek istiyorsanız o zaman işler biraz karışıyor. Bu durumda alternatif çözümler üretmek zorundasınız.
Çözüm 1:
Delphi5'deki combobox desteklemiyor o yüzden ben infopower'in Combobox'i ile bunu yapiyorum ama belki sizdeki versiyonda bu destek vardir veya benim bilmedigim bir karakter ile bu destekleniyor olabilir. Combobox'in items ozelligine ekleme yaparken demirbaş adini eklerken onun hemen yanina da bir Tab karakteri ekleyip (#9 şeklinde) onun yanina da demirbaş no alanini ekleyince items içinde her iki degeri de tutabilmenize rağmen #9 karakteri ve ondan sonraki no alani combobox 'ta gorunmemektedir. Siz gerekli secim yapildiginda basit bir string ayiklama kodu ile ister demirbaş adini isterseniz de demiraş nosunu alabilirsiniz.
Çözüm 2:
Bizim gibi bu tür durumlari (mesela rapor kriter ekranlarinda veri almalarda vs..) çok kullanan biri iseniz. O zaman belki combobox componenti baz alip ona Items gibi bir de Values isimli bir ozellik ekleyerek kendi combobox'inizi olusturabilirsiniz. Boylece demirbaş adlarını items'a demirbaş nolarini da values'a ekleyebilirsiniz...


Tabi ücretli bazi component setlerinde bu tür durumlari kolaylaştıran comboboxlarin oldugu da ayri bir çözüm olabilir.....


Kolay gelsin....
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

öncelikle sizlerden özür dilerim.
değerli zamanlarınızı aldım. soruyu yanlış sormuşum. :oops:
tam düzeltirken elektrikler gitti. combobox ların yerine
radiobutton yazmam lazımdı. yinede teşekkür ederim.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Aynı mantıkla radio buttonlar için de benzer şeyleri yapabilirsiniz bence. Sonucta bir liste cekilip radio buttonlara eklenecek. Bunu da kurumu sectikten sonra yapabilirsiniz mesela....
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

sağolun hocam. Allah razı olsun. sorunu halletim.
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

Merhaba,
Konunun devamı niteliğinde olduğu için ayrı bir başlık açmak istemedim.Verdiğniz örneği programımıda aynn uyguladım.exe hatası almadan çaıştı.Yalnız combobox aşağı indiği zaman
Project project1.exe raised expection class EAccessVioalation with message 'Access violation at adress 004b802C module 'Project1.exe'. adında hata mesajı alıyorum.Veritabanım access ado kullanıyorum.

Kod: Tümünü seç

procedure TForm1.DBComboBox3DropDown(Sender: TObject);
begin
 with ADOQuery1 do
begin
  SQL.Clear;
  SQL.Add('select distinct GELDIGIYER from gelen');
  Open;
  DBComboBox3.Items.Clear;
  while not ADOQuery1.Eof do
  begin
 DBComboBox3.Items.Add(FieldByName('GELDIGIYER').AsString);
    Next;
  end;
  Free;
end;
end;
Sevgi ve Saygılarımla...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
sanırım free; satırı fazladan kalmış.
Kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

Çok teşekkür ederim.free satırı yazdıgınız gibi fazladan eklenmiş.
Saygılar ve Sevgiler...

Kod: Tümünü seç

procedure TForm1.DBComboBox3DropDown(Sender: TObject);
begin
 with ADOQuery1 do
 begin
  SQL.Clear;
  SQL.Add('select distinct GELDIGIYER from gelen');
  Open;
  DBComboBox3.Items.Clear;
  while not ADOQuery1.Eof do
   begin
    DBComboBox3.Items.Add(FieldByName('GELDIGIYER').AsString);
    Next;
   end;
 end;
end;
Cevapla