Delphi Can

Orjinalini görmek için tıklayınız: Arama hatasi
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba arkadaşlar.
ekteki gibi bir tablom var. bu tabloya aynı kişiler farklı harflerle kaydedilmiş.
Ben örneğim " SELECT * FROM  TABLOADI WHERE (ad LIKE '%ahmet%') "   diye aratınca 1. - 3. ve 7. sıradaki kayırlar geliyor.
Diğer yanlış yazılan kayıtları da getirmek istiyorum.
yada Toraman aratınca Toroman yazılarıda ekrana getirmek istiyorum. 

bunu nasıl yapabilirim?  yani harf sırası farketmeksizin nasıl arama yapabilirim?

Teşekkürler.
Bu sıkıntılı bir iş. Bunu SQL sunucuda yapan standart bir işlev yok. Bu tür aramalara Fusy Search deniliyor. Bunun da bir algoritması var. Bu algoritmayla yazılmış bir Delphi kodu vardı ve parayla satıyordu. Bunu satın alıp UDF halinde sunucuya ekleyeceksiniz. Eğer MSSQL kullanıyorsanız o algoritmayı DotNet olarak UDF yapabilirsiniz, Interbase ve FireBird'de C tipi bir Delphi fonksiyonunu tanımlayabilmeniz gerekiyor. Daha sonra bunu aynen diğer Upper() vb fonksiyonlar gibi kullanabiliyorsunuz.
bu sorunun spesifik çözümü olamaz çunku yapılan yanlışlar bır standarda bağlı değil. yani ahmet,ahmat,ahmo vs.. arasında yanlışları bağdaştıracak hiçbir ilişki yok.
aklıma gelen şöyle birşey yapılabılır. Kendine eşleşen harf sayısı krıterı koyarsın. mesala arattğının kelimenin içinden 3 harfi veya 4 harfi, veya %70 i eşlessin yeter diyebilirsin.
o şekilde sorgu oluşturmayı denemen en mantıklısı. birde veritabanını yazmamıssın ama mssql de yeterınce strıng fonksıyonlar mevcut. Eğer hallemessen sana kod yazmaya calısırım kardes

delphi tarafından halledeyim dersen 
http://delphi.cjcsoft.net/viewthread.php?tid=44157 boyle bıseyler var ama ben ugrasmam. bır bak ısterrsen
Selamlar. Öncelikle Cevaplarınız için teşekkür ederim.
Fusy Search olayını araştırdım inceledim, ama sql ile arama yapmam daha sağlıklı olacak gibi. Şöyle ki,
örneğin kelime : "cengiz" diyelim.. başka bir satırda "nergiz" geçiyor ise bunu da cengiz'e benzetiyor.

Başka nasıl yapabilirim acaba?
Başka yolu yok maalesef. Ancak Fusy Search'de benzeme oranı diye bir parametre var. Bunu artırırsanız birbirine yakın kelimeleri eşleştirecektir.
Böyle bir ifade isteklerinizin bazılarını yakalayabilir ama arkadaşların da dediği gibi bu tür yazım yanlışlarının belirli bir standartı olmadığı için %100 bir çözüm pek mümkün değil.

where AD LIKE '%toraman%' 
OR     AD LIKE  '%_oraman%' 
OR     AD LIKE  '%t_raman%' 
OR     AD LIKE  '%to_aman%' 
OR     AD LIKE  '%tor_man%' 
OR     AD LIKE  '%tora_an%' 
OR     AD LIKE  '%toram_n%' 
OR     AD LIKE  '%torama_%' 
Bu tarz işler benzerlik algoritmaları ile halledilebilir. Microsoft Sql Server için SOUNDEX fonksiyonuna bakmanızı öneririm.
evet tuğrul hocamın dediği gibi soundex ile halledilebilir

where SOUNDEX(AD) LIKE SOUNDEX('toraman')
Bu komutu kullanırken bazı dikkat edilmesi gereken şeyler var bunlardan benim bildiklerim ciddi anlamda performans düşüklüğü
ve en önemliside arama ve eşleşme yapısı aranılan birinci harf dikkate alınarak olması bu nedenle sadece bu komutu baz alarak
Where şartı uygulanmamasına dikkat etmekte fayda var ve bunun yerine aynı işlemi soundex ile birlikte aranan alanı like '%xxx% ilede desteklemek daha iyi sonuç verecektir