comboboxla kayıt seçimi yapmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

comboboxla kayıt seçimi yapmak

Mesaj gönderen gercek_16 »

merhabalar

Cari formuma bir combobox koyup bu comboboxta cari tablomdaki firma kodu ve firma adını aynı comboboxtan seçtirip, seçilen firmaya göre işlem yaptırtmak istiyorum. (Firma_kodu ve Firma_adı aynı tabloda)

bir comboboxta 2 alanı birden göstermek mümkünmü?

yada bu işi nasıl yapabilirim? combobox dışında da bir çözümde olabilir
ama kullanıcı açısından en kullanışlı yol combobox olur diye düşünüyorum.

teşekkürler..
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

formun oncreate olayında bu bilgileri comboboza doldurabilirsin
eğer bunu yapmak istiyorsan

Kod: Tümünü seç

var
a:integer
begin
combobox.items.clear;
table1.first;
for a:0 to table1.recordcount do
begin
combobox1.items.add(table1Firma_kodu.value+' '+table1Firma_adi);
end;
end;
tablodaki bilgileri bu şekilde comboboxa doldurabilisin :lol:
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

sen bu tarz şeyler için dinamik dizi kullanıyorum ve firma kodu nu dizide, firma adını cobmobox da tutuyorum.

Kod: Tümünü seç

FirmaNo : array of LongInt;
SetLength(FirmaNo, kaç tane müşterin varsa o kadarlık yer ayırıyorsun);

Kod: Tümünü seç

FirmaNo[ComboBox1.ItemIndex];
DeveloperToolKit

..::|YeşilMavi|::..
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

evet yardımınız için teşekkür ederim.
Bunu yapmak istiyordum fakat şöyle bir problem var kayıtların hepsini listelemiyor. kodum şu:

Kod: Tümünü seç

VAR
  X:integer;
begin
  combobox1.items.clear;
  FDatamod_CariBasYeni.IBDataSet1.Open;
  FDatamod_CariBasYeni.IBDataSet1.first;
  for X:=0 TO FDatamod_CariBasYeni.IBDataSet1.RecordCount DO
  begin
  combobox1.items.add(FDatamod_CariBasYeni.IBDataSet1FIRMA_KODU.AsString+' '+fDatamod_CariBasYeni.IBDataSet1FIRMA_ADI.text);

  FDatamod_CariBasYeni.IBDataSet1.Next;  //Bu satırı silip denediğimde ilk kaydı iki kere listeliyor.  
  end;
Sadece ilk 2 kaydı listeliyor. Tabloda 4 kaydım var.
menderes

Mesaj gönderen menderes »

Kolay gelsin, Bir ilave bizde yapalım belki işinize yarar, bir ara sadettin polat arkadaşımız combobox u DBLookupComboBox gibi kullanabilme gibi bir ip ucu vermişti. Ondan esinlenerek bu ipucunu burada dahada geliştirerek örneklemeye çalışalım acizane olarak.
access le veri.mdb veritabanımız olduğunu içinde de grupve sozcukler adında iki tablemiz olduğunu varsayalım.
Formumuzun onshow olayına

Kod: Tümünü seç

procedure TForm1.FormShow(Sender: TObject);
var
j:integer;
begin
ADOQuery1.Open;
 datamodule1.ADOQuery1.Close;
datamodule1.ADOQuery1.SQL.Clear;
datamodule1.ADOQuery1.SQL.Add('Select * from grup');
datamodule1.ADOQuery1.Open;
if not datamodule1.ADOQuery1.IsEmpty then
begin
while not datamodule1.ADOQuery1.Eof do
begin
j:=datamodule1.ADOQuery1.FieldByName('id').AsInteger;
ComboBox1.Items.AddObject(dm.q.FieldByName('gadi').AsString,TObject(j));
datamodule1.ADOQuery1.Next;
end;
datamodule1.ADOQuery1.Close;
     end;
end;

Şimdide ComboBox1 e gelelim ve oradan seçilen formdaki DBGRid içerisinde listelensin.

Kod: Tümünü seç

procedure TForm1.ComboBox1Change(Sender: TObject);
var
deger:integer;
begin
 try
deger:=Integer(ComboBox1.items.Objects[ComboBox1.ItemIndex]);
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from sozcukler');
ADOQuery1.SQL.Add('where gid=:xgid');// buradaki gid(sozcukler tablesinde grup table için oluşturduğumuz ilişki, yani sozcukler tablesinde kayıt yapılırken grup id(field) si sozcukler gid(field) ne yazılıyor. grup tablede mesela deyimler dediğimizde sozcukler içerisinde deyim e ait ne kadar sozcuk varsa listelenir.    
ADOQuery1.Parameters.ParamByName('xgid').Value:=deger;
ADOQuery1.Prepared:=True;
ADOQuery1.Open;
if ADOQuery1.IsEmpty then
begin
ShowMessage('Bu KAtegoride Henüz Kayıt Yapılmamış');
Abort;
end;
except
ADOQuery1.Close;
ShowMessage('İstenilen Kayıt Bulunamadı');
end;
end;
Yukarıda da görüldüğü üzere combobox1 içerisinde listelenmesini istediğimiz kelimeler listelenir. Sorgu yaparken de program combobox içerisinde sayısal yani ID yi ele alarak kullanır. Aynı işi isterseniz tek table içinde yapabilirsiniz .

