none
Çok kriterli sorgu hk. RRS feed

  • Soru

  • Merhaba Arkadaşlar,

    İki tablo yu join ile birbirine bağladım. Bu tablolardan sorgulamam gereken 5 alan var.

    Alanları şu şekilde.(  ADSOYAD,GOREVAD,DURUM,BASLTARIH,BITTARIH.)

    'Önce 5 kriteri de sorguluyorum

    if TexAdSoyAd.text <>"" And TextGorevAd.Text<>"" And ComboDurum.text<>"" And DtBaslTarih.Cheked=True And DtBitTarih.Cheked=True Then

    CmdKayitAra.CommantText="(  ADSOYAD,GOREVAD,DURUM,BASLTARIH,BITTARIH.) Where ADSOYAD=@ADSOYAD AND ...... 'Diye devam ediyor.

     

    ' --------

    'Sonra 4 kriteri

     

    Else if TexAdSoyAd.text <>"" And ComboDurum.text<>"" And DtBaslTarih.Cheked=True And DtBitTarih.Cheked=True Then

    CmdKayitAra.CommantText="(  ADSOYAD,DURUM,BASLTARIH,BITTARIH.) Where ADSOYAD=@ADSOYAD AND ...... 'Diye devam ediyor.
    'Sonra 3 kriteri..
    Sorgular bu şekilde aşağıya doğru devam edip gidiyor. Hepsini buraya yazsaydım kimse bir şey anlamazdı herhalde:) Tam bir sorgu yığını oldu.
     
    Kullanıcı hangi kriterlerde veri listelemek isterse istesin sonuca gidebilmeli diyerekten bu şekilde yazdım yazdım:) tam 25 satır sorgu oldu ve başım döndü artık :)
    Acemi olduğum için başka yolunu bulamadım ve bilmiyorum. Yazdığım sorgularda da hata olabilir belki acemilik hali:)
    Bunu daha kısa bir şekilde yazmanın yolu yokmudur?
    Konu hakkında yardımlarınızı rica ediyorum
    Syg.

    9 Nisan 2011 Cumartesi 12:49

Yanıtlar

  • Selamlar, her INTERSECT'ten sonra bir boşluk yada NewLine veriniz;

     Dim Sql As String = ""

            If TextPersonelAra.Text <> "" Then Sql += "select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd like @AdSoyAd INTERSECT "
            If TextGorevAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where GorevAd like @GorevAd INTERSECT "
            If ComboDurumAra.Text <> "" Then Sql += "select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where Durum like @Durum INTERSECT "
            If DtBasTarihAra.Text <> "" Then Sql = "select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where BaslTarih >= @BaslTarih INTERSECT "
            If DtBitTarihAra.Text <> "" Then Sql += "select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where BitTarih <= @BitTarih INTERSECT "

            IF Sql.LastIndexOf("INTERSECT ") > 0 Then Sql = Sql.Remove(Sql.LastIndexOf("INTERSECT ")) 'Bu satırıda her ihtimale karşı böyle yapın.

    birde enson sorguda where eksik sanırım




    while(true)
     Console.WriteLine("AmonRa");
    

    onay.yalciner[at]hotmail[dot]com
    www.club-bravo.com
    11 Nisan 2011 Pazartesi 08:52
  • Levent Bey selamlar,

    Öncelikle kodları test etmediğimi söyleyeyim ama sizin gönderdiğiniz word dosyasındaki

     

    If DtBitTarihAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* from Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd LIKE @ADSOYAD INTERSECT  "

    CmdKayitAra.Parameters.AddWithValue("@ADSOYAD", "%" + TextPersonelAra.Text + "%")

     

     

    Bu şekilde çalıştırabildiğinize emin misiniz? Parametreye değer verdiğiniz satırda "'%" + TextPersonelAra.Text + "%'" olması gerekmiyor mu? Bir diğer sorun tarihleri sorguladığınız satırlarda bu kontrollerin Text property'leri "" değerini alıyor mu? Eğer almıyorsa her halde tarihe göre de arama yapmış oluyorsunuz,yani salt ada göre arama yapmanız için bu kontrollerin Text property'lerinin "" olması gerekiyor.

    Resim ya da word belgesi yerine projeyi upload ederseniz çok daha faydalı olabilir kanımca :)

    Yanlış anladıysam lütfen düzeltin,
    İyi çalışmalar,


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!



    • Yanıt Olarak İşaretleyen levent_ozturk 15 Nisan 2011 Cuma 13:15
    15 Nisan 2011 Cuma 11:54

