Dbgridte harflerin durumuna göre göstermek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Dbgridte harflerin durumuna göre göstermek

Mesaj gönderen r_korkmaz44 »

Arkadaşlar formda araştırdım ama tam manasıyla problemimi çözen bir sayfaya rastgelemedim. Sorunum şu:

Ben bir program yapmaya çalışıyorum. Veritabanını dbase for windows la yapıyorum şimdilik. Ben sırano ya göre silmek istediğim zaman dbgridde o seçenek kalacak diğerleri gözükmeyecek. Yalnız şu şartla: Örneğin edit'e yazdığım Numaranın ilk harfini yazınca olanlar gözükecek diğerleri gözükmeyecek. İkinci harfede basınca da o şartı sağlayanlar gözükecek.Yani süzme işlemi yapacak. Birde bu isim olsa nasıl olurdu? Bu konularda yardımcı olursanız sevinirim.

Örnek: "H" harfine basınca "H" ile başlayanlar dbgridde gözükecek
"Ha" harfine basınca "Ha" ile başlayanlar dbgridde gözükecek, diğerleri gözükmeyecek.
Bu eğer SQL lik bir iş ise nasıl yapacağımı detaylı anlatırsanız sevinirim. İnşaallah anlatabilmişimdir. Şimdiden teşekkür eder çalışmalarınızda başarılar dilerim..... :oops:
En son r_korkmaz44 tarafından 20 Oca 2006 10:51 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Forum kurallarını okumayla başlayabilirsiniz.. Soru başlığını büyük harflerle yazmışsınız :?

Sorunuzdaki olayı Developer Express in Quantum Grid (dxDBGrid veya cxGrid) i ile kolayca yapmak mümkün fakat siz de DBGrid in OnKeyPress ine yazacağınız bir kod ile basılan tuşları genel/global bir değişkende tutarak tablonu filtered özelliğini ve OnFilterRecord event-yordamını kullanarak Tabloyu filitreleyebilirsiniz.. Yada Query ise bu değişkeni kullanarak where kısmını yazabilir her seferinde kapatıp açarsanız istediğiniz sonucu verir.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
ozkanagiral
Üye
Mesajlar: 79
Kayıt: 17 Oca 2004 06:23
Konum: istanbul
İletişim:

Mesaj gönderen ozkanagiral »

bu kod programımda hali hazırda çalışan bir kod dur kendine göre ayarladığın taktirde işini görür aslında aramayı kullansaydın 'like' için
= Arama sonucunda 304 adet mesaj bulundu = başlıklı sayfa gelicekti önüne :)
ben yinede like kullanımını buraya alıntı olarak yapıştırayım, iyi çalışmalar.

Kod: Tümünü seç

procedure TFrmMisafirGiris.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  DMODOtel1.IBDS_KISI.Close;
  DMODOtel1.IBDS_KISI.SelectSQL.Clear;
  DMODOtel1.IBDS_KISI.SelectSQL.Add('select * from kisi where kisi.Adi like ');
  DMODOtel1.IBDS_KISI.SelectSQL.Add('''%'+Trim(Edit1.Text)+'%''');

//bu satırı testlerin bitince kaldır
  ShowMessage(DMODOtel1.IBDS_KISI.SelectSQL.Text);
//
  DMODOtel1.IBDS_KISI.Prepare;
  DMODOtel1.IBDS_KISI.Open;
  SpBtnAramaKipindenCik.Visible:=True;
  if DMODOtel1.IBDS_KISI.RecordCount = 0 Then
   Begin
     LblMsjGoster.Color:=clRed;
     LblMsjGoster.Font.Color:=clYellow;
     LblMsjGoster.Caption:= 'Aradığınız '+EditAdiAra.Text+' isminde kayıt. Bulunamadı...'
   End
   Else
   Begin
     LblMsjGoster.Color:=clGray;
     LblMsjGoster.Font.Color:=clWhite;
     LblMsjGoster.Caption:= 'Aradığınız '+EditAdiAra.Text+' isminde '+IntToStr(DMODOtel1.IBDS_KISI.RecordCount)+' Adet kayıt. Bulundu...';
   End;
