Bir Editte Birden fazla arama yapmak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Bir Editte Birden fazla arama yapmak
Merhaba Arkadaşlar. Delphi7 Kullanıyorum
Bir editte arama yapacağım zaman 1. kişinin adsoyadını yazıp 2. kişinin adısoyadını 3. kişinin adısoyadını yazıp ...... x kadar kişinin advesoyadlarını yazıp Noktalı virgül (veya bir seperatör, örn Noktalı virgül) kullanarak Noktalı virgül ile ayırdığım kişileri azından Listboxta listelemek istiyorum.
Biraz string parse işi yapılması gerek bir türlü başaramadım.
Bunun için kod örneği varmı
Böyle bir örneği internette aradımsada bulamadım yardımcı olursanız sevinirim.
Daha önce bu tür bir ihtiyaç olmamıştı.
Amacım , ComboboxaÖrneğin ;Ali CAN;Murat KAYA;.... gibi yazdığım zaman NOKTALI VİRGÜL seperatörü ile Noktalı virgül ile belirlediğim kişileri Listboxa alt alta gelecek şekilde Sıralamak.
Bir editte arama yapacağım zaman 1. kişinin adsoyadını yazıp 2. kişinin adısoyadını 3. kişinin adısoyadını yazıp ...... x kadar kişinin advesoyadlarını yazıp Noktalı virgül (veya bir seperatör, örn Noktalı virgül) kullanarak Noktalı virgül ile ayırdığım kişileri azından Listboxta listelemek istiyorum.
Biraz string parse işi yapılması gerek bir türlü başaramadım.
Bunun için kod örneği varmı
Böyle bir örneği internette aradımsada bulamadım yardımcı olursanız sevinirim.
Daha önce bu tür bir ihtiyaç olmamıştı.
Amacım , ComboboxaÖrneğin ;Ali CAN;Murat KAYA;.... gibi yazdığım zaman NOKTALI VİRGÜL seperatörü ile Noktalı virgül ile belirlediğim kişileri Listboxa alt alta gelecek şekilde Sıralamak.
En son Commandx tarafından 28 Şub 2020 04:29 tarihinde düzenlendi, toplamda 4 kere düzenlendi.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Re: Bir Editte Birden fazla arama yapmak
Firebird içinde Stored Procedurde aşağıdaki şekilde kullanıyorum sizinde işinizi görür
ARANAN VARCHAR(1024) şeklinde bir input alıp bunun Replace ile sorgusunu oluşturup kullanıyorum.
SARA variant tanımlı bu arada. ASCII_CHAR (44) virgül oluyor, ASCII_CHAR (59) noktalı virgül oluyor, virgül ile ayrılmış gelirse AND diğeri olursa OR oluyor
ARANAN VARCHAR(1024) şeklinde bir input alıp bunun Replace ile sorgusunu oluşturup kullanıyorum.
SARA variant tanımlı bu arada. ASCII_CHAR (44) virgül oluyor, ASCII_CHAR (59) noktalı virgül oluyor, virgül ile ayrılmış gelirse AND diğeri olursa OR oluyor
Kod: Tümünü seç
SARA = '';
IF (ARANAN<>'')
THEN BEGIN
SARA = ' AND ADI CONTAINING '''||ARANAN;
SARA = Replace(:SARA,ASCII_CHAR (44),''' AND ADI CONTAINING ''');
SARA = Replace(:SARA,ASCII_CHAR (59),''' OR ADI CONTAINING ''');
SARA = :SARA||'''';
END
//// kullanımıda aşağıda
execute statement
'SELECT KOD, ADI
FROM STOK
WHERE KOD>0'||:SARA
into .....
Re: Bir Editte Birden fazla arama yapmak
Üstat, string parse ile yapmam lazım
En azından İsimlerin bulunduğu comboboxtaki Noktalı virgül ile belirlenilen isimleri parse ederek listboxa atarsam SQL tarafını kendim halledecem.
Comboboxtaki isimlerin ayraçlanmış halinden listboxa altalta gelecek şekilde yapmam gerek.
En azından İsimlerin bulunduğu comboboxtaki Noktalı virgül ile belirlenilen isimleri parse ederek listboxa atarsam SQL tarafını kendim halledecem.
Comboboxtaki isimlerin ayraçlanmış halinden listboxa altalta gelecek şekilde yapmam gerek.
En son Commandx tarafından 28 Şub 2020 04:30 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Re: Bir Editte Birden fazla arama yapmak
Merhaba,
Kullandığınız Delphi sürümü nedir?
Sorunlu kod paylaşabilir misiniz?
Kullandığınız Delphi sürümü nedir?
Sorunlu kod paylaşabilir misiniz?
Re: Bir Editte Birden fazla arama yapmak
tamam işte verdiğim örnekteki gibi StringReplace ile yapabilirsiniz.Commandx yazdı: ↑28 Şub 2020 08:09 Üstat, SQL ile yapmam lazım
En azından İsimlerin bulunduğu comboboxtaki Noktalı virgül ile belirlenilen isimleri parse ederek listboxa atarsam SQL tarafını kendim halledecem.
Comboboxtaki isimlerin ayraçlanmış halinden listboxa altalta gelecek şekilde yapmam gerek.
Re: Bir Editte Birden fazla arama yapmak
Kod: Tümünü seç
Function TersCevir(no:String):String;
var
Cevrilen:String;
i:Integer;
Begin
i:= 0;
Cevrilen := '';
For i := length(no) DownTo 1 Do
Begin
Cevrilen := Cevrilen + no[i];
End;
Result := Cevrilen;
End;
Function ARADANSEC( text, ilk, son:String ): String;
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
var
PARSED, Str,Ad,SoyAd:String;
i,k:Integer;
begin
Str := TersCevir(combobox1.Text);
For i := 1 to Length(Str) do
Begin
if Str[i] = ';' Then
Begin
For k := Length(Str) downto i do
Begin
Ad := Ad + Str[k];
End;
Break;
End;
SoyAd := SoyAd + Str[i];
End;
PARSED:=ARADANSEC(AD,';',';');
EDIT3.Text:=PARSED;
LISTBOX1.Items.Add(EDIT3.Text);
// IF (';'+PARSED+';')=COMBOBOX1.Text THEN BEGIN
// COMBOBOX1.Clear;
// END;
end;
Bu fonksiyonları kullanıyorum, Bir yere kadar gelebildim
1.ismi Listboxa atıyor fakat ikinci ismi Listboxa attığımda bayağı bir satır ekliyor onunda combobox1 onchange eventinde döngüye bağlı olmayacak şekilde result edilmesi gerekiyor.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Re: Bir Editte Birden fazla arama yapmak
Bir mantık kurarak bu işi koordineli bir şekilde yapmalısınız.
Ve işlemi için &&
Veya işlemi için ||
Like yani içeren ile başlayan ile biten için *
Birebir aynı ise =
işaretlerini kullanın. Ayrıca parantez de olmalı bu parantezler işlem önceliğini belirler.
Örnek
(isim AL* || isim=VELİ) && isim *UZUN
İsim AL ile başlayan veya isim VELİ olan ve isim UZUN ile biten kayıtları getirir.
Biraz Excel formül mantığında ve çok basit bir mantıkla excel veya logic mantığı bilen rahatlıkla yapar.
Ve işlemi için &&
Veya işlemi için ||
Like yani içeren ile başlayan ile biten için *
Birebir aynı ise =
işaretlerini kullanın. Ayrıca parantez de olmalı bu parantezler işlem önceliğini belirler.
Örnek
(isim AL* || isim=VELİ) && isim *UZUN
İsim AL ile başlayan veya isim VELİ olan ve isim UZUN ile biten kayıtları getirir.
Biraz Excel formül mantığında ve çok basit bir mantıkla excel veya logic mantığı bilen rahatlıkla yapar.
PostgreSQL - Delphi - Linux
Re: Bir Editte Birden fazla arama yapmak
Öncelikle, en son Delphi sürümüne geçiş yapmanızı ne kadar tavsiye etsem azdır. Kullandığınız sürüm ile en son sürüm arasında birçok programlama dili ve özellik eklendi. Kaldı ki 4-5 ay içinde çıkacak yeni sürümde beklenen geliştirmeler büyük projeler ile çalışmayı, kod yazma esnasındaki donma sorunlarına köklü çözümler getirmesi bekleniyor.
Bilmeyenler için; Delphi Community Edition adında bir sürüm yayınladı. En son versiyonu ücretsiz kullanma imkanı sunuyor. Eğer yıllık $5000 altında kazanca ve 5 kullanıcıdan az kullanıcıya sahip gerçek veya tüzel kişi iseniz ücretsiz olarak kullanılabilirsiniz. Aşağıdaki bağlantıdan üye olduğunuzda 1 sene geçerli KEY e-mail adresinize gönderiliyor. Normalde tek sürüm ile çalışıyor bu KEY. Süresi bittikten sonra (bitmeden önce değil, bittikten en erken 1 gün sonra) yeniden talep ettiğinizde yeni KEY gönderiliyor.
https://www.embarcadero.com/products/delphi/starter
Delphi Community Edition ile "Delphi Professional" özelliklerine sahip oluyorsunuz. Sadece veritabanı erişimleri yerel veritabanları ile sınırlı. Bunu aşmak için Firebird'e özel FIBPlus veya profesyonel Devart firması UniDAC gibi bileşen setleri kullanımı yeterli oluyor.
Sorunuza gelince, Delphi 7 ile belli bir karakter kullanarak string -> TStrings ayırma işlemini belli koşullara uyarak aşağıdaki kod ile yapabilirsiniz. Ancak yeni sürümlerde bu koşullara gerek kalmayacak şekilde yapmanız mümkün.
Kod: Tümünü seç
procedure SplitToStrings(const Value: string; const Splitter: Char; List: TStrings);
var
I: Integer;
LList: TStringList;
begin
if not Assigned(List) then Exit;
LList := TStringList.Create();
try
LList.Delimiter := Splitter;
LList.DelimitedText := Value;
List.Clear;
for I := 0 to LList.Count-1 do
List.Add(LList[I]);
finally
LList.Free();
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SplitToStrings(ComboBox1.Text, ';', ListBox1.Items);
end;
Kod: Tümünü seç
"ALİ CAN";"MEHMET KAYA";"KENAN AY";"SUAT DAĞ"
Re: Bir Editte Birden fazla arama yapmak
ertank yazdı: ↑29 Şub 2020 07:57Öncelikle, en son Delphi sürümüne geçiş yapmanızı ne kadar tavsiye etsem azdır. Kullandığınız sürüm ile en son sürüm arasında birçok programlama dili ve özellik eklendi. Kaldı ki 4-5 ay içinde çıkacak yeni sürümde beklenen geliştirmeler büyük projeler ile çalışmayı, kod yazma esnasındaki donma sorunlarına köklü çözümler getirmesi bekleniyor.
Bilmeyenler için; Delphi Community Edition adında bir sürüm yayınladı. En son versiyonu ücretsiz kullanma imkanı sunuyor. Eğer yıllık $5000 altında kazanca ve 5 kullanıcıdan az kullanıcıya sahip gerçek veya tüzel kişi iseniz ücretsiz olarak kullanılabilirsiniz. Aşağıdaki bağlantıdan üye olduğunuzda 1 sene geçerli KEY e-mail adresinize gönderiliyor. Normalde tek sürüm ile çalışıyor bu KEY. Süresi bittikten sonra (bitmeden önce değil, bittikten en erken 1 gün sonra) yeniden talep ettiğinizde yeni KEY gönderiliyor.
https://www.embarcadero.com/products/delphi/starter
Delphi Community Edition ile "Delphi Professional" özelliklerine sahip oluyorsunuz. Sadece veritabanı erişimleri yerel veritabanları ile sınırlı. Bunu aşmak için Firebird'e özel FIBPlus veya profesyonel Devart firması UniDAC gibi bileşen setleri kullanımı yeterli oluyor.
Sorunuza gelince, Delphi 7 ile belli bir karakter kullanarak string -> TStrings ayırma işlemini belli koşullara uyarak aşağıdaki kod ile yapabilirsiniz. Ancak yeni sürümlerde bu koşullara gerek kalmayacak şekilde yapmanız mümkün.
Tasarım ekranınız yukarıdaki ilk sorunuzda paylaştığınız ekran şeklinde düşünebilirsiniz. Burada tek dikkat etmeniz gereken konu boşluk karakterleri. Normalde Delphi 7 "TStringList.StrictDelimiters" özelliğini içermiyor. Bu daha sonraki Delphi sürümlerinde gelen bir özellik. Dolayısıyla boşluk karakterlerini de her zaman ayraç olarak algılıyor. Boşluk karakterinin ayraç olmasını engellemek için girilen bilerilerin aşağıdaki şekilde çift tırnak içinde olması gerekiyor.Kod: Tümünü seç
procedure SplitToStrings(const Value: string; const Splitter: Char; List: TStrings); var I: Integer; LList: TStringList; begin if not Assigned(List) then Exit; LList := TStringList.Create(); try LList.Delimiter := Splitter; LList.DelimitedText := Value; List.Clear; for I := 0 to LList.Count-1 do List.Add(LList[I]); finally LList.Free(); end; end; procedure TForm1.Button1Click(Sender: TObject); begin SplitToStrings(ComboBox1.Text, ';', ListBox1.Items); end;
Kod: Tümünü seç
"ALİ CAN";"MEHMET KAYA";"KENAN AY";"SUAT DAĞ"
Üstat Örnek Çok güzel fakat iki cümle arasında Boşluk oldu mu yani Ad ve Soyad ı yazınca ad dan hemen sonra Soyadı alt satıra geçiriyor
Ali
CAN
Mehmet
KAYA
....
....
gibi
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Re: Bir Editte Birden fazla arama yapmak
Merhaba,
Açıklamaları okumamışsınız. Son kısmında özellikle bu sorun ile karşılaşmamak için çözüm önermiştim.
Delphi 7 içindeki TStringList boşluk karakterini *her zaman* ayraç kabul eder. Bunu önlemek için ayraç olmayacak boşluk karakteri içeren ifadeleri çift tırnak içine almalısınız.
Açıklamaları okumamışsınız. Son kısmında özellikle bu sorun ile karşılaşmamak için çözüm önermiştim.
Delphi 7 içindeki TStringList boşluk karakterini *her zaman* ayraç kabul eder. Bunu önlemek için ayraç olmayacak boşluk karakteri içeren ifadeleri çift tırnak içine almalısınız.
Re: Bir Editte Birden fazla arama yapmak
Kod: Tümünü seç
Procedure Ayikla(Kaynak:String; Const Ayrac:Char; Hedef:TListBox);
Var
i,a:integer;
Begin
a:=1;
for I := 1 to Length(Kaynak) do
if Kaynak[i]=Ayrac then
Begin
if a=1 Then Hedef.items.Add(Copy(Kaynak,a,i-1))
Else Hedef.Items.Add(Copy(Kaynak,a,i-a));
a:=i+1;
End;
Hedef.Items.Add(Copy(Kaynak,a,i-a));
End;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Ayikla(Edit1.Text,',',ListBox1);
end;
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..