Eski 05-05-04, 01:14 #1
vankedisi vankedisi çevrimdışı
Varsayılan tabloda arama yapma

hazırladığım tabloda tek edit kutusu ile sorunsuz arama yapabiliyorum.Ben iki edit kutusu kullanarak arama yapmak istediğimden şu kodları yazdım:

procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Locate('ADI;SOYADI', VarArrayOf(Edit1.Text, Edit2.Text)[loCaseInsensivite]);
end;

verdiği hatalar:
[Error] Unit1.pas(58): Incompatible types: 'Array' and 'TCaption'
[Error] Unit1.pas(58): Undeclared identifier: 'loCaseInsensivite'
[Error] Unit1.pas(58): Not enough actual parameters
[Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit1.pas'


anladığım kadarıyla 'Array' a bir tanımlama yapmamı istiyor.sadede geleyim, arkadaşlar işin içinden çıkamadım. Yardımcı olursanız sevinirim.
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 05-05-04, 01:23 #2
haldunuraz haldunuraz çevrimdışı
Varsayılan Cvp: tabloda arama yapma

hatalara göre konuşuyorum (bu dili bilmiyorum)

ilk hatada array ve tcaption uyumsuz tipler
2 IoCaseInsensitive tanımlanmamış değişken
3 yetersiz parametreler
4 unit1.pas compile edilemez
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 05-05-04, 20:34 #3
vankedisi vankedisi çevrimdışı
Varsayılan Cvp: tabloda arama yapma

verdiğin bilgiler doğru da derdime çare olmadı maalesef
tek edit kutusu ile arama yapmaya karar verdim.Şu şekilde arama yapıyor:
Table1.Locate('ADI',Edit1.Text,[loPartialKey,] );
ama şöyle yaptığımda
Table1.Locate('ADI',Edit1.Text,[loPartialKey,loCaseInsensivite]);
şu hataları veriyor
[Error] Unit1.pas(59): Undeclared identifier: 'loCaseInsensivite'
[Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit1.pas'

"loCaseInsensivite" nasıl deklare edilir .Yardımcı olursanız sevinirim
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 05-05-04, 20:59 #4
Sessiz_cin Sessiz_cin çevrimdışı
Varsayılan Cvp: tabloda arama yapma

Locate tekil arama yapabilirsin basit arama yane locaseinsensivite kullanmak istiyorsan typeda belirterek dene
type
tlocateoption=(locaseinsensitive, lopartialkey);
tlocateoptions = setof tlocateoption;
sonra arattır yada partialkey sonra yazarak bir arattır table1.locate('adi',edit1.text,[locaseinsensitive, lopartialkey]);


Filtrelemeye bir örnek incele istersen ;

Codec By GeNiUS !
genius@turkiye.com

Bir tablonun filterelenmesi, basit olarak filter özelliğine, seçim kriterinin yazılıp, filtered özelliğinin TRUE yapılması ile yapılır. Tablo seçim kriterine uyan kayıtları gösterir, diğerlerini göstermez.
Filtreleme işleminin, dinamik bir sorgu niteliğinde, form üzerindeki alanlar kullanılarak yapılması, daha kullanışlı olabilir. Örneğin, Oracle formlarında, sorgu moduna girildiğinde, veri alanlarının temizlenerek, sorgu parametrelerinin yazılmasına imkan vermekte ve sorgu uygula komutu ile birlikte, belirtilen kriterlere uygun sonuç kümesi getirilmektedir.
Benzer bir yapı, Delphi formlarında da kurulabilir. Bunun için takip edilecek adımlar şunlardır.
· Form üzerine,"Sorgu moduna geçiş" için kullanılacak bir buton yerleştirin.
· Butona basıldığında çalışması için, OnClick olay yordamı içerisinde verilecek
<SorgulanacakTabloAdı>.Insert
· komutu ile, veri alanlarının temizlenmesini sağlayın
· Form üzerine "Sorgu uygulama" için kullanılacak başka bir buton yerleştirip, OnClick olay yordamına,
< SorgulanacakTabloAdı >.cancel
· komutunu yazarak, arama kriteri olarak girilen değerlerin, tabloya kaydedilmemesini sağlayın. Fakat bu işlemden önce, sorgulama kriteri olarak kullanılacak alanlardaki sorgu kriterlerini değişkenlere aktararak, saklayın.
· Seçilen alanların tümü, sorgu işleminde kullanılmayabilir. Bu nedenle boş bırakılan alanların, sorgulama esnasında problem yaratmaması için, aşağıdaki fonksiyonları kullanın. Eğer, sorgulama alanı boş bırakılmışsa, bu fonksiyonlar, o alana ait her türlü değerin kabul edilmesini sağlayacaktır.
function nvlforstr(birinci:string;ikinci:string):string;
begin
if birinci=''
then result:=ikinci
else result:=birinci;
end;

function nvlforscl(birinci:string;ikinci:string):string;
begin
if birinci=' . . . '
then result:=ikinci
else result:=birinci;
end;

function nvlforTEL(birinci:string;ikinci:string):string;
begin
if birinci='( ) '
then result:=ikinci
else result:=birinci;
end;

function nvltoyil(s1 : string) : string;
begin
if length(s1)=0 then result:='*' else result:=s1;
end;

· Filtre uygulanacak tablonun OnFilter olay yordamı parametreleri arasında bulunan ACCEPT, TRUE değerini alırsa, tablodaki o kayıt, filtreleme kriterine uygun demektir. Aksi taktirde, kayıt gösterilmeyecektir. Bu yordam aşağıdaki gibi kullanılır. Bu yordamdaki kod, tablonun her satırı için çalışarak, gereken mantıksal karşılaştırmayı yapacak ve ACCEPT parametresinin değerine göre kayıt kabul veya red edilecektir.
procedure Tf_data_ana.TableFilterRecord(DataSet: TDataSet;
var Accept: Boolean);

begin

Accept := (
(Table.FieldByName('firm_adi').AsString,
nvltoyil(kurulus_adi)) and
(Table.FieldByName('firm_sah').AsString,
NVLtoyil(sahip_adi)) and
(Table.FieldByName('VER_SCL_NO').AsString = NVLForscl(ver_sic,Table.FieldByName('VER_SCL_NO'). AsString)) and
(Table.FieldByName('VER_DA').AsString,
nvltoyil(vrg_d)) and
(Table.FieldByName('TEL').AsString= NVLForTEL(telefon,Table.FieldByName('TEL').AsStrin g))
);
end;
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 05-05-04, 22:26 #5
vankedisi vankedisi çevrimdışı
Varsayılan Cvp: tabloda arama yapma

sessiz_cin cevabın için teşekkürler.
verdiğin kodları yazdığımda bir sürü hata verdi, yerlerini değiştirdim, = leri : yaptım fln yine olmadı.(şimdi biraz kitap karıştırıp interneti tarayacağım).Aklıma editin CharCase özelliğini ecUpperCase yapmak geldi.Maalesef burada da ı ve i harfleri problem yaptı.Halledemezsem bu problemi sql komutlarını öğrenip bir de öyle deneyeceğim.
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 06-05-04, 09:51 #6
arachnida arachnida çevrimdışı
Varsayılan Cvp: tabloda arama yapma

Benim Programınındaki kod aynen şoyle
Table.Locate('UrunKod',edit1.Text,[])

ayrıca hatayı locaseinsesitive, filan veriyor sen uses satırında db kullan
o zaman kalkar
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 06-05-04, 20:16 #7
Sessiz_cin Sessiz_cin çevrimdışı
Varsayılan Cvp: tabloda arama yapma

arachnida Table.Locate('UrunKod',edit1.Text,[]) oke sorun çıkarmaz ama filter yok ozman locaseinsensitive için table1.locate('ADI',edit1.text,[locaseinsensitive, lopartialkey]); olarak dene vankedisi db yimi tanıtamıyorsun acaba bide werdiğim örneği kendi db ne göre ayarla direct c/p yapma hata werir..
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 06-05-04, 20:17 #8
vankedisi vankedisi çevrimdışı
Varsayılan Cvp: tabloda arama yapma

Table1.Locate('ADI',Edit1.Text,[loPartialKey] );
zaten bu şekilde arama yapabiliyorum ben.istediğim aramayı küçük harf büyük harf ayırdetmeden yapsın.o yüzden aşağıdaki kodu kullanmak istiyorum.
Table1.Locate('ADI',Edit1.Text,[loPartialKey,loCaseInsensivite]);

belki yanlış yaptığım bir şey vardır diye tüm uniti c/p yapıyorum.(usesde DB var)İnşallah yanlışı bulursunuz da ben de kurtulurum.iki gündür bakmadığım yer kalmadı.loCaseInsensivite yi deklare etmem lazım ama nasıl??? bu arada söyliyeyim acemiyim onun için basit bir hata da olabilir.Bir de program hiçbir kayıt eklenmeden ya da değişiklik yapılmadan kaydet butonuna basınca hata verip kapanıyor.Nasıl engellerim bunu?



unit genis;

interface

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

type
TForm1 = class(TForm)
Table1: TTable;
DataSource1: TDataSource;
DBEdit1: TDBEdit;
Label1: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
DBEdit8: TDBEdit;
DBEdit9: TDBEdit;
DBEdit10: TDBEdit;
DBEdit11: TDBEdit;
DBNavigator1: TDBNavigator;
Edit1: TEdit;
Label13: TLabel;
SpeedButton1: TSpeedButton;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;




procedure SpeedButton1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Table1.Locate('SOYADI',Edit1.Text,[loPartialKey,loCaseInsensivite]); //hata burada işte
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Prior;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Table1.Next;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Table1.Post;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
Table1.Append;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
Table1.Delete;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Table1.Cancel;
end;

end.
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 06-05-04, 20:22 #9
vankedisi vankedisi çevrimdışı
Varsayılan Cvp: tabloda arama yapma

Table1.Locate('SOYADI',Edit1.Text,[loCaseInsensivite,loPartialKey]);
bu şekilde de olmadı maalesef.
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 06-05-04, 21:10 #10
vankedisi vankedisi çevrimdışı
Varsayılan Cvp: tabloda arama yapma

arkadaşlar sorun çözüldü.Tüm ilgilenen arkadaşlara teşekkür ederim.
Kod:
Table1.Locate('SOYADI',Edit1.Text,[loCaseInsensitive] + [loPartialKey]);
(Delphiturkiye forumundan husonet doğru kodları verdi.)
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Cevapla

Bu konunun kısa yolunu aşağıdaki sitelere ekleyebilirsiniz

Konu Araçları

Gönderme Kuralları
Yeni konu açamazsınız
Cevap yazamazsınız
Dosya gönderemezsiniz
Mesajlarınızı düzenleyemezsiniz

BB code is Açık
Smiley Açık
[IMG] kodu Açık
HTML kodu Kapalı



Tüm saatler GMT +3. Şuan saat: 02:01
(Türkiye için artık GMT +3 seçilmelidir.)

 
5651 sayılı yasaya göre forumumuzdaki mesajlardan doğabilecek her türlü sorumluluk yazan kullanıcılara aittir. Şikayet Mailimiz. İçerik, Yer Sağlayıcı Bilgilerimiz.