none
insert into sorgu1, insert into sorgu2 sorunu RRS feed

  • Soru

  • arkadaşlar bazı ortak parametre (değişken) leri içeren sorgu1 ve sorgu2 var. tek tek insert ettiğimde düzgün çalışıyor.

    ben tek buton tıklamasıyla olmasını istiyorum. yardımcı olabilir misiniz? (union birleştirme sorgusu da olabilir ama nasıl yerleştirileceğini bilemediğim için yapamadım.)

    5 Ağustos 2011 Cuma 12:45

Yanıtlar

  • strSQL = "insert into Tablom (a,b,c,d) (
    
    	(select x,y,z, @id from Tablo1 where q=@p1)
    
    	union
    
    	(select k,l,m, @id from Tablo2 where q=@p2)
    
    )"
    
    OleDbcomm.Parameters.AddWithValue("@id", textBox1.Text)
    

    şeklinde id değerini her bir satıra ekleyebilirsiniz.
    http://www.mehmetx.com
    6 Ağustos 2011 Cumartesi 13:30
    Yanıtlayıcı
  • strSQL = "insert into Tablom (a,b,c,d) select x,y,z, @id from Tablo1 where q=@p1;"
    

    formunda tek sorgu çalıştı. çoklu satırı eklemesi açısından güzel sonuç verdi.
    10 Ağustos 2011 Çarşamba 05:46

