access arama yapma / C#' a Dair Herşey: Veri tabanından Arama Yapma

Access Arama Yapma

access arama yapma

Modern Fikirler Enstitüsü   Web Tasarım ve Yazılım Ofisi

Klasik arama yöntemlerinde SQL&#;in bizlere sağlamış olduğu &#;Where Like&#; operatörünü hepimiz kullanmışızdır. Bu arama yönteminde metin alanlarının içinde bulunan kelimelere odaklanarak arama yapar. Bunu örneklerle açıklamak gerekirse:

SELECT * FROM Table_Name
WHERE Column LIKE &#;Kırmızı&#;

Bu örnekte Like komutu tam eşleşme aramaktadır. Sütun içinde yalnızca &#;Kırmızı&#; bulunmalıdır.

Yukarıdaki örnek üzerinden devam edelim. Arama yapacağımız alanın sadece başlangıç değerini biliyoruz gerisini tam olarak bilmiyorsak eğer:

SELECT * FROM Table_Name
WHERE Column LIKE &#;Kırmızı%&#;

Sonuç:
Kırmızı Ayakkabı
Kırmızı Pantolon

% işareti Kırmızı ile başlayan tüm kayıtları bize listeler. Kayıtların sadece Kırmızı ile başlaması gerekmektedir. Tam tersi olarak sonu Kırmızı ile biten kayıtları listelemek istersek eğer;

SELECT * FROM Table_Name
WHERE Column LIKE &#;%Ayakkabı&#;

Sonuç:
Kırmızı Ayakkabı

Burada da % işaretini baş tarafa yazmış olduk. Bu sorgu ile sonu Kırmızı ile biten tüm kayıtlar listelenecektir. Başlangıç değeri ya da bitiş değerine göre değilde içerisinde geçen bir değere göre arama yapmak isteyebilirsiniz. Bunun için arama yapacağınız harf ya da kelimenin başına ve sonuna % ifadesini koymamız gerekecetir. En sık kullanılan yöntemi olduğunu da söyleyebiliriz.

SELECT * FROM Table_Name
WHERE Column LIKE &#;%Kırmızı%&#;

Sonuç:
Kırmızı Ayakkabı
Kırmızı Pantolon
Mavi-Kırmızı Gömlek

Buraya kadar olan bölümde Where Like operatörünü incelemiş olduk. Where Like operatöründe 3. yöntem de dahil olmak üzere bazı arama sonuçlarında sonuç veremediği, yani tıkandığı olmaktadır. Örnek olarak &#;Mavi Gömlek&#; aramasına sonuç vermeyecektir. Mavi gömlek örneği gibi spesifik bir çok alana etki etmektedir. Teknolojik ürünlerin listelendiği bir sql sorgusunda ürün başlıkları standart olarak akıllı telefonlar marka model isimleri ile listelenir. Kategorisel olarak akıllı telefon kategorisinde bulunan &#;Apple iPhone 7 32GB&#; başlıklı bir ürün &#;iPhone 32GB&#; aramasında bulunabilmelidir.

Bunun için imdadımıza &#;Boolean Full-Text Searches&#; operatörleri yetişmektedir.

İlgili arama sonuçlarına göre, aramanızı bir veritabanındaki tüm alanlara genişletir ve MySQL&#;de bulanık aramaları berraklaşrıabilir.

Veritabanı ne kadar büyük ve karmaşık olursa arama yeteneklerinin de o kadar fazla olması gerekir. Bu arama tekniği MySQL aramalarının döndürdüğü sonuçları aranacak öebeğe odaklamayı sağlar.

Bir veritabanı, aradıkları verileri bulamazlarsa kullanıcılara hiçbir şey veremez. Veritabanı öğeleri ne kadar geniş ve karmaşık olursa, aramalarınızın ihtiyacınız olan bilgiyi döndürmek için o kadar basit olması gerekir.

Peki bu akıllı arama nedir nasıl çalışır?

Arama yapılan öbeği tablo içinde belirtilen sütunlarda arar. Şöyleki &#;Apple iPhone 7 32GB&#; başlıklı bir ürünü &#;iPhone 32GB&#; arama sonuçlarında listeleyebilirsiniz. Hızlıca örnekleyelim.

Tablomuz &#;Articles&#; tablosu. Bunu hızlıca yazdıralım. Burada önemli bir ayrıntı bulunmaktadır. Arama yapacağımız sütunların İndex değeri FULLTEXT olarak işaretlenmelidir.

____________________________________________________

