Büyük tablolardaki arama sorunu
Büyük tablolardaki arama sorunu
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
'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
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ı:
Kolay gelsin.
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ı:
Kod: Tümünü seç
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;
anlatamadım herhalde
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!
ilginiz için tekrar 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!
ilginiz için tekrar teşekkür ederim.
Hangi DB'yi kullanıyorsunuz? Dil ayarları tamam mı? Arama yaptığınız Field'In DB üzerindeki tanımı nedir?
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
sql server 2000
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 ) . daha farkli cozum yollari varsa onerilere acigim....
ilginiz icin cook tesekkur ederim
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 ) . daha farkli cozum yollari varsa onerilere acigim....
ilginiz icin cook tesekkur ederim
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...
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...
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
ö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.
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
Kod: Tümünü seç
SELECT * FROM TABLO1
WHERE ISNULL(ALAN1,'') = 'A'
MSDN'den ISNULL'a bakarsan orada daha detaylı örnekleri görebilirsin.
Kolay gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/