Tüm Yanıtlar

  • aralarına ;(noktalı virgül) koyarak çalıştırabilirsin;

    "insert a1, a2, a3 Tablo1 values (@d1, @d2, @d3); insert a4, a5 Tablo2 values (@d4, @d5)" 


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

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

    5 Ağustos 2011 Cuma 12:56
    Moderatör
  • Başka bir yolla değişkenleri page loadın yukarısında public static string deneme{get;set;} şeklinde kaç tane parametreniz varsa tanımlayın. Verileri çektiğiniz alanda deneme="deneme1"; gibi bir değeriniz olsun.

    Tüm parametreler page loadın yukarısındaki değişkenlerde saklanacak zaten. Tek butonun içine de bunları ortak değişkenleri yukarıdan okuyup çok rahat yapabilirsiniz diye düşünüyorum.


    Her zaman iyi olmayı isteyin, mükemmel olun.
    5 Ağustos 2011 Cuma 13:19
  • ilginiz için teşekkür ederim. çok iyi olmadığımdan kodlar üzerinden yardımcı olabilir misiniz?

    INSERT INTO v2_tblwrk_odev ( kid, lesson, un, kn, sebebi, dnm_bas, dnm_bit )

    alanlarına

    SELECT v2_tblgorulenler.kid, v2_tblgorulenler.drs, v2_tblgorulenler.un, v2_tblgorulenler.kono, 'Görüldü' AS sbp, @db1, @db2 " & _
        "FROM(v2_tblgorulenler) " & _
        "GROUP BY v2_tblgorulenler.kid, v2_tblgorulenler.drs, v2_tblgorulenler.un, v2_tblgorulenler.kono, 'Görüldü', @db1, @db2 " & _
        "HAVING (((v2_tblgorulenler.kid)=" & id & ") AND (([drs] & ' - ' & [un] & ' - ' & [kono]) Not In " & _
        "(SELECT [lesson] & ' - ' & [un] & ' - ' & [sn] AS ind2 " & _
        "FROM(v2_tblwrk_y) " & _
        "GROUP BY v2_tblwrk_y.stdnt, [lesson] & ' - ' & [un] & ' - ' & [sn], v2_tblwrk_y.cmadi " & _
        "HAVING (((v2_tblwrk_y.stdnt)=" & id & ") AND ((v2_tblwrk_y.cmadi)=0));))) " & _
        "ORDER BY v2_tblgorulenler.drs, v2_tblgorulenler.un;

    sorgusunda dönen değerleri (0 sayıda olursa problem çıkarır mı?) ve

    SELECT v2_tblwrk_odev.kid, v2_tblwrk_odev.lesson, v2_tblwrk_odev.un, v2_tblwrk_odev.kn, 'Ödevdi' AS sbp, @db1, @db2 FROM Sbt_tbl_contents INNER JOIN v2_tblwrk_odev ON (Sbt_tbl_contents.drs = v2_tblwrk_odev.lesson) AND (Sbt_tbl_contents.akn = v2_tblwrk_odev.kn) AND (Sbt_tbl_contents.sn = v2_tblwrk_odev.un) WHERE (((v2_tblwrk_odev.dnm_bas)>=DMax('dnm_bas','v2_tblwrk_odev','kid=' & [kid])) AND (([lesson] & ' - ' & [un] & ' - ' & [kn]) Not In (SELECT [lesson] & ' - ' & [un] & ' - ' & [sn] AS ind FROM (v2_tblwrk_y) GROUP BY [lesson] & ' - ' & [un] & ' - ' & [sn], v2_tblwrk_y.stdnt, v2_tblwrk_y.cmadi HAVING(((v2_tblwrk_y.stdnt) = " & id & ") And ((v2_tblwrk_y.cmadi) = 0)) ORDER BY [lesson] & ' - ' & [un] & ' - ' & [sn]))) GROUP BY v2_tblwrk_odev.kid, v2_tblwrk_odev.lesson, v2_tblwrk_odev.un, v2_tblwrk_odev.kn, 'Ödevdi', @db1, @db2 HAVING (((v2_tblwrk_odev.kid)=" & id & "));

    sorgusunda dönen değerleri eklemek istiyorum.

    şimdiden teşekkür ederim.

    5 Ağustos 2011 Cuma 13:23
  • v2_tblwrk_odev tablosunda yazıklarınızan başka kolon var mıdır?
    http://www.mehmetx.com
    5 Ağustos 2011 Cuma 13:57
    Yanıtlayıcı
  • evet var mehmet bey,

    id (otomatiksayı) ve recordtime alanı var.

    olmasaydı çözüm nasıl olurdu.?

    5 Ağustos 2011 Cuma 14:22
  • SELECT INTO ile yapabilirdiniz
    http://www.mehmetx.com
    5 Ağustos 2011 Cuma 14:23
    Yanıtlayıcı
  • teşekkür ederim.

    5 Ağustos 2011 Cuma 14:48
  • çoklu satır eklemek için vb de nasıl düzenleme yapabiliriz?
    5 Ağustos 2011 Cuma 15:19
  • anlaşılan o ki asp.net ile çok sayıda satır (veri) tek bir komutla kaydedilemiyor. :( bilgisayar dünyasına olan güvenim sarsıldı.

    yukarıda önay yalçıner' in verdiği cevapta

    "insert a1, a2, a3 Tablo1 values (@d1, @d2, @d3); insert a4, a5 Tablo2 values (@d4, @d5)" 

    ifadesi tablo1 e d1, d2, d3 değerlerini, tablo2 ye de d4, d5 değerlerini ekliyor diye yorumladım. doğru mudur?

    6 Ağustos 2011 Cumartesi 01:42
  • Hayır etkilenen Tablo1 de a1, a2, a3, Tablo2 de ise a4,a5 alanları. Bu alanlara değerleri parametre olarak verirsiniz diye bir model yazmıştım. Ancak sizin istediğiniz farklı bişeymiş, 

    Bir sorgunun sonucunda dönen satırları başka bir tabloya eklemek istiyorumuşsunuz.

    Bir veriyi iki ayrı tabloda saklama diye bir mantığı uygun görmüyorum. Gerektiğinde Viewler ile rahatlıkla alabileceğiniz verileri neden bir başka tabloya kayıt ettiğinizi bilemiyorum. Bu durumda bilgisayar dünyasının da size güveni sarsılabilir, kaldı ki parametre yerine sorgunuza &(ampersant) birleştirme operatörü ile değerler ekliyorsunuz.

    Sizin istediğiniz şeyin modeli şu şekilde;

    insert into Tablom (a,b,c) from
    (
    	(select x,y,z from Tablo1 where q=@p1)
    	union
    	(select k,l,m from Tablo2 where q=@p2)
    )
    


     

     

     




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

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



    6 Ağustos 2011 Cumartesi 05:43
    Moderatör
  • cevabınız ve ilginiz için teşekkür ederim sayın önay yalçıner. evet model olarak verdiğiniz örnek istediğimi anlatıyor.

    ancak union la birleştirdiğimiz sorguların sonucunda iki ya da daha fazla satır (kayıt) dönerse bunları tek bir komutla yazdırma şansımız var mı? yoksa tek tek (genelde gördüğüm  -bu- dur) mi kaydedeceğiz?

    tabi bir seçenek (akla gelen ama ben uygulayamayabilirim) daha var sorgu sonucunda gelen satırları bir tanımlama parametresine göre tanıtıp kaydettirme gibi bir yol daha olabilir? ama sanırım oldukça zor. nerdeyse hiç örneğini göremedim.

    6 Ağustos 2011 Cumartesi 06:15
  • ancak union la birleştirdiğimiz sorguların sonucunda iki ya da daha fazla satır (kayıt) dönerse bunları tek bir komutla yazdırma şansımız var mı? yoksa tek tek (genelde gördüğüm  -bu- dur) mi kaydedeceğiz?

    Önay Bey' in vermiş olduğu örnek ile UNION ile birleştirilen sorgulardan kaç satır dönerse dönsün tamamı tabloya ekleyecektir. 

    http://www.mehmetx.com
    6 Ağustos 2011 Cumartesi 07:11
    Yanıtlayıcı
  • cevabınız için teşekkür ederim. bu bilgiyi öğrenmem iyi oldu. daha iyi anlamak için soruyorum. gelen satırları olduğu gibi ekler. (doğru mu anlıyorum)

    şimdi biz gelen kayıtlara birşeyler ekleyip tabloya kayıt yapmak istesek ne yapabiliriz? örneğin

    Dim dtbsConn As New OleDbConnection(ConfigurationManager.ConnectionStrings.Item("dtbsConnectionString").ConnectionString.ToString)
    
    
    
    Dim strSQL As String
    
    dim id as integer
    
    id = textbox1.text
    
    dtbsConn.Open()
    
    strSQL = "insert into Tablom (a,b,c,d) from(
    
    	(select x,y,z from Tablo1 where q=@p1)
    
    	union
    
    	(select k,l,m from Tablo2 where q=@p2)
    
    )"
    
      
    
    Dim OleDbComm As New OleDbCommand(strSQL, dtbsConn)
    
      
    
    OleDbComm.ExecuteNonQuery()
    
      
    
    OleDbComm.Dispose()
    
    dtbsConn.Close()
    
    

    id yi gelen herbir kayda (satıra) ekletebilir miyiz?

    6 Ağustos 2011 Cumartesi 08:20
  • strSQL = "insert into Tablom (a,b,c,d) (
    
    	(select x,y,z, @id from Tablo1 where q=@p1)
    
    	union
    
    	(select k,l,m, @id from Tablo2 where q=@p2)
    
    )"
    
    OleDbcomm.Parameters.AddWithValue("@id", textBox1.Text)
    

    şeklinde id değerini her bir satıra ekleyebilirsiniz.
    http://www.mehmetx.com
    6 Ağustos 2011 Cumartesi 13:30
    Yanıtlayıcı
  • teşekkür ederim sayın mehmet yıldız,

    deneyeceğim.

    6 Ağustos 2011 Cumartesi 13:44
  • maalesef sayın mehmet beyin verdiği cevap çalışmadı.
    10 Ağustos 2011 Çarşamba 04:30
  • strSQL = "insert into Tablom (a,b,c,d) select x,y,z, @id from Tablo1 where q=@p1;"
    

    formunda tek sorgu çalıştı. çoklu satırı eklemesi açısından güzel sonuç verdi.
    10 Ağustos 2011 Çarşamba 05:46
  • strSQL = "insert into Tablom (a,b,c,d) (
    
    	(select x,y,z, @id from Tablo1 where q=@p1)
    
    	union
    
    	(select k,l,m, @id from Tablo2 where q=@p2)
    
    )"
    
    OleDbcomm.Parameters.AddWithValue("@id", textBox1.Text)
    

    şeklinde id değerini her bir satıra ekleyebilirsiniz.
    http://www.mehmetx.com

    bu sorgudan nasıl bir hata aldınız? Test ettim ben, hatasız çalışmaktadır.
    http://www.mehmetx.com
    10 Ağustos 2011 Çarşamba 07:03
    Yanıtlayıcı
  • ilginiz için teşekkür ederim sayın mehmet yıldız,

    üstteki mesajda da belirttiğim gibi strSQL = "insert into Tablom (a,b,c,d) select x,y,z, @id from Tablo1 where q=@p1;" formu diye tanımladım ama aslında sorgum daha karmaşık yapıdadır. tüm ihtimalleri tek tek denemeye çalıştım. (direk uygulamam üzerinde karmaşık sorgularıma uyguluyorum.)
    hatırladığım kadarıyla union ile birleştirince insert into söz dizimi hatası gibi bir hata verdi. çok satırlı bir kod dizesi olduğu için bazı ayırıcıları (satır ayırcı anlamında) yanlış koymuş olabilirim. parantezler varken ve yokken denedim, olmaması doğru gibi geldi.
    cevabım sizin cevabınız işe yaramadı, anlamında değil benim uygulayışımda olmadı anlamındadır. sizin öneriniz sayesinde fikir sahibi olmuş ve uygulamışımdır. müteşekkirim.
    birleştirme işine gelince union ile birleştirilmiş tek bir sorguyu çalıştırmak yerine, peşpeşe iki ve daha fazla sayıdaki sorguyu çalıştıracak kod dizisi hazırlamak daha kolay geldiği için onu tercih ettim. (belki de beceremedim. zaten öğrenmeye ve uygulamaya çalışıyorum.)

    iyi çalışmalar dilerim, sayın mehmet yıldız.

    10 Ağustos 2011 Çarşamba 21:55