Herkese kolay gelsin....
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

o zaman

Kod: Tümünü seç

FDatamod_CariBasYeni.IBDataSet1.fetchall
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

menderes hocam şimdi size nasıl teşekkür edecem bilemiyorum, verdiğiniz kod çok güzel çok teşekkür ederim.

ALUCARD arkadaşım sizede çok teşekkür ederim menderes hocamın vermiş olduğu koda sizin kodu ekleyince kayıdı bulamıyor. eşleşme sağlanmadığı için. Olsun böylede olsa çok işimi gördü.

Bu kodu ibdataset nesnesine uygulamak mümkünmü acaba :idea:
bir türlü uyarlayamadım ben :(

teşekkürler..
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba..

Yapman gereken sadece kodu IBdatasete uyarlamak...Diğer kodlar aynı zaten...

Kod: Tümünü seç

ADOQuery1.SQL.Clear;  =>  IBdataset.SelectSQL.Clear;
------------
ADOQuery1.SQL.Add();     =>  IBdataset.SelectSQL.Add();
------------
ADOQuery1.Parameters.ParamByName('xgid').Value:=deger; 
=>
IBdataset.ParamByName('xgid').Value:=deger; 
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

şu satırı uyarlayamadım

Kod: Tümünü seç

DM1_Cari.IBDataSet1.Prepared:=True;
prepared komutu ne işe yarıyor onuda çözemedim.

teşekkürler..
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Selamlar.
Prepare ve Prepared işlev olarak farklı şeyler..Prepare sorguyu tabloyu open etmeden çalıştırıp denemenizi sağlar.Prepared ise boolean tipindedir ve Prepare metodunu kullanıp kullanmayacığınızı belirlemenizi sağlar.

Ek olarak bu tür işlemler için Info Power paketinde DBLookUpCombobox adında bir bileşen var, istediğiniz işlemleri fazlasıyla yapabilmenize olanak verecektir.

Kolay gele.
menderes

Mesaj gönderen menderes »

kusura bakmayın orada prepare yi açıklamalıydım aslında kullanım açısından farklı olan bir o var zaten.Sağolsun bLue aLonE arkadaşımız da açıklamış gerçi.
ADOQuery kullanırken prepared:=True;
-> BDE ve IBQuery gibi bileşenlerde kullanırken sadece prepare IBQuery1.Prepare; gibi bu düzenle, sırala anlamında işleme verim katar. En azından ben öyle kullanıyorum.
Kolay gelsin.....Forum da da ararsanız bir çok örnek bulabilirisiniz.
Kullanıcı avatarı
pcchat
Üye
Mesajlar: 11
Kayıt: 12 Eki 2005 11:24

Mesaj gönderen pcchat »

Slm arkadaşlar moderatörümüz bu başlığa yönlendirdi buraya yazayım
table1 in 1. sütunu yani Tc_kimlik_no 'ya girilen kimlik numaralarını dbcombobox1 de görüntülemek istiyorum items özelliğe yazacam ama ****** olan yere ne gelecek bilmiyorum lütfen yardım yarın hoca projeyi kontrol edecek

procedure Todeme.FormCreate(Sender: TObject);
var
a:integer;
begin
combobox1.items.clear;
table1.first;
for a:=0 to table1.recordcount do
begin
combobox1.items.add(table1.**********);
end;


şimdiden teşekkürler
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

hocam kullandığın veritabanı ne bilmiyorum ama

sorunun cevabı da

Kod: Tümünü seç

procedure Todeme.FormCreate(Sender: TObject); 
var 
a:integer; 
begin 
combobox1.items.clear; 
table1.first; 
for a:=0 to table1.recordcount do 
begin 
combobox1.items.add(table1Tc_kimlik_no.asstring); 
end;
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba..

Hata 1 :

Kod: Tümünü seç

for a:=0 to table1.recordcount do 
demişsiniz.. Bu durumda döngü, kayıt sayısından bir fazla kere dönecektir.

Hata 2 : Döngü içerisinde NEXT ile bir sonraki kayda geçmediğiniz için hep ilk ve aynı kayıttaki TCKimlik numarasından, kayıt sayısı +1 tane göreceksin.

Şöyle olması lazımdı...

Kod: Tümünü seç

procedure Todeme.FormCreate(Sender: TObject); 
begin 
  combobox1.items.clear; 
  table1.first; 
  While NOT Table1.EOF do
  begin
    combobox1.items.add( table1.FieldByName('Tc_kimlik_no').asstring ); 
    Table1.Next;
  end;
end;
Resim
Resim ....Resim
Kullanıcı avatarı
pcchat
Üye
Mesajlar: 11
Kayıt: 12 Eki 2005 11:24

Mesaj gönderen pcchat »

hocam çok tşk ederim verdiğiniz kod sayesinde yapabildim
Cevapla