Tüm Yanıtlar

  • Selam;

    Bunun için her sorgu kriteri için 5 sorgu yapınız ve bunun kesişim kümesini (intersect) alınız. (Evet ilk okulda öğrendiğimiz kümeler. (o: )

    select * from Üyeler where üye_adı like @adkelime + '%'
    intersect
    select * from Üyeler where üye_durum = @durum
    intersect
    select * from Üyeler where üye_kayıttarihi between @başlangıç and @bitiş
    intersect
    ...
    intersect 
    ...

    tüm sorguların sonuçlarının kesişim kümesi süzülen veri olacaktır. 




    while(true)
     Console.WriteLine("AmonRa");
    

    onay.yalciner[at]hotmail[dot]com
    www.club-bravo.com
    9 Nisan 2011 Cumartesi 13:12
  • Anladığım kadarıyla kullanıcı hangi filtreleri seçmişse onlara uygun kayıtları ve kolonları getirmek istiyorsun. Bunun için şu şekilde bir yöntem takip edebilirsin.

          Dim SelectCumlesi As String = "SELECT 1 OnemsizSatir "
          Dim WhereCumlesi As String = ""
    
          If TexAdSoyAd.text <> "" Then
            SelectCumlesi += ",ADSOYAD" 'Kolon oluştur
            WhereCumlesi += " AND ADSOYAD LIKE '%" & TexAdSoyAd.text & "'%" 'Filtre oluştur
          End If
    
          If TextGorevAd.text <> "" Then
            SelectCumlesi += ",GOREVAD" 'Kolon oluştur
            WhereCumlesi += " AND GOREVAD='" & TextGorevAd.Text & "'" 'Filtre oluştur
          End If
    
          If ComboDurum.text <> "" Then
            SelectCumlesi += ",DURUM" 'Kolon oluştur
            WhereCumlesi += " AND DURUM='" & ComboDurum.Text & "'" 'Filtre oluştur
          End If
    
          If DtBaslTarih.text <> "" Then
            SelectCumlesi += ",BASLTARIH" 'Kolon oluştur
            WhereCumlesi += " AND BASLTARIH='" & DtBaslTarih.Text & "'" 'Filtre oluştur
          End If
    
          If DtBaslTarih.text <> "" Then
            SelectCumlesi += ",BITTARIH" 'Kolon oluştur
            WhereCumlesi += " AND BITTARIH='" & DtBitTarih.Text & "'" 'Filtre oluştur
          End If
    
          'Şimdide SELECT ve WHERE cümlelerini birleştirelim.
          Dim SqlCumlesi As String = SelectCumlesi & " FROM Uyeler WHERE 1=1 " & WhereCumlesi
          CmdKayitAra.CommantText() = SqlCumlesi
    

    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    SQL Server & C# bloglama
    • Yanıt Olarak İşaretleyen Ekrem Önsoy 11 Nisan 2011 Pazartesi 10:41
    • Yanıt İşaretini Geri Alan Ekrem Önsoy 11 Nisan 2011 Pazartesi 10:41
    • Yanıt Olarak Öneren Ekrem Önsoy 11 Nisan 2011 Pazartesi 10:41
    10 Nisan 2011 Pazar 12:27
  • Önay Bey Merhaba,

     

    INTERSECT hakkında biraz araştırma ve denemeler yaptım fakat sanırım benim istediğimi karşılamıyor gibi. Yada ben yapamadım.

    INTERSECT ile şu şekilde bir deneme çalışma yaptım. Alanlar : AD , SOYAD , TEL

    select * from veriler Where AD like @AD

    INTERSECT

    select * from veriler Where SOYAD like @SOYAD

    INTERSECT

    select * from veriler Where TEL like @TEL

    Ben burada textbox1 , textbox2 ve textbox3'e değer girersem buna uyan veriler listeleniyor.

    Ama ben Sadece textbox1'e değer girersem veriler listelenmiyor. Veya textbox1 ve textbox3 'e değer girersem veriler yine listelenmiyor.

    INTERSECT ile isteğime uyan sorgular oluşturmak mümkün mü bilmiyorum.

     

    Benim yapmak istediğim aşağdaki gibi ama bu şekilde bütün kriterler için değişik sorgular yazdığımda tam bir kod yığını oluyor.

    Bunu daha kısa tutarak yapmak mümkün değilmidir acaba?

     

     

     

    'Burada 5 kriter de dolu ise sorgu devreye giriyor.

    If TextPersonelAra.Text <> "" And TextGorevAra.Text <> "" And ComboDurumAra.Text <> "" And DtBasTarihAra.Checked = True And DtBitTarihAra.Checked = True Then

    CmdKayitAra.CommandText = "Select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd like @AdSoyAd And GorevAd like @GorevAd And Durum like @Durum And BaslTarih >= @BaslTarih And BitTarih <= @BitTarih"

     

     

     

    'Burada ADSOYAD,GOREVAD,DURUM,BASLTARIH  kriterleri dolu ise sorgu devreye giriyor.

    ElseIf TextPersonelAra.Text <> "" And TextGorevAra.Text <> "" And ComboDurum.Text<>"" And  DtBasTarihAra.Checked = True  Then

    CmdKayitAra.CommandText = "Select CmdKayitAra.CommandText = "Select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd like @AdSoyAd And GorevAd like @GorevAd And Durum like @Durum And BaslTarih >= @BaslTarih"

     

     

     

     

    'Burada ADSOYAD,GOREVAD,DURUM,BITTARIH  kriterleri dolu ise sorgu devreye giriyor.

    ElseIf TextPersonelAra.Text <> "" And TextGorevAra.Text <> "" And ComboDurum.Text<>"" And DtBitTarihAra.Checked = True Then

    CmdKayitAra.CommandText = "Select CmdKayitAra.CommandText = "Select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd like @AdSoyAd And GorevAd like @GorevAd And Durum like @Durum And BitTarih <= @BitTarih"

     

     

    'Burada ADSOYAD,GOREVAD,DURUM kriterleri dolu ise sorgu devreye giriyor.

    ElseIf TextPersonelAra.Text <> "" And TextGorevAra.Text <> "" And ComboDurum.Text<>""  Then

    CmdKayitAra.CommandText = "Select CmdKayitAra.CommandText = "Select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd like @AdSoyAd And GorevAd like @GorevAd And Durum like @Durum"

    Syg.

    10 Nisan 2011 Pazar 13:23
  • O zaman sorguları seçeneklere göre ekleyin ;

    Dim sql as String = ""

    If TextBoxAd.Text <> "" Then sql += "select * From Üyeler where üye_ad = @ad intersect"
    If TextBoxSoyAd.Text <> "" Then sql += "select * From Üyeler where üye_soyad = @asoyad intersect"
    If CheckBoxAktif.Checked Then sql += "select * From Üyeler where üye_durum = 1 intersect"
    If ComboBoxGörev.SelectedValue <> 0 Then sql += "select * From Üyeler where üye_görev = @görev intersect"
    .
    .
    .
    sql = sql.Remove(sql.LastIndexOf("intersect"));




    while(true)
     Console.WriteLine("AmonRa");
    

    onay.yalciner[at]hotmail[dot]com
    www.club-bravo.com
    10 Nisan 2011 Pazar 17:29
  • Ahmet Bey Merhaba,

     Dim SelectCumlesi As String = "SELECT 1 OnemsizSatir ' Burada altı çizili kısıma benim ne yazmam gerekir .

    Syg.

    11 Nisan 2011 Pazartesi 06:42
  • Levent,

    ben dinamik olarak SQL cümlesini oluşturmaya çalıştım. SQL Server'de nihai olarak gönderilecek SELECT ifadesini oluşturmak için SelectCumlesi ve WHERECumlesi değişkenlerini kullandım. Dikkat ederseniz aşağıdaki gibi SelectCumlesi değişkenini oluştururken her kolonun önüne virgül eklemişim.

    SelectCumlesi += ",ADSOYAD" 'Kolon oluştur

    Başındaki bu virgül sorun olmasın diye default olarak sanki bir kolon varmış gibi SelectCumlesi değişkenine aşağıdaki gibi başlangıç değeri atadım.

    Dim SelectCumlesi As String = "SELECT 1 OnemsizSatir "

    Bu ifadeyi aşağıdaki gibi değiştirip en son tüm kolonlara bakma işlemi bittikten sonra SelectCumlesi değişkeninin başındaki virgülü kaldırabilirsiniz.

    Dim SelectCumlesi As String = "SELECT "


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    SQL Server & C# bloglama
    11 Nisan 2011 Pazartesi 06:56
  • Ahmet Bey Merhaba,

    Tşk.Ederim yardımlarınıza belirttiğiniz şekilde düzeltip denedim.

    Ancak bana şu şekilde bir hata verdi.

    Dim SqlCumlesi As String = SelectCumlesi & " FROM Uyeler WHERE 1=1 " & WhereCumlesi ' Bu kısımda siz tek tablo kullanmışsınız. Ben iki tabloyu join ile birleştirip kullanmaya çalıştım fakat bana yanlış diziliş hatası veriyor sanırım. Hata (Incorrect syntax near '.'. )

    Aşağıdaki altı çizili kısmı nasıl yazmam gerekir yardımcı olurmusunuz lütfen.

    Dim SqlCumlesi As String = SelectCumlesi & " Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID WHERE 1=1 " & WhereCumlesi

    Syg.

    11 Nisan 2011 Pazartesi 07:45
  • Önay Bey Merhaba,

    Dediğiniz gibi denedim yazmış olduğunuz sorgu tek tablo üzerinde tam istediğim gibi çok kısa ve çalışıyor veriler listeleniyor ama rakamsal alanlarını sorgulamak istediğimde bana bu hatayı veriyor.

    ( StartIndex sıfırdan küçük olamaz.
    Parametre adı: startIndex)

    'Kodlarım Aşağıdadır.

     Dim Sql As String = ""
            If TextAdAra.Text <> "" Then Sql += "Select * from veriler Where AD LIKE @AD INTERSECT"
            If TextSoyAdAra.Text <> "" Then Sql += " Select * from veriler Where SOYAD LIKE @SOYAD INTERSECT"
            If TextTelAra.Text <> "" Then Sql += "Select * from veriler Where TEL LIKE @TEL"

            Sql = Sql.Remove(Sql.LastIndexOf("INTERSECT"))

            cmd = New SqlCommand
            cmd.Connection = con
            cmd.CommandText() = Sql


            cmd.Parameters.AddWithValue("@AD", "%" & TextAdAra.Text & "%")
            cmd.Parameters.AddWithValue("@SOYAD", "%" & TextSoyAdAra.Text & "%")
            cmd.Parameters.AddWithValue("@TEL", "%" & TextTelAra.Text & "%")

            adap = New SqlDataAdapter(cmd)
            dt = New DataTable
            adap.Fill(dt)
            DataGridView1.DataSource = dt

    ----------

     

    Birde iki tabloyu join ile birleştirip denedim bu sefer direkt aşağıdaki hatayı verdi

    Incorrect syntax near 'INTERSECTselect'.

    'Kodlarım Aşağıdadır.

     Dim Sql As String = ""
            If TextPersonelAra.Text <> "" Then Sql += "select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd like @AdSoyAd INTERSECT"
            If TextGorevAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where GorevAd like @GorevAd INTERSECT"
            If ComboDurumAra.Text <> "" Then Sql += "select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where Durum like @Durum INTERSECT"
            If DtBasTarihAra.Text <> "" Then Sql = "select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where BaslTarih >= @BaslTarih INTERSECT"
            If DtBitTarihAra.Text <> "" Then Sql += "select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID BitTarih <= @BitTarih INTERSECT"

            Sql = Sql.Remove(Sql.LastIndexOf("INTERSECT"))

            CmdKayitAra = New SqlCommand
            CmdKayitAra.Connection = Con
            CmdKayitAra.CommandText() = Sql


            CmdKayitAra.Parameters.AddWithValue("@AdSoyAd", "%" & TextPersonelAra.Text & "%")
            CmdKayitAra.Parameters.AddWithValue("@GorevAd", "%" & TextGorevAra.Text & "%")
            CmdKayitAra.Parameters.AddWithValue("@Durum", "%" & ComboDurumAra.Text & "%")
            CmdKayitAra.Parameters.Add("@BaslTarih", SqlDbType.Date).Value = DtBasTarihAra.Value.ToString("dd-MM-yyyy")
            CmdKayitAra.Parameters.Add("@BitTarih", SqlDbType.Date).Value = DtBitTarihAra.Value.ToString("dd-MM-yyyy")

     

            Adap = New SqlDataAdapter(CmdKayitAra)
            Dt = New DataTable
            Ds = New DataSet
            Adap.Fill(Dt)
            Ds.Tables.Add(Dt)
            DataGridView1.DataSource = Dt

    Syg.


    • Düzenleyen levent_ozturk 11 Nisan 2011 Pazartesi 08:05 Düzeltme
    11 Nisan 2011 Pazartesi 08:04
  • Selamlar, her INTERSECT'ten sonra bir boşluk yada NewLine veriniz;

     Dim Sql As String = ""

            If TextPersonelAra.Text <> "" Then Sql += "select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd like @AdSoyAd INTERSECT "
            If TextGorevAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where GorevAd like @GorevAd INTERSECT "
            If ComboDurumAra.Text <> "" Then Sql += "select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where Durum like @Durum INTERSECT "
            If DtBasTarihAra.Text <> "" Then Sql = "select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where BaslTarih >= @BaslTarih INTERSECT "
            If DtBitTarihAra.Text <> "" Then Sql += "select Gorev.*,Personel.* From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where BitTarih <= @BitTarih INTERSECT "

            IF Sql.LastIndexOf("INTERSECT ") > 0 Then Sql = Sql.Remove(Sql.LastIndexOf("INTERSECT ")) 'Bu satırıda her ihtimale karşı böyle yapın.

    birde enson sorguda where eksik sanırım




    while(true)
     Console.WriteLine("AmonRa");
    

    onay.yalciner[at]hotmail[dot]com
    www.club-bravo.com
    11 Nisan 2011 Pazartesi 08:52
  • Önay Bey Merhaba,

    Bir türlü işin içinden çıkamadım :)

    Yazdığınız kodlar şu şekilde çalışıyor  ilk önce  iki tarih arasını sorgulayıp datagridview de listeliyorum daha sonra sonra diğer kriterleri yazıyorum sorgu çalışıyor.

    Örneğin Ben sadece isim yada Görev Adı yazıp sorgulamak istiyorum  veri gelmiyor. Ama iki tarih arasını sorgulayıp datagridview de listeledikten sonra isim veya diğer kriterleri yazıyorum sorgu çalışıyor:)  Acaba ilk çalıştığında ( If Sql.LastIndexOf("INTERSECT") > 0 Then Sql = Sql.Remove(Sql.LastIndexOf("INTERSECT")) Bu kısımdan dolayı sadece rakamsal alanları mı dikkate alıyor olabilirmi?

     

    Kodlar aşağıda.

    Dim Sql As String = ""

            If TextPersonelAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* from Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd LIKE @AdSoyAd INTERSECT "
            If TextGorevAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* from Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where GorevAd LIKE @GorevAd INTERSECT "
            If ComboDurumAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* from Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where Durum LIKE @Durum INTERSECT "
            If DtBasTarihAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* from Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where BaslTarih >= @BaslTarih INTERSECT "
            If DtBitTarihAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* from Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where BitTarih <= @BitTarih INTERSECT "

            If Sql.LastIndexOf("INTERSECT") > 0 Then Sql = Sql.Remove(Sql.LastIndexOf("INTERSECT"))

            CmdKayitAra = New SqlCommand
            CmdKayitAra.Connection = Con
            CmdKayitAra.CommandText() = Sql

            CmdKayitAra.Parameters.AddWithValue("@AdSoyAd", "%" & TextPersonelAra.Text.ToString & "%")
            CmdKayitAra.Parameters.AddWithValue("@GorevAd", "%" & TextGorevAra.Text.ToString & "%")
            CmdKayitAra.Parameters.AddWithValue("@Durum", "%" & ComboDurumAra.Text.ToString & "%")
            CmdKayitAra.Parameters.Add("@BaslTarih", SqlDbType.Date).Value = DtBasTarihAra.Value.ToString("dd-MM-yyyy")
            CmdKayitAra.Parameters.Add("@BitTarih", SqlDbType.Date).Value = DtBitTarihAra.Value.ToString("dd-MM-yyyy")


            Adap = New SqlDataAdapter(CmdKayitAra)
            Dt = New DataTable
            Adap.Fill(Dt)
            DataGridView1.DataSource = Dt

     

     Acaba tablo yapılarımda mı bir problem var? Personel tablosundan sadece PersonelID ve AdSoyAd gerekli olduğu için şehir ve ilçeleri join' e dahil etmedim problem olurmu acaba.

    Personel Tablom

    PersonelID int Unchecked
    AdSoyAd nvarchar(50) Checked
    SirketUnvan nvarchar(250) Checked
    IsUnvan nvarchar(250) Checked
    Telefon nvarchar(25) Checked
    Dahili nvarchar(15) Checked
    Gsm nvarchar(25) Checked
    Faks nvarchar(11) Checked
    Mail nvarchar(150) Checked
    Adres nvarchar(250) Checked
    SehirID int Checked
    IlceID int Checked

    --------------------------------

    Gorev Tablom

    GorevID int Unchecked
    PersonelID int Checked
    GorevAd nvarchar(250) Checked
    Oncelik nvarchar(50) Checked
    Durum nvarchar(50) Checked
    Tamamlanan nvarchar(10) Checked
    BaslTarih date Checked
    BaslSaat nvarchar(5) Checked
    BitTarih date Checked
    BitSaat nvarchar(5) Checked
    Aciklama nvarchar(250) Checked

    Syg.

     

    11 Nisan 2011 Pazartesi 13:11
  • Selam burada sorun Like kelimesinin yanlış kullanımından kaynaklanıyor sanırım. Joker karakter kullanmadığınızdan istediğiniz isimler listelenmiyor;

      If TextPersonelAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* from Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd LIKE @AdSoyAd + N'%' INTERSECT "
            If TextGorevAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* from Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where GorevAd LIKE @GorevAd + N'%'  INTERSECT "

     

    @AdSoyAd + N'%' yazarak ile başlayanlar (sizin yapmak istediğiniz bu sanırım)

    N'%' + @AdSoyAd + N'%' yazarak içerenler

    N'%' + @AdSoyAd  yazarak ile bitenler araması yaptırabilirsiniz.





    while(true)
     Console.WriteLine("AmonRa");
    

    onay.yalciner[at]hotmail[dot]com
    www.club-bravo.com
    11 Nisan 2011 Pazartesi 14:06
  • Önay Bey Merhaba,

    Like kelimesini nasıl kullanacağımı anlamayamadım tam olarak ( N ) burada neyi ifade ediyor.? Joker karekter kullanımı ile ilgili bir örnek verebilirmisiniz rica etsem.

    Mesala burada joker karekter nasıl kullanılır?

    If TextPersonelAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* from Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd LIKE @AdSoyAd  INTERSECT "

     CmdKayitAra.Parameters.AddWithValue("@AdSoyAd", "%" & TextPersonelAra.Text.ToString & "%")' Ben like kelimesini hep bu şekilde kullanmıştım. Daha önce bir sorun teşkil etmemişti.
    -----------

    Birde like kullanmadan denedim. Yani (  Where AdSoyAd = @AdSoyAd INTERSECT " ) bu şekilde denedim yine aynı değişen bir şey olmadı.

    Sizi ve Ahmet Bey'i uğraştırdım. kaç gündür. Yardımcı olmaya çalıştığınız için çok tşk.ederim.

    İyi Akşamlar.


     

    11 Nisan 2011 Pazartesi 17:27
  • N harfi nvarchar daki n, yani National(ulusal) anlamına geliyor, Sorgu içinde abecesel değer kullandığımızda, değerin nvarchar olarak işlem görmesini sağlar, kullanılmasada olabilir. Burada joker karakter %(percent) işaretidir. 

    üye_adı Like  'a%'   -->  Ali, Ahmet, Arzu
    üye_adı Like  'ar%'   -->  Arzu

    üye_adı Like  '%a%'   -->  Ali, Ahmet, Arzu, Yaşar, Kazım, Şahin, Bora, Ragıp
    üye_adı Like  '%ah%'   -->  Ahmet, Şahin

    üye_adı Like  '%a'   --> Bora
    üye_adı Like  '%et'   --> Ahmet, Demet
     

    Bence tek başına SQL Management Studio ile intersect sorgularınızı bir ayarlayın, ondan sonra uygulayın. Buradan bir hata göremedim ben. 




    while(true)
     Console.WriteLine("AmonRa");
    

    onay.yalciner[at]hotmail[dot]com
    www.club-bravo.com

    11 Nisan 2011 Pazartesi 19:49
  • Önay Bey Merhaba,

     

    Sorguları dediğiniz gibi tek başına SQL Management Studio ile intersect kullanarak denedim hepsi çalışıyor. Problem yok.

    Proğram tarafını da kontrol sonucu size bildireceğim.

    Syg.

    12 Nisan 2011 Salı 12:34
  • Merhaba Arkadaşlar,

    Yukarıda bahsetmiş olduğum sorunumu aşabilmiş değilim. O yüzden  http://cid-a3ca9c7a87cd619b.office.live.com/browse.aspx/.Documents?uc=2 bu linkte kayıt arama formumun resmini paylaşıyorum. Word belgesinde de tablolarımın kolonlarını ve  kayıt aramak için yazdığım kodlarımı paylaşıyorum.

    Bir sürü denemeler yaptım fakat en son gelebildiğim nokta burası:(

    Sn. Önay Bey'in yardımları ile aşağıdaki nokta ya kadar gelebildim fakat daha ileri gidemiyorum bir türlü.

     

    Kodlar şu şekilde çalışıyor  ilk önce  iki tarih arasını sorgulayıp datagridview de listeliyorum daha sonra sonra diğer kriterleri yazıyorum sorgu çalışıyor.

    Örneğin Ben sadece isim yada Görev Adı yazıp sorgulamak istiyorum  veri gelmiyor. Ama iki tarih arasını sorgulayıp datagridview de listeledikten sonra isim veya diğer kriterleri yazıyorum sorgu çalışıyor:) 

    Sizlerden konu hakkında yardımlarınızı rica ediyorum.

    VB.NET 2010 - SQL 2008

    Syg.

    14 Nisan 2011 Perşembe 16:29
  • Levent Bey selamlar,

    Öncelikle kodları test etmediğimi söyleyeyim ama sizin gönderdiğiniz word dosyasındaki

     

    If DtBitTarihAra.Text <> "" Then Sql += "Select Gorev.*,Personel.* from Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd LIKE @ADSOYAD INTERSECT  "

    CmdKayitAra.Parameters.AddWithValue("@ADSOYAD", "%" + TextPersonelAra.Text + "%")

     

     

    Bu şekilde çalıştırabildiğinize emin misiniz? Parametreye değer verdiğiniz satırda "'%" + TextPersonelAra.Text + "%'" olması gerekmiyor mu? Bir diğer sorun tarihleri sorguladığınız satırlarda bu kontrollerin Text property'leri "" değerini alıyor mu? Eğer almıyorsa her halde tarihe göre de arama yapmış oluyorsunuz,yani salt ada göre arama yapmanız için bu kontrollerin Text property'lerinin "" olması gerekiyor.

    Resim ya da word belgesi yerine projeyi upload ederseniz çok daha faydalı olabilir kanımca :)

    Yanlış anladıysam lütfen düzeltin,
    İyi çalışmalar,


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!



    • Yanıt Olarak İşaretleyen levent_ozturk 15 Nisan 2011 Cuma 13:15
    15 Nisan 2011 Cuma 11:54
  • Emre Bey Merhaba,

    Cevabınızdaki ( Bir diğer sorun tarihleri sorguladığınız satırlarda bu kontrollerin Text property'leri "" değerini alıyor mu? Eğer almıyorsa her halde tarihe göre de arama yapmış oluyorsunuz,yani salt ada göre arama yapmanız için bu kontrollerin Text property'lerinin "" olması gerekiyor ) bu kısım beni uyandırdı:)

    If DtBitTarihAra.Text <> "" Then bu kısmı   If DtBitTarihAra.Checked = True Then bu şekilde değiştirdim ve oldu.

    Çok teşekkür ederim Emre Bey saolun.

    Ayrıca Önay Bey'e ve Ahmet Bey'e de çok teşekkür ederim. Kaç gündür basit bir hatam yüzünden sizleri de uğraştırdım. Kusura bakmayın:(

    Sorunum çözüldü.

     

    15 Nisan 2011 Cuma 13:11