| ozturkfa | 17.09.2003 - 11:42:19 |
| 20.000 den fazla kayit olan tablolarda (indexli) arama yapilirken
'like ' kullandigimda sıkıntı oluyor . Tavsiyelerinizi bekliyorum aşagida bir kod ornegi var. bu kod çalişmıyor. Problemi bulamıyorum !? unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, StdCtrls, Grids, DBGrids, ADODB; type TForm1 = class(TForm) ADOConnection1: TADOConnection; q1: TADOQuery; DBGrid1: TDBGrid; Button1: TButton; DataSource1: TDataSource; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin q1.Close; q1.SQL.Clear; q1.SQL.Add('select * from personel where soyadi like :syad'); q1.Parameters.ParamByName('syad').Value:='%'; q1.Open; end; end. sonuc boşküme :) | |
| mussimsek | 17.09.2003 - 12:02:33 |
| merhaba,
like'tan sonra sadece % koymuşsunuz. Bence kullanıcı bir harf veya harfler girdikten sonra siz arama yaptırın. Mesela Edit1'e girmiş olsun. O zaman kodunuz şöyle olmalı: procedure TForm1.Button1Click(Sender: TObject);
begin q1.Close; q1.SQL.Clear; q1.SQL.Add('select * from personel where soyadi like ''' + Edit1.Text + '%'''); q1.Open; end; Kolay gelsin. | |
| ozturkfa | 17.09.2003 - 16:43:59 |
| cevabınız için teşekkür ederim
benim sıkıntım bu query nin boş küme dönmesi. kayitli herkesin bir soyadi var ama query boş küme dönüyor. sadece % yazmamin sebebi daha basit görünmesini istemem, yoksa bir kriter vermedigimi bende biliyorum asil programda zaten bircok edite göre arama yapıyor. bu kod calismayinca foruma gönderdigim program(cigi) denedim. oda olmadi! :x ilginiz için tekrar teşekkür ederim. | |
| Kuri_YJ | 01.10.2003 - 16:45:54 |
| Hangi DB'yi kullanıyorsunuz? Dil ayarları tamam mı? Arama yaptığınız Field'In DB üzerindeki tanımı nedir? | |
| ozturkfa | 01.10.2003 - 18:51:09 |
| kullandigim database sql server 2000
sıkıntı olan tablo lar in field degerleri nvarchar cinsinden bir access tablosundan sqlserver2000 e table lar aktardim (import export kullanarak). bazi recordlarin bazi fieldlari <NULL> kaldi. 'like ' kullanarak degeri <NULL> olan fieldleride taramak sıkıntı oldu. ben bunu <NULL> yerine ' ' kullanarak astim(tavsiye ederim ise yariyor :D ) . daha farkli cozum yollari varsa onerilere acigim.... ilginiz icin cook tesekkur ederim | |
| sair | 02.10.2003 - 08:29:51 |
| Bide şunu deneyin
Try q1.Close; q1.Unprepare; q1.SQL.Clear; q1.SQL.Add('select * from personel where soyadi like :syad'); q1.Prepare; q1.Parameters.Param[0].AsString:=Edit1.Text+'%'; q1.Open; Except On Exceptin do raise; end; 1.Field alanlarının yapısında value kullanmamaya özen gösterin. Value yavaşlamaya sebeb olacaktır.Aslında hiç bir yerde value kullanmamaya özen gösterin. 2.Yukarda gösterildiği gibi Unprepare ve prepare methotlarını mutlaka kullanın. Query nin hafızada hazırlanması için gereklidir. 3. SQL de NULL değer ile ' ' değer farklı şeylerdir. NULL yokluk anlamına gelir. ' ' ise boş değer (Space) anlamındadır. NULL değerlerini sorgulayacaksanız IS NULL ve IS NOT NULL ile sorgulayın. 4. Sorgularınızı Try Except blokları arasına alın. Hata oluştuğunda kilitlenmeyi önleyecektir. Sevgiler... | |
| sair | 02.10.2003 - 08:35:31 |
| q1.Parameters.Param[0].AsString:=Edit1.Text+'%';
satırı yanlış olmuş q1.Param[0].AsString:=Edit1.Text+'%'; olacak. :) | |
| Kuri_YJ | 04.10.2003 - 00:08:40 |
| Selam,
MS-SQL Server hakkında bir uyarı. Eğer bir select yazdığında değer dönmüyor ise bunun sebebi NULL alanlardan kaynaklanıyordur. Bu sebeple (eğer mümkün ise) sorgulama yapacağın alanlara Null değer ataması yapma !. Eğer NULL olması gerekiyor ise ve senin de bu alan üzerinde sorgulama yapman gerekiyor ise, işte o zaman WHERE koşullarında NULL olan alanlarını ayrı bir kontrole tabi tutman gerekir. Örnek; TABLO1'de ALAN1 isimli alanımız Char(10) olsun ve Null değer girilebilsin SELECT * FROM TABLO1 WHERE ISNULL(ALAN1,'') = 'A' örnek içindeki ISNULL(ALAN1,'') demek aslında, WHERE kontrolu sırasında eğer kayıtlarda NULL var ise o kaydı NULL kabul etme, ikinci verdiğimiz parametreyi geri döndür, yani boşluk ( '' ) MSDN'den ISNULL'a bakarsan orada daha detaylı örnekleri görebilirsin. Kolay gelsin. | |