end;
LIKE
Determines whether or not a given character string matches a specified pattern. A pattern can include regular characters and wildcard characters. During pattern matching, regular characters must exactly match the characters specified in the character string. Wildcard characters, however, can be matched with arbitrary fragments of the character string. Using wildcard characters makes the LIKE operator more flexible than using the = and != string comparison operators. If any of the arguments are not of character string data type, Microsoft® SQL Server™ converts them to character string data type, if possible.

Syntax
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

Arguments
match_expression

Is any valid SQL Server expression of character string data type.

pattern

Is the pattern to search for in match_expression, and can include these valid SQL Server wildcard characters.

Wildcard character Description Example
% Any string of zero or more characters. WHERE title LIKE '%computer%' finds all book titles with the word 'computer' anywhere in the book title.
_ (underscore) Any single character. WHERE au_fname LIKE '_ean' finds all four-letter first names that end with ean (Dean, Sean, and so on).
[ ] Any single character within the specified range ([a-f]) or set ([abcdef]). WHERE au_lname LIKE '[C-P]arsen' finds author last names ending with arsen and beginning with any single character between C and P, for example Carsen, Larsen, Karsen, and so on.
[^] Any single character not within the specified range ([^a-f]) or set ([^abcdef]). WHERE au_lname LIKE 'de[^l]%' all author last names beginning with de and where the following letter is not l.

escape_character

Is any valid SQL Server expression of any of the data types of the character string data type category. escape_character has no default and must consist of only one character.

Result Types
Boolean

Result Value
LIKE returns TRUE if the match_expression matches the specified pattern.
Kullanıcı avatarı
ozkanagiral
Üye
Mesajlar: 79
Kayıt: 17 Oca 2004 06:23
Konum: istanbul
İletişim:

Mesaj gönderen ozkanagiral »

Üstadım ben bu yazıyı yazarken baya bir vakit harcamışım galiba hiç cevap yoktu gönderdikten sonra yazınızı görünce şaşırdım :))
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

ozkanagiral yazdı:Üstadım ben bu yazıyı yazarken baya bir vakit harcamışım galiba hiç cevap yoktu gönderdikten sonra yazınızı görünce şaşırdım :))
Evet aynen öyle olmuş, bir soruya verilen emek 50 dk. Artık forum sakinlerimiz emeğin kıymetini daha iyi anlayabilirler :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Dm vd sql

Mesaj gönderen r_korkmaz44 »

Selamunaleykum. Üstat yardımların için ve benim için harcadığın zaman için gerçekten minnettarım. Çok sağol. Ama ben delphi konusunda gerçekten yeni sayılabilirim. SQL bilgim ise zayıf. Öğrenmek istediğim ise şu: DM nedir?nasıl ve neye göre kullanılır?

DMODOtel1.IBDS_KISI.Close; satırını açıklarsan sevinirim. DMODOtel1 ne oluyor. IBDS_KISI veritanındaki sütun adımı mıdır?

Benim tablonun adı 1.dbf ve alias ismi ismi pan şeklinde. Ve arattırma yapacağım ise okulno olacak. Şimdi ben tablo adı ve arattıracağım sütun adına göre ne yazmalıyım.

Üstad belki diyebilirsin:"Kardeş kodu yazdık sen bu nedir diyorsun?" diyebilirsin. Ama ben gerçekten bu işi öğrenmek istiyorum. Önceden ufak tefek takip programları yaptım. Ama Allah'ın izniyle bu işi öğrenmeye niyetliyim. Siz abilerim ve üstadlarım da biraz desteklerlerse bu iş olacak. O yüzden fazlaca bana kızmadan cevap verirsen sevinirim. , :oops:

Gerçekten minnettarım. Haklarınızı helal edin. Allah'ıma emanet olun...
Kullanıcı avatarı
ozkanagiral
Üye
Mesajlar: 79
Kayıt: 17 Oca 2004 06:23
Konum: istanbul
İletişim:

Re: Dm vd sql

Mesaj gönderen ozkanagiral »

r_korkmaz44 yazdı: Üstad belki diyebilirsin:"Kardeş kodu yazdık sen bu nedir diyorsun?" diyebilirsin. Ama ben gerçekten bu işi öğrenmek istiyorum. Önceden ufak tefek takip programları yaptım. Ama Allah'ın izniyle bu işi öğrenmeye niyetliyim. Siz abilerim ve üstadlarım da biraz desteklerlerse bu iş olacak. O yüzden fazlaca bana kızmadan cevap verirsen sevinirim. , :oops:

