DBLookupComboBox da Arama yapmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
habikus
Üye
Mesajlar: 69
Kayıt: 14 Eyl 2011 04:23

DBLookupComboBox da Arama yapmak

Mesaj gönderen habikus »

Merhabalar,
Fatura Programında Dbgrid üzerinde Fatura maddelerinin StokaAdı alanını DBLookupComboBox1 kullanarak Stok Kartı dosyasından çekiyorum. Fakat DBLookupComboBox1 readonly gibi çalışıyor. Yani metin kutusu kısmına yazı yazarak yazdığım karakter sayısı kadar olan alanların gelmesini istiyorum. Yani ENGİNAR arayacaksam, E harfine basınca ELMA, N harfine basınca NAR geliyor.
Bu işlemi cxGridde otomatik yapıyordum ama ben istiyorum ki Delphinin standart compenentleri ile yapmak. Varmıdır acaba çözümü.
İyi geceler.
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: DBLookupComboBox da Arama yapmak

Mesaj gönderen ertank »

Merhaba,

Bildiğim kadarıyla Delphi standart bileşenleri ile bunu yapmak mümkün değil. Ancak, alternatif bir yönetm olarak;
- Edit alanı
- Yanında bir buton
- Buton tıklandığı zaman filtrelenmiş kayıtları gösteren bir form

şeklinde istediğinizi elde etmeniz mümkün olabilir.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: DBLookupComboBox da Arama yapmak

Mesaj gönderen Lord_Ares »

Merhaba, zamanında combobox içerisinde yazmaya başladığım herhangi bir kelimeyi veritabanının belli bir alanında arama yapamak için kullandığım bir kodu paylaşmak isterim. Aşağıdaki kodun çalış hali ekli dosyada. http://s3.dosya.tc/server11/tfljfu/COMB ... K.rar.html
İşinizi görür mü bilmiyorum denersiniz..

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    ComboBox1: TComboBox;
    DBGrid1: TDBGrid;
    Table1: TTable;
    DataSource1: TDataSource;
    Table1Kodu: TAutoIncField;
    Table1Ozelkod1: TStringField;
    Button1: TButton;
    Button2: TButton;
    function EXEKLASOR: string;
 procedure COMBO_ARA(DATA, ALAN, ARANAN: STRING; BULUNACAK_ALANLAR: array of STRING; DOLDURULACAK_NESNELER: array of TObject);
 procedure COMBO_DOLDUR(DATA, ALAN, SECILEN_KAYIT: STRING; ISLEM_GOREN_COMBO: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function TForm1.EXEKLASOR: string;
begin
  Result := ExtractFilePath(Application.ExeName);
  if Result[Length(Result)] <> '\' then
   Result := Result + '\';
end;




 procedure TForm1.COMBO_DOLDUR(DATA, ALAN, SECILEN_KAYIT:STRING; ISLEM_GOREN_COMBO:TObject);
VAR
X:INTEGER;
Sorgu:TQuery;
begin
  Sorgu:=TQuery.Create(Self);
Sorgu.DatabaseName:=Form1.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 TForm1.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 //1NCİ İF

Sorgu:=TQuery.Create(Self);
Sorgu.DatabaseName:=EXEKLASOR+'DATA';

        WITH SORGU DO BEGIN //WHİTH
        SQL.Clear;
SEL:='Select ';
FOR X:=0 TO LENGTH(BULUNACAK_ALANLAR)-1 DO BEGIN //1NCİ FOR
                                           SEL:=SEL + BULUNACAK_ALANLAR[X];
                                           IF X< LENGTH(BULUNACAK_ALANLAR)-1 THEN SEL :=SEL + ',';
                                           END; ///1NCİ FOR ENDİ

        SQL.Add(SEL+' FROM '+DATA);
        SQL.Add('Where '+ALAN+' = '+QuotedStr(ARANAN));
        OPEN;
        FieldDefs.Update;
                        END;//WHİTE ENDİ
 IF ARANAN = Table1Ozelkod1.AsString THEN BEGIN   /////BURADA EĞER DATADA ARANAN VARSA DOLDUR DİYORUM YOKSA KALDI YERDEN DEVAM

FOR X:=0 TO LENGTH(BULUNACAK_ALANLAR)-1 DO BEGIN //İKİNCİ FOR

  IF DOLDURULACAK_NESNELER[X].ClassName='TComboBox' then begin ///IKINCI IF
  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; ///IKINCI IF ENDİ
 END; ///IKINCI FOR ENDİ
 END;

Sorgu.Close;
Sorgu.Free;
 END;  //1NCİ İF ENDİ
END; //ANA END;

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Table1.Locate('Ozelkod1',Form1.ComboBox1.Text,[loCaseInsensitive]);
if Form1.Table1Ozelkod1.AsString<>Form1.ComboBox1.Text then begin
Table1.Append;
Table1Ozelkod1.AsString:=ComboBox1.Text;
Table1.Refresh;

                                                             end else ShowMessage('bu kayıt daha önce girilmiş');


end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
COMBO_ARA('ornek','Ozelkod1',ComboBox1.Text,['Ozelkod1'],[ComboBox1]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.DatabaseName:=EXEKLASOR+'DATA';
Table1.Active:=TRUE;
COMBO_DOLDUR('ornek','Ozelkod1','',Form1.ComboBox1);
end;

end.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: DBLookupComboBox da Arama yapmak

Mesaj gönderen adelphiforumz »

Bildiğim kadarı ile bunun için özel bişey yapmanıza gerek yok
tek yapmanız gereken combobox içerisine gelen veriyi sql cümlesinde order by ile getirmek
ve combobox üzerine tıkladıktan sonra 1 saniyeden daha kısa aralıklarda yeni bir harfe basarak aradığın şeyi yazmak
eğer 1 saniyeden fazla beklersen sonrasındaki ilk bastığın karaktere göre yeniden arama başlar
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Cevapla