Forumları Okundu Yap |
![]() |
#1 |
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. |
|
![]() |
![]() |
#2 |
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 |
|
![]() |
![]() |
#3 |
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 |
|
![]() |
![]() |
#4 |
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; |
|
![]() |
![]() |
#5 |
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. |
|
![]() |
![]() |
#6 |
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 |
|
![]() |
![]() |
#7 |
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..
|
|
![]() |
![]() |
#8 |
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. |
|
![]() |
![]() |
#9 |
Table1.Locate('SOYADI',Edit1.Text,[loCaseInsensivite,loPartialKey]);
bu şekilde de olmadı maalesef. |
|
![]() |
![]() |
#10 |
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.) |
|
![]() |
Cevapla |
Konu Araçları | |
|
|