Gerçekten minnettarım. Haklarınızı helal edin. Allah'ıma emanet olun...
Estağfurullah, estağfurullah, öyle kızma filan yok amacımız burada birbirimize destek olmak ve kendi adıma sonuna kadar helali hoş olsun bu arada forumda online olduğunu görüyorum hemen cevap vereyim dedim gerekli açıklamayı yapacağım kod üzerinde düzenleyip.
Bayramınız kutlu olsun ve hayırlara vesile olsun inşallah.
Kullanıcı avatarı
ozkanagiral
Üye
Mesajlar: 79
Kayıt: 17 Oca 2004 06:23
Konum: istanbul
İletişim:

Mesaj gönderen ozkanagiral »

// DMODOtel1 benim bu module verdiğim isim, istediğin ismi verebilirsin
//type TDMODOtel1 = class(TDataModule) unit i Delphi menüden File/New/Data Module Komutunu verirsen yeni bir data modülü oluşturacaktır.
//IBDS_KISI ise bileşen paletinde interbase sekmesinde yer alan IBDataset bileşeni
//IBDS_ kısmında bileşenin kısaltması _ Alt çizgiden sonra tablonun adı yer alıyor yine burada istediğin ismi verebilirsin
//Yani bu sordukların ayrılmış(Delphi Komutları) değil
//IBDS_KISI sutunun adı değil tablonun adı
//ve .close; ile tabloyu kapatıyoruz burada
procedure TFrmMisafirGiris.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
DMODOtel1.IBDS_KISI.Close;
DMODOtel1.IBDS_KISI.SelectSQL.Clear;
DMODOtel1.IBDS_KISI.SelectSQL.Add('select * from kisi where kisi.Adi like ');
DMODOtel1.IBDS_KISI.SelectSQL.Add('''%'+Trim(Edit1.Text)+'%''');

//bu satırı testlerin bitince kaldır
ShowMessage(DMODOtel1.IBDS_KISI.SelectSQL.Text);
//
DMODOtel1.IBDS_KISI.Prepare;
DMODOtel1.IBDS_KISI.Open;
SpBtnAramaKipindenCik.Visible:=True;
if DMODOtel1.IBDS_KISI.RecordCount = 0 Then
Begin
LblMsjGoster.Color:=clRed;
LblMsjGoster.Font.Color:=clYellow;
LblMsjGoster.Caption:= 'Aradığınız '+EditAdiAra.Text+' isminde kayıt. Bulunamadı...'
End
Else
Begin
LblMsjGoster.Color:=clGray;
LblMsjGoster.Font.Color:=clWhite;
LblMsjGoster.Caption:= 'Aradığınız '+EditAdiAra.Text+' isminde '+IntToStr(DMODOtel1.IBDS_KISI.RecordCount)+' Adet kayıt. Bulundu...';
End;
end;
Kullanıcı avatarı
ozkanagiral
Üye
Mesajlar: 79
Kayıt: 17 Oca 2004 06:23
Konum: istanbul
İletişim:

Re: Dm vd sql

Mesaj gönderen ozkanagiral »

