Sevgili arkadaslar;
Su an yeni bir proje hazirlamaktayim ve dogal olarak bir onceki projemde edindigim deneyimlerimi bu projemde hizli bir sekilde uygulama sansim oluyor. Haziladigim yeni projemde ozelkod adli bir alan mevcuttur.
Yapmak istedigim sey tam olarak su: Bu alani temsilen bir DBComboBox kullanmak istiyorum ve bu bilesene yazmaya basladigim andan itibaren hangi harfe basmissam o'nunla ilgili tum kodlarin bu bilesene eklenmesini ve bu bilesenin de otomatik olarak acilmasini istiyorum.
Bu konuda birkac denemem oldu, kismen de basardim; ama istedigim gibi olmadi. Bundan aylar once baska bir konu icin arastirma yaptigimda boylesi bir konuya ve bu konuda yazilmis bir koda denk gelmistim, simdi uzun uzun arastirma yapmama ragmen bulamadim.
Sizden dilegim, bu konuda bana yardimci olmaniz ya da ilgili ornekleri benimle paylasmaniz seklindedir. Yardimci olacak arkadaslara simdiden tesekkurler...
DBComboBox ile Ilgili Bir Soru
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: DBComboBox ile Ilgili Bir Soru
bahsettiğiniz özellik MRU olarak geçmektedir, bu şekilde arayınca örnek bulabilirsiniz.
Re: DBComboBox ile Ilgili Bir Soru
dbcombo ile deilde normal combobox ile şöyle bişey kullanmıştım. formuma birtane combobox bileşeni koyup içerisine veritabınındaki bilgileri çekiyor ve combobox içinde herhangi bir harfe bastığımda kayıtları filitreleyerek comboboxta gösteriyordu.
kodlar şöyleydi.
Kullanımı şöyleydi
combobox hangi formda ise mesela Form1 de, o formun creatine şunu yazıyorduk.
COMBO_DOLDUR('musteridata','musterikodu','',Form1.ComboBox1);
comboboxın onchange kısmına şunu yazıyorduk.
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
COMBO_ARA('musteridata','musterikodu',ComboBox1.Text,['musteriadı'],[ComboBox1]);
end;
kolay gelsin
kodlar şöyleydi.
Kod: Tümünü seç
procedure TDATA.COMBO_DOLDUR(DATA, ALAN, SECILEN_KAYIT:STRING; ISLEM_GOREN_COMBO:TObject);
VAR
X:INTEGER;
Sorgu:TQuery;
begin
Sorgu:=TQuery.Create(Self);
Sorgu.DatabaseName:=ANA.EXEKLASOR+'DATA';
WITH SORGU DO BEGIN
SQL.Clear;
SQL.Add('Select '+ALAN+' FROM '+DATA);
SQL.Add('ORDER BY '+ALAN);
OPEN;
FieldDefs.Update;
END;
(ISLEM_GOREN_COMBO AS TComboBox).Items.Clear;
FOR X:=0 TO Sorgu.RecordCount-1 DO BEGIN
(ISLEM_GOREN_COMBO AS TComboBox).Items.Add(Sorgu.FieldByName(ALAN).AsString);
IF SECILEN_KAYIT=Sorgu.FieldByName(ALAN).AsString THEN (ISLEM_GOREN_COMBO AS TComboBox).ItemIndex:=X;
Sorgu.Next;
END;
Sorgu.Close;
Sorgu.Free;
end;
procedure TDATA.COMBO_ARA(DATA, ALAN, ARANAN:STRING; BULUNACAK_ALANLAR :ARRAY OF STRING ; DOLDURULACAK_NESNELER :ARRAY OF TObject);
VAR
X:INTEGER;
Sorgu:TQuery;
SEL:STRING;
begin
IF LENGTH(BULUNACAK_ALANLAR)>0 THEN BEGIN
Sorgu:=TQuery.Create(Self);
Sorgu.DatabaseName:=ANA.EXEKLASOR+'DATA';
WITH SORGU DO BEGIN
SQL.Clear;
SEL:='Select ';
FOR X:=0 TO LENGTH(BULUNACAK_ALANLAR)-1 DO BEGIN
SEL:=SEL + BULUNACAK_ALANLAR[X];
IF X< LENGTH(BULUNACAK_ALANLAR)-1 THEN SEL :=SEL + ',';
END;
SQL.Add(SEL+' FROM '+DATA);
SQL.Add('Where '+ALAN+' = '+QuotedStr(ARANAN));
OPEN;
FieldDefs.Update;
END;
FOR X:=0 TO LENGTH(BULUNACAK_ALANLAR)-1 DO BEGIN
IF DOLDURULACAK_NESNELER[X].ClassName='TEdit' then (DOLDURULACAK_NESNELER[X] as TEdit).Text:=Sorgu.FieldByName(BULUNACAK_ALANLAR[x]).AsString;
IF DOLDURULACAK_NESNELER[X].ClassName='TComboBox' then begin
if Sorgu.FieldByName(BULUNACAK_ALANLAR[x]).DataType=ftString then (DOLDURULACAK_NESNELER[X] as TComboBox).Text:=Sorgu.FieldByName(BULUNACAK_ALANLAR[x]).AsString;
if Sorgu.FieldByName(BULUNACAK_ALANLAR[x]).DataType=ftInteger then (DOLDURULACAK_NESNELER[X] as TComboBox).ItemIndex:=Sorgu.FieldByName(BULUNACAK_ALANLAR[x]).AsInteger;
end;
END;
Sorgu.Close;
Sorgu.Free;
END;
end;
Kullanımı şöyleydi
combobox hangi formda ise mesela Form1 de, o formun creatine şunu yazıyorduk.
COMBO_DOLDUR('musteridata','musterikodu','',Form1.ComboBox1);
comboboxın onchange kısmına şunu yazıyorduk.
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
COMBO_ARA('musteridata','musterikodu',ComboBox1.Text,['musteriadı'],[ComboBox1]);
end;
kolay gelsin
-
- Üye
- Mesajlar: 29
- Kayıt: 12 Mar 2008 03:29
Re: DBComboBox ile Ilgili Bir Soru
Lord_Ares ,
Verdiginiz kodlari deneme sansim oldu; fakat soyle bir problemle karsilastim. Tanimlanmis olan alanlarin disinda tanimlanmamis bir veri girmeye calistigimda ComboBox bileseni buna karsilik vermedigi gibi, deger girmeme de izin vermiyor.
Oysa niyetim bilesenin var olan kodlari listelemesi, olmayan kodu da yazmaya izin vermesi ve benim de bunu tablolarima yazmama firsat vermesiydi.
Verdiginiz kodu su sekilde kullandim :
mkysoft ,
MRU terimini ilk defa duydum ve bu konuda biraz arastirma yapmam yerinde olacak sanirim.
Her ikinize de ilgilendiginiz icin tesekkur ederim...
Verdiginiz kodlari deneme sansim oldu; fakat soyle bir problemle karsilastim. Tanimlanmis olan alanlarin disinda tanimlanmamis bir veri girmeye calistigimda ComboBox bileseni buna karsilik vermedigi gibi, deger girmeme de izin vermiyor.
Oysa niyetim bilesenin var olan kodlari listelemesi, olmayan kodu da yazmaya izin vermesi ve benim de bunu tablolarima yazmama firsat vermesiydi.
Verdiginiz kodu su sekilde kullandim :
procedure TForm1.FormCreate(Sender: TObject);
begin
COMBO_DOLDUR('musteri','ozelkod1','',Form1.ComboBox1);
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
COMBO_ARA('musteri','ozelkod1',ComboBox1.Text,['ozelkod1'],[ComboBox1]);
end;
mkysoft ,
MRU terimini ilk defa duydum ve bu konuda biraz arastirma yapmam yerinde olacak sanirim.
Her ikinize de ilgilendiginiz icin tesekkur ederim...
Re: DBComboBox ile Ilgili Bir Soru
yanlış anladıysam kusura bakma, sanırım tanımlanmamış alan derken, veri tabanında olmayan bir alan mı yoksa comboara da alanı yazmadığın için mi . eğer comboboxta bir çok alan yazmak istersen aralarına virgul koyarak çoğaltabilirsin.
COMBO_ARA('musteri','musteriler2','ozelkod1','ozelkod2','ozelkod3',ComboBox1.Text,['ozelkod1'],[ComboBox1]);
yukarıdaki şekilde aralarına virgul atarak bir çok data ve alan seçebilirsin, hatta doldurulcak nesnede seçebilirsin
ekleme işi ise şöyle olabilir
formunda bir adet edit koyup combobox ile doldurulan bilgi aynı zamanda editede yazdırılabilir.Kayıt işleminde kolaylık olur. Dersen ki ben combobox kullanacağım, ozaman combo_Ara kısa bir if değer var sagöster yoksa table bir append diyerek kısa bir döngü ile osunu çözebileceğini düşunuyorum .
kolay gelsin
COMBO_ARA('musteri','musteriler2','ozelkod1','ozelkod2','ozelkod3',ComboBox1.Text,['ozelkod1'],[ComboBox1]);
yukarıdaki şekilde aralarına virgul atarak bir çok data ve alan seçebilirsin, hatta doldurulcak nesnede seçebilirsin
ekleme işi ise şöyle olabilir
formunda bir adet edit koyup combobox ile doldurulan bilgi aynı zamanda editede yazdırılabilir.Kayıt işleminde kolaylık olur. Dersen ki ben combobox kullanacağım, ozaman combo_Ara kısa bir if değer var sagöster yoksa table bir append diyerek kısa bir döngü ile osunu çözebileceğini düşunuyorum .
kolay gelsin
Re: DBComboBox ile Ilgili Bir Soru
Merhaba sana ufak bir örnek yaptım. Sanırım dediğin gibi oldu bir incelersen sevinirim. eksik varsa söylersen bildiğim kadarıyla yardımcı olurum
Örneği denerken şunu unutmuşum,comboboxa bişeyler yazdığın backspace tuşu ile tek bir harf sildiğinde tekrar arama yapmasını sağlamak.
onuda şöyle yapcaksın comboboxın onchance kısmında eğer basılan tuş backspace ise tekrar ara ve doldur demelisin
kolay gelsin
Örneği denerken şunu unutmuşum,comboboxa bişeyler yazdığın backspace tuşu ile tek bir harf sildiğinde tekrar arama yapmasını sağlamak.
onuda şöyle yapcaksın comboboxın onchance kısmında eğer basılan tuş backspace ise tekrar ara ve doldur demelisin
kolay gelsin
- Dosya ekleri
-
- ORNEK.rar
- ornek
- (11.72 KiB) 112 kere indirildi
-
- Üye
- Mesajlar: 29
- Kayıt: 12 Mar 2008 03:29
Re: DBComboBox ile Ilgili Bir Soru
Tesekkur ederim, guzel calisma olmus ve ellerinize saglik. Ben de bu konuda yaptigim arastirmalar neticesinde tam istedigim isi yapan bir koda denk geldim ve yapmak istedigim seyle butunlestirdim ve oldu.Lord_Ares yazdı:Merhaba sana ufak bir örnek yaptım. Sanırım dediğin gibi oldu bir incelersen sevinirim. eksik varsa söylersen bildiğim kadarıyla yardımcı olurum
Örneği denerken şunu unutmuşum,comboboxa bişeyler yazdığın backspace tuşu ile tek bir harf sildiğinde tekrar arama yapmasını sağlamak.
onuda şöyle yapcaksın comboboxın onchance kısmında eğer basılan tuş backspace ise tekrar ara ve doldur demelisin
kolay gelsin
Kodlar aynen soyle (Umarim birilerinin isine yarar) :
Var
LastKey : Word;
procedure TMusteriForm.OzelKod1ComboBoxKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
LastKey := Key;
end;
procedure TMusteriForm.OzelKod1ComboBoxChange(Sender: TObject);
var
Aranan: string;
index: Integer;
begin
Aranan := (Sender as TCombobox).Text;
if LastKey = $08 then
begin
LastKey := 0;
Exit;
end;
LastKey := 0;
Modul1.kayit_varmi.Active := False;
Modul1.kayit_varmi.SQL.Clear;
Modul1.kayit_varmi.Parameters.AddParameter.Name := 'deger';
Modul1.kayit_varmi.SQL.Add('select Distinct ozelkod1, ozelkod2 from musteri where');
if (Sender As TComboBox).Name = 'OzelKod1ComboBox' then
Modul1.kayit_varmi.SQL.Add('ozelkod1 like :deger') else
Modul1.kayit_varmi.SQL.Add('ozelkod2 like :deger');
Modul1.kayit_varmi.Parameters.ParamByName('deger').Value := (Sender as TcomboBox).Text+'%';
Modul1.kayit_varmi.Active := True;
if Modul1.kayit_varmi.RecordCount > 0 then
begin
(Sender as TComboBox).Items.Clear;
Modul1.kayit_varmi.First;
while not Modul1.kayit_varmi.Eof do
begin
if (Sender As TComboBox).Name = 'OzelKod1ComboBox' then
(Sender As TComboBox).Items.Add(Modul1.kayit_varmi.Fields[0].Value) else
(Sender As TComboBox).Items.Add(Modul1.kayit_varmi.Fields[1].Value);
Modul1.kayit_varmi.Next;
end;
end;
Index := (Sender as TCombobox).Perform(CB_FINDSTRING, -1, Longint(PChar(Aranan)));
if Index > CB_ERR then
begin
(Sender as TCombobox).ItemIndex := Index;
(Sender as TCombobox).SelStart := Length(Aranan);
(Sender as TCombobox).SelLength := (Length((Sender as TCombobox).Text) - Length(Aranan));
end;
end;