CREATE TABLE IF NOT EXISTS `articles` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar() DEFAULT NULL,
`body` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `title` (`title`,`body`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
____________________________________________________

Kayıtlarımız da rastgele olarak şu şekilde ekleyelim:

____________________________________________________

INSERT INTO `articles` (`id`, `title`, `body`) VALUES
(1, &#;MySQL Tutorial&#;, &#;DBMS stands for DataBase &#;&#;),
(2, &#;How To Use MySQL Well&#;, &#;After you went through a &#;&#;),
(3, &#;Optimizing MySQL&#;, &#;In this tutorial we will show &#;&#;),
(4, &#; MySQL Tricks&#;, &#;1. Never run mysqld as root. 2. &#;&#;),
(5, &#;MySQL vs. YourSQL&#;, &#;In the following database comparison &#;&#;),
(6, &#;MySQL Security&#;, &#;When configured properly, MySQL &#;&#;);
____________________________________________________

Sql sorgumuz şu şekilde;

____________________________________________________

SELECT *, MATCH(title,body)
AGAINST(&#;MySQL database&#; in boolean mode) as score
FROM articles
order by score desc

____________________________________________________

Çıktısı şu şekilde olacaktır:

____________________________________________________

idtitlebodyscore
1MySQL TutorialDBMS stands for DataBase &#;
5MySQL vs. YourSQLIn the following database comparison &#;
6MySQL SecurityWhen configured properly, MySQL &#;
2How To Use MySQL WellAfter you went through a &#;
3Optimizing MySQLIn this tutorial we will show &#;
4 MySQL Tricks1. Never run mysqld as root. 2. &#;

 

Bu çıktının bize sağlamış olduğu sıralama en alakalı sonuç en yüksek dereceye sahip şekilde listelenmektedir. Bunu örneğimizde derece en yüksek olan ilk gelecek şekilde sıralamasını yaptık. Siz de bu dereceye göre kendi aramalarını alakalandırabilirsiniz.

Aspde veritabanında arama yapma

Merhaba yapmakta oldugum sitem için database kayıt ettigim verilerimi bir arama kutusu sayesinde aramak istiyorum fakat bır turlu basaramadım kodlar ve yardımcı icerik aşşagıda detaylı olarak vereceğim bu konuda yardımlarınızı bekliyorum. Saygılarımla.
Database dosyam : db/seafoodplus.info

Kod İçeriği :
seafoodplus.info Sayfa kod içeriği

<form name="arama" action="seafoodplus.info" method="get">
<table border="1" cellpadding="3" cellspacing="0" width="">
<tr>
<th colspan="2">Site İçi Arama</th>
</tr>
<tr>
<td align="right">Aranacak Sözcük :</td>
<td>
<input type="text" size="20" name="aranan"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Gönder"></td>
</tr>
</table>
</form>

seafoodplus.info sayfa kod içeriği

<% aranan = seafoodplus.infotring("aranan") %>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO">
<meta http-equiv="content-type" content="text/html; charset=windows">
<title>Arama Sayfası : "<% =aranan %>" Sözcüğü Arama Sonuçları</title>
</head>
<body>
<h4>Sonuçlar</h4>
<%If seafoodplus.infotring("aranan") = "" Then

seafoodplus.info "
<h5>Aranacak sözcüğü girin</h5>
"
seafoodplus.info "<br><a href=""javascript:seafoodplus.info()"">
<h6>Geri </h6>
</a>"
seafoodplus.info

Else

aranan = seafoodplus.infotring("aranan")End If %>
<% veritabani = seafoodplus.infoh("db/seafoodplus.info")
baglantim = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="_ & veritabani
Set baglanti = seafoodplus.infoObject("seafoodplus.infotion")seafoodplus.info en baglantim
Set kayitlar = seafoodplus.infoObject("seafoodplus.infoSet")
aramasql = "SELECT * FROM dokumanlar WHERE icerik LIKE '%" & aranan & "%'_ ORDER BY id ASC"
seafoodplus.info aramasql, baglanti, 1, 3
If seafoodplus.infoCount =< 0 Then
seafoodplus.info "
<h4>Site içeriğinde uygun kayıt bulunamadı</h4>
"
seafoodplus.info "
<h5>Aranan Sözcük : " & aranan & "</h5>
"
seafoodplus.info "<br><a href=""javascript:seafoodplus.info()"">
<h6>Geri </h6>
</a>"
seafoodplus.info
End If
%>
<%
seafoodplus.infoze = 20
SayfaSayisi = seafoodplus.infount
seafoodplus.infotePage = sayfano
%>
<table width="" border="0" cellpadding="0 cellspacing="0" align="left">
<tr>
<td valign="top" width=""><br>Bulunan kayıt: <b>
<% =seafoodplus.infoCount %></b><br>
<%
If seafoodplus.infoCount > 20 Then %>
<br>Her sayfada <font color="#ff"><% =seafoodplus.infoze %></font>_
sonuç görüntülenmektedir.<br>
<% End If %>
<br><br></td>
<td valign="top" width="">
<%
' Buradaki fonksiyon, aranan sözcüğü kırmızı renkte görüntüleyecek 
' şekilde değiştirmektedir.

Function degistir(karakter)
duzelt = karakter
duzelt = Replace(duzelt, aranan, "<font style='color:#ff'><b>_
" & aranan & "</b></font>")
degistir = duzelt
End Function
%>
<table border="0" cellpadding="5" cellspacing="0" width="">
<tr>
<td width="" valign="top"><b>İçerik</b></td>
</tr>
<%
For i = 1 To seafoodplus.infoze
If seafoodplus.info Then Exit For
%>
<tr>
<td valign="top"><% =degistir(kayitlar("icerik")) %></td>
</tr>
<%
seafoodplus.infoxtNext
%>
</table>
</td>
</tr>
<tr>
<td> </td>
<td>
<%
' aşağıdaki kodlar, bulunan kayıtlar bir sayfadan fazla ise, diğer
' sayfalara link oluşturmaktadır.
<%
If SayfaSayisi <> 1 Then
%>
<br><br> Diğer Sayfalar : 
<%
For i = 1 To SayfaSayisiIf i <> SayfaNo Then
%>
<b>[<a href="seafoodplus.info?sa=<% =i %>&aranan=<% =aranan %>"> <% =i %> </a>]</b>
<% Else %>
<b>[ <% =i %> ]</b><%End IfNextEnd If%></td>
</tr>
</table>
</td>
</tr>
</table>
<br>

<%
seafoodplus.info
Set kayitlar = Nothing
seafoodplus.info
Set baglanti = Nothing
' temizlik yapalım, oluşturduğumuz sunucu nesnelerini kapatalım ki
' sunucumuz yorulmasın.
%>
</body>
</html>
Son olarak seafoodplus.info databasemın tablo durumu resimde

seafoodplus.info

Şimdiden teşekkür eder çalışmalarınızda başarılar dilerim. Saygılarımla.

Özgür16 Ekim Perşembe #1

Hocam makale süper. ama diyelim tüm veritabanında arama yapacaz. o nasıl olacak? Sorguda ve kodlamada nasıl bir yöntem izlememiz lazım?

Mehmet Duran16 Ekim Perşembe #2

Merhaba! Tüm veritabanında arama yapmak için yine aynı yöntem kullanılabilir. Ancak tüm veritabanında arama yapılmasının kullanılır bir olay olduğunu sanmıyorum.

tolga29 Ekim Çarşamba #3

seafoodplus.info site hazırladım aramada aynı kodları kullandım. İı Şş vb. büyük küçük harf şeçiyor ve o harfler geçince bulmuyor? yardım edebilirseniz sevinirim [email protected]

Mehmet Duran29 Ekim Çarşamba #4

Merhabalar! Böyle bir sorunu seafoodplus.info dosyasında dil ile ilgili bir ayarlama yaptıysanız bu yüzden alıyor olabilirsiniz. Eğer böyle ayar yaptıysanız bu sorunu küçük değişiklikle düzeltebilirsiniz.

yıldıray yiğit18 Aralık Perşembe #5

hocam çok sağolun iki gündür uğraşıyordum emeğinize sağlık

Doğan11 Nisan Cumartesi #6

Merhabalar bu calisma Access uzerinden denenmis hocam denemedim ama calisacagindan eminim :) ben bu calismayi MySql ile yapmayi istiorum bu konuda yardimci olabilirmisiniz. İyi calismalar

Mehmet Duran11 Nisan Cumartesi #7

Merhaba. Mysql ile yapmak için sadece access için tanımlanan nesneleri (oledbconnection, oledbdatareader vb.) mysql için (mysqlconnection, mysqldatareader vb.) tanımlamalısın. Mysql`e bağlanmak için gerekli dll dosyasını mysql`in sitesinden indirebilirsin. Sorgulama ise tamamen aynı.

neslin14 Mayıs Cuma #8

anlatımınız güzel yalnız biraz daha ayrıntıya girebilir misiniz. ben access e yeni başladım ve bir kütüphane programı yapmaya çalışıyorum da

Mehmet Duran14 Mayıs Cuma #9

Merhaba. Bence buradaki bilgi başlangıç için yeterli. Daha detaylı işlemler için kendin uğraşmalı ve takıldığın yerlerde sorularını sormalısın.

ALİM KESKİN16 Mayıs Pazar #10

Aramayı başarılı şekilde yapıyorum . Fakar Gridview Yazi Tablosunun içindeki bütün Veriler seafoodplus.info ben sadece yazinin başlıgını çağırmak istiyorum ve başlıga tıklayınca o yazının içerine gitmesini istiyorum ?

Mehmet Duran17 Mayıs Pazartesi #11

Merhaba. Bu tarz birşeyi sorman yerine biraz araştırsan çok rahat yapabilirsin diye düşünüyorum. Sadece başlık çekmen için sql sorgusunda * yerine sütun adı kullanmalısın. Link oluştururken de kullandığın data kontrolünün html bölümünde a tagını kullanmalı ve bu taga href değeri vermen yeterli olur. Sitemdeki birçok örnekte bu yapı var. Birkaçını incelemen faydalı olabilir.

Alim KESKİN17 Mayıs Pazartesi #12

data nesnesının html bolumunu anlayamadım source kısmına bakıyorum fakat html ile ılgılı bı tag yok :S

Mehmet Duran17 Mayıs Pazartesi #13

Yani burada bahsettiğim alan data kontrollerinin itemtemplate bölümü. Ya da bu bölüm yerine döngü ile kendin html yapıyı oluşturabilirsin.

Gözde27 Mayıs Perşembe #14

merhaba. Anlatım çok güzel tam aradığım şey! Yaklaşık 1 aydır araştırıyorum fakat hala olumlu sonuç alamamaktayım. Ben bu özelliği access üzerinden c# da kullanmak istiyorum. Kodları denedim. seafoodplus.infond(); kısmında hata veriyor. Databind diye bir kod yok. Yardımcı olabilir misiniz? Teşekkürler.

Mehmet Duran28 Mayıs Cuma #15

Merhaba. DataBind satırına gelmeden önce hata var sanırım. Ancak kodları görmeden hatanının nedeni ve çözümü hakkında birşey söylemek zor. Kodları görmek gerekiyor.

ALİM KESKİN08 Haziran Salı #16

Mehmet abi ben ortadan aramayı kullandıseafoodplus.infoız aramada tek bir secenek değilde iki tane seçenek için kodlarda nasıl bi değişiklik lazıseafoodplus.infoçenek derkende; Yazi tablomdaki sadece baslik değil baslik ve icerik kısmında araması için burda ne yapmam lazım select * from yazi where baslik like'" + aranan + "'%";

Mehmet Duran08 Haziran Salı #17

Bunun için where koşuluna ikinci bir parametre eklemelisin. Sorgun şu yapıda olmalı :
select * from yazi where icerik like '%" + aranan + "%' and baslik like '%" + aranan + "%'";
Yalnız burada parametrik çalışmalısın. Bu şekilde sql injection'lara maruz kalırsın. (Eğer iki sütundan birindeki sonuç yeterli olur diyorsan koşulların arasındaki mantık ifadesi and değil or olmalı.)

Özgür Gündüz01 Ağustos Pazar #18

'seafoodplus.info' provider is not registered on the local machine. hatası alıyorum nasıl duzeltebilirim :/

Mehmet Duran02 Ağustos Pazartesi #19

Hatayı aldığın bilgisayarda Access tanımlı değil. Bunun için hata aldığın makineye Access provider'ı tanımlanmalı. Eğer makina senin ise Access 'i kurmalısın. Makina senin değilse hosting makinası ise hosting yetkilileri ile iletişime geçmelisin.

enes14 Ekim Perşembe #20

hocam seafoodplus.infond(); satırında hata veriyor. lütfen yardımcı olun. seafoodplus.infoidView' does not contain a definition for 'DataBind' and no extension method 'DataBind' accepting a first argument of type 'seafoodplus.infoidView' could be found (are you missing a using directive or an assembly reference?)

Mehmet Duran18 Ekim Pazartesi #21

@enes, yaptığın proje windows projesi mi yoksa web projesi mi? Web projesi ise büyük ihtimalle dll eksikliğinden bu hatayı alıyorsundur.

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.

nest...

batman iftar saati 2021 viranşehir kaç kilometre seferberlik ne demek namaz nasıl kılınır ve hangi dualar okunur özel jimer anlamlı bayram mesajı maxoak 50.000 mah powerbank cin tırnağı nedir