r_korkmaz44 yazdı: Benim tablonun adı 1.dbf ve alias ismi ismi pan şeklinde. Ve arattırma yapacağım ise okulno olacak. Şimdi ben tablo adı ve arattıracağım sütun adına göre ne yazmalıyım.
Cevaplarken bu satırı atlamışım.
DMODOtel1.IBDS_KISI.SelectSQL.Add('select * from kisi where kisi.Adi like '
Satırında
DMODOtel1.IBDS_KISI.SelectSQL.Add('select * from 1 where 1.okulno like '
olarak değişiklik yaparsan kendi kodlarına uyarlanmış olur.
aslında kendi kod satırını gönderirsen sanırım daha anlaşılır olacak orada düzenleme yaparız, hangi bileşenleri kullanıyorsun vs. ama bu şekilde de çözüme gidebilirsin.
İyi Çalışmalar.
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Mesaj gönderen r_korkmaz44 »

Ağabey aşağıdaki gibi kodları sana gönderiyorum. Abi şu data module işini anlamadım. Dediğin gibi Data module oluşturdum. İçerisine Table1 ve Datasource1 i dahil ederek gerekli ayarı yaptım. Şu senin bahsettiğin IBDataSet i formun olduğu sayfayamı dahil edecem yoksa DM nin içerisine mi dahil edecem. Dm nin içerisine dahil ettiğimde hata veriyor. Senden istediğim aşağıdaki kodlarla beraber Dm ve IBDS i adım adım benim örneğe göre açıklarsan sevinirim. Neyi nereye, nerede va nasıl kullanacağımı adım adım yazarsan çok minnettar kalırım. Şimdiden teşekkürler.........
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Mesaj gönderen r_korkmaz44 »

Kodları göndermeyi unutmuşum. Aşağıdaki gibi kodlar.



unit Unit4;

interface

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

type
TForm4 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Table1: TTable;
procedure Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form4: TForm4;
var i,k,l,j,m,k1,i2:integer;
implementation

uses Unit10;

{$R *.dfm}

procedure TForm4.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin


DM.IBDS_1.Close;
DM.IBDS_1.SelectSQL.Clear;
DM.IBDS_1.SelectSQL.Add('select * from kisi where 1.okulno like ');
DM.IBDS_1.SelectSQL.Add('''%'+Trim(Edit1.Text)+'%''');

//bu satırı testlerin bitince kaldır
ShowMessage(DM.IBDS_1.SelectSQL.Text);
//
DM.IBDS_1.Prepare;
DM.IBDS_1.Open;
SpBtnAramaKipindenCik.Visible:=True;
if DM.IBDS_1.RecordCount = 0 Then
Begin
LblMsjGoster.Color:=clRed;
LblMsjGoster.Font.Color:=clYellow;
LblMsjGoster.Caption:= 'Aradığınız '+EditAdiAra.Text+' isminde kayıt. Bulunamadı...'
End
Else
Begin
LblMsjGoster.Color:=clGray;
LblMsjGoster.Font.Color:=clWhite;
LblMsjGoster.Caption:= 'Aradığınız '+EditAdiAra.Text+' isminde '+IntToStr(DM.IBDS_1.RecordCount)+' Adet kayıt. Bulundu...';
End;

end;

end.
Kullanıcı avatarı
ozkanagiral
Üye
Mesajlar: 79
Kayıt: 17 Oca 2004 06:23
Konum: istanbul
İletişim:

Mesaj gönderen ozkanagiral »

r_korkmaz44 bu kodların çalışmaması gayet doğal...
Aslında gönderdiğin kodlara bakılırsa hazır kod a odaklanmış gibisin bu noktada sana hazır kod göndermek kötülük yapmak anlamınma gelir. Ben en iyisi anlatayım sen yap ve yine olmazsa onları gönder o kodlar üzerinde tartışalım, sebebine gelince benim örnek teşkil etmesi için yolladığım kodları aynen almışsın ama kendine uyarlamamışsın SQL satırlarında hata var mesela sende olmayan tabloyu yazmışsın ve DM eklemişsin ama ana formunda VT bağlantı bileşenleri var biz en iyisi baştan alalım konuyu...

şimdi baştan alalım.
mevcut projene Datamodul ü Delphi menüden File/New/Data Module Komutu ile ekle sonra bunu Delphi menüden File/Use Unit... Komutu ile açılan pencereden seçerek kullanacağın formlara ekle ve Vt bağlantı öğelerini DM üzerinde oluştur standart bir şekilde VT bağlantılarını yap.
daha sonra aramada kullanıcıdan giriş alacağın edit bileşenini koy ve onkeyup olayına aşağıdaki kodları yaz farklılık olabilir kendi projene göre düzenle tekrar.

Kod: Tümünü seç

procedure TForm4.Edit1KeyUp(Sender: TObject; var Key: Word; 
Shift: TShiftState); 
begin 

//DM Datamodul adı
//IBDS_1 Dataset in adı (bunların gerekli bağlantılarını yaptığını varsayıyorum)
//Dataset Kapatıyoruz
DM.IBDS_1.Close; 
//Datasetin içindeki mevcut SQL kodunu temizliyoruz
DM.IBDS_1.SelectSQL.Clear; 
//SQL komutu içindeki 1 senin dediğin gibi tablo adın
//Dataset içine yeni SQL kodunu yazıyoruz
DM.IBDS_1.SelectSQL.Add('select * from 1 where 1.okulno like '); 
//Dataset içine yeni SQL kodunu yazıyoruz (ekleme Satırı)
DM.IBDS_1.SelectSQL.Add('''%'+Trim(Edit1.Text)+'%'''); 
//Dataseti hazırlıyoruz...
DM.IBDS_1.Prepare; 
//Dataseti Açıyoruz
DM.IBDS_1.Open; 
//Datasette dönen kayıt sayısına bakıyoruz sıfır ise aranan bulunamadı
//Burada VT deki tüm kayıtlar değil SQL ile çağırdığın kayıtlar sayılır
if DM.IBDS_1.RecordCount = 0 Then 
Begin 
LblMsjGoster.Color:=clRed; 
LblMsjGoster.Font.Color:=clYellow; 
LblMsjGoster.Caption:= 'Aradığınız '+Edit1.Text+' isminde kayıt. Bulunamadı...' 
End 
//kayıt varsa bulundu ise kayıt adedini ve aranan kalimeyi yazıp kullanıcıya bilgi veriyoruz
Else 
Begin 
LblMsjGoster.Color:=clGray; 
LblMsjGoster.Font.Color:=clWhite; 
LblMsjGoster.Caption:= 'Aradığınız '+Edit1.Text+' isminde '+IntToStr(DM.IBDS_1.RecordCount)+' Adet kayıt. Bulundu...'; 
End; 

end; 
Sanırım bu hali ile daha anlaşılır oldu ama yine problem olursa düzenlediğin kodları ve yaptığın işlemleride yazarsan nerede bir hata var daha net bulup yardımcı olabiliriz birde minnettarlık gibi ifadelerin beni mahçup ediyor bize tek bir şey dışında hiç bir borcun yok dostum o borcunda benim gibi delphi çıraklarını ve bu forumda birbirinden değerli üstadları bu işte ilerleyip geçmen ve bunu ülkemizin milletimizin yararına kullanman tek borcun bu kardeşim ve sıkılma kendini üzme bilgi canavarı ol ama kimseyide bunun için üzme İnşallah sen muavfak olacaksın. Kendi adıma söylüyorum eğer bir faydam oluyorsa ne mutlu ama bir teşekkürden fazlası beni mahçup ediyor haberin olsun :oops:
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Mesaj gönderen r_korkmaz44 »

Abi birde şu IBDS yi beceremedim. Nasıl olacak. Nasıl ayarını yapmam lazım...
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

sayılarla nasıl olacak?

Mesaj gönderen r_korkmaz44 »

Abilerim sorunu ağağıdaki gibi çözdüm.Bulmuş olduğumu ad'a göre bulduruyorum.Peki bunu okulno'ya göre nasıl yapmalıyım. Yani işin içerisine sayılar girdiği zaman olmuyor. Yani "1" dediğim zaman okul nosu "1" ile başlayan kayıtlar hemen gözüksün. "12" dediğim zaman da "12" ile başlayanları hemen dbgridde görmek istiyorum ve sil dediğimde de silmesi gerekiyor. Table1.FilterOptions :=[focaseinsensitive]; satırında sorun varmı? Şimdiden teşekkürler...



procedure TForm4.BitBtn1Click(Sender: TObject);
var
c:word;
begin
if edit1.text<>'' then begin
c:=messagedlg(('Tabloda Gösterilen Kayıt Silinsin mi? '),mtconfirmation,[mbyes,mbno],0);
if c=mrno then begin
showmessage('Kayıt Silinmedi!');
table1.Next;
end;
if c=mryes then
begin
table1.delete;
showmessage('Kayıt Başarıyla Silindi!');
end;
end;

if (edit1.text='') and (radiobutton1.checked=true) then
showmessage('Silinecek Kaydın Adınızı Girmediniz');
end;


procedure TForm4.Edit1Change(Sender: TObject);
begin
Table1.FilterOptions :=[focaseinsensitive];
if edit1.text='' then

Table1.filtered:= false
else

if RadioButton1.Checked then

begin
Table1.filtered:= true;
Table1.Filter :='[adi]='+#39 +edit1.text+'*'+#39;

end;
end;
end.
Kullanıcı avatarı
r_korkmaz44
Üye
Mesajlar: 63
Kayıt: 11 Ara 2005 01:00

Mesaj gönderen r_korkmaz44 »

Arkadaşlar cevap bekliyorum.Lütfen yardım edin. :(
Cevapla