none
SQL formdan oluşan bir ürün id si ile aynı formdan diğer bir tabloya veri eklemek RRS feed

  • Soru

  • UrunTablosu

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

    UrunID
    UserId
    UrunIsim
    UrunAciklama
    UrunTur
    Tarih



    UrunOzellikTablosu

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

    UrunID
    UrunIsim
    Marka
    Miktar

    Merhabalar işin içinden çıkamadığım bir sorum olucak yardımıznıza ihtiyacım var yukarıdaki gibi iki sql tablom var.
    Kullanıcın sitemde urun ekleme linkine basınca bir form hazırlamak istiyorum.Bu formdan girdiği kayıtlarda;

    Formdan ÜrünTablosu na kayıtları girerken, aynı anda form içinde bu ürüne ait istediği sayıda marka ismini kullanıcı kendisi text kutusu oluşturup verilerini girip (burda javascript kullanmam gerekıcek galıba onuda arastırıcam bılgısı olan varsa sevınırım) bu marka verilerinide Ürüntablosunda oluşan yeni ürünid si ile bire sonsuz ilişkili UrunOzellikTablosuna kayıt etsin istiyorum.

    25 Nisan 2013 Perşembe 11:42

Yanıtlar

  • Ayni anada diğer leri içinde insert sorgusu yazabilirsin rahatlıkla.

    Ör: insert in to uruntablo ... ScopeIdentyl ID al

    ve sonra

    insert into UrunOzelleik (urunIID,,,,) VAlues(gelnID,);

    insert into UrunOzelleik (urunIID,,,,) VAlues(gelnID,);

    insert into UrunOzelleik (urunIID,,,,) VAlues(gelnID,);// 3 tane 4 tane dinamik olarak insert cumlesi olsutur ve yazdir......

    25 Nisan 2013 Perşembe 15:52
  • Merhaba burcukara;

    Öncelikle, tek bir INSERT INTO komutuyla birden fazla satır eklemek için aşağıdaki söz dizimi kullanılabilir:

    INSERT INTO Table ( Column1, Column2 ) VALUES
    ( Value1, Value2 ), ( Value1, Value2 ), (Value1, Value2)

    Bunu bir kenara not alalım. Bundan sonrasını programlamayla çözmek gerekir. Yani yukarıdaki şekilde bir sorguyu, girilen marka sayısına göre program yazarak oluşturacağız.

    Şimdi, anlattığınız senaryoya göre en kolay yol, "Ekle" butonuna tıklandığında, önce gereken sorguyu bir string değişkenine aktarmak daha sonra tırnak içinde sorgu yerine bu string değerini kullanmak olur (Aşağıdaki kodda son satır). Bir for each döngüsüyle, her bir textbox için string değişkenine fazladan değer ekleyebilirsiniz.

    Hangi dili kullanıyorsunuz bilmiyorum ama anlaşılması kolay olduğundan VB ile bir örnek yazmaya çalışayım:

    'Marka için olan TextBox'larin Name degerini Marka1, Marka2 gibi ayarlayalim. 'Bu sekilde kontrol edilen bir TextBox'in markaya ait olup olmadigini anlayacagiz. Dim strQuery As String Dim UrunID, UrunIsim, Marka, Miktar As String Dim ctl As Control UrunID = txtUrunID.Text UrunIsim = txtUrunIsim.Text Miktar = txtMiktar.Text strQuery = "INSERT INTO UrunOzellikTablosu VALUES " For Each ctl in Me.Controls 'Sayfadaki tüm ögeleri kontrol edecegiz If TypeOf ctl Is TextBox And Left(ctl.Name, 5) = "Marka" Then 'Kontrol edilen öge TextBox'mi ve marka için mi? If ctl.Text <> "" Then 'TextBox içerisine deger girilmis mi? Marka = ctl.Text strQuery = strQuery + "(" + UrunID + ", " + UrunIsim + ", " + Marka + ", " + Miktar + ")," End If End If Next 'For döngüsü bittiginde sorgunun en sonunda fazladan bir virgül kalacak, bunu kaldiralim. strQuery = Left(strQuery, (Len(strQuery)-1))

    'Sorgu komutunu çalistiralim DoCmd.RunSQL strQuery

    Özetle, DoCmd fonksiyonuyla iki şekilde sorgu çalıştırılır;

    DoCmd.RunSQL "SELECT * FROM Tablo1"

    ya da

    strQuery = "SELECT * FROM Tablo1"

    DoCmd.RunSQL strQuery

    Siz sorgunuzu bir string değişkenine atayarak 2. şekli kullanma yoluna giderseniz problemi kolaylıkla çözebilirsiniz.

     

    Yukarıdaki kodda sözdizimi hatası olabilir, kontrol etmedim (Örneğin VB'de .Text kullanılmasına gerek yoktur). Ancak mantığını anlarsanız problemi çözmenize yardımcı olacaktır.  

     


    Size yardımcı olabildiysem lütfen sol taraftaki "Yardımcı Olarak Oyla" üçgenine tıklayın.


    29 Nisan 2013 Pazartesi 17:59

Tüm Yanıtlar

  • IDENT_CURRENT ve ya SCOPE_IDENTITY fonksiyonlarını kullanarak ürün tablonuza eklediğiniz kayda ait id ye ulaşabilirsiniz. Bu fonksiyonları incelerseniz hangisinin size uygun olduğunu uygulamanıza göre karar verebilirsiniz.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    25 Nisan 2013 Perşembe 12:08
  • bu konunun uzmanı deılım ancak bıldıım kadarıyla SCOPE_IDENTITY son gırılen verınınid sini veriyor  bunu çözdük ancak formdan girdiğim ürün için gelen bu id ile yine aynı form içinden seçilmiş ürün özelliktablosuna girilecek örneğin;

    kulalnıcın form içinde belirlediği oluşturduğu inputlara girdii veriler

    Marka1: x

    marka2:y

    marka3:z

    ürünözelliktablosuna nasıl eklenicek

    ben sql tablosuna bir sorguda bir satır veri eklemyi biliyorum ancak bu formdan birkaç satır veri gelicek

    yradımın için tesekkurler....

    25 Nisan 2013 Perşembe 12:25
  • Ayni anada diğer leri içinde insert sorgusu yazabilirsin rahatlıkla.

    Ör: insert in to uruntablo ... ScopeIdentyl ID al

    ve sonra

    insert into UrunOzelleik (urunIID,,,,) VAlues(gelnID,);

    insert into UrunOzelleik (urunIID,,,,) VAlues(gelnID,);

    insert into UrunOzelleik (urunIID,,,,) VAlues(gelnID,);// 3 tane 4 tane dinamik olarak insert cumlesi olsutur ve yazdir......

    25 Nisan 2013 Perşembe 15:52
  • 3-4 tane ınsert cumlesi yazabılırsın dedınız ya ıste orda takılıyorum belli sayıda giridi olsaydı bunu yapabılırdım ama sayı belli deıl...cunku formdan kac veri geleceğini bilmiyorum....bu gırdi sayısını kullanıcı kendısı belırlıcek javascrıptle input kutusu ıstedıı sayıda olusturup bunlara değer girip göndericek dolayısıyla kaç input oluşucak oluşan bu inputlardan veriyi nasıl çekebilirim bu konuda bılgım yeterlı deıl malesef.....
    25 Nisan 2013 Perşembe 16:54
  • Tamam kullanıcının istediği kadar kadar insert olsuturcan.kullanıcı 5 istiyo 5 

    on istiyorsa 10 sorun nerde anlamdım..

    25 Nisan 2013 Perşembe 17:08
  • biraz programlama  bılgımde eksik var galıba uğrasıp yapmaya calıscam ..kulanıcının ıstedıı ınsert sayısısnı nasıl belırlıceımı çözümleyemedım sanırım ...biraz uğrasayım ..olmassa kodları burdan yazıp yardımınızı ısterım tesekkurler zaman ayırdıınız ıcın...
    25 Nisan 2013 Perşembe 17:14
  • Merhaba burcukara;

    Öncelikle, tek bir INSERT INTO komutuyla birden fazla satır eklemek için aşağıdaki söz dizimi kullanılabilir:

    INSERT INTO Table ( Column1, Column2 ) VALUES
    ( Value1, Value2 ), ( Value1, Value2 ), (Value1, Value2)

    Bunu bir kenara not alalım. Bundan sonrasını programlamayla çözmek gerekir. Yani yukarıdaki şekilde bir sorguyu, girilen marka sayısına göre program yazarak oluşturacağız.

    Şimdi, anlattığınız senaryoya göre en kolay yol, "Ekle" butonuna tıklandığında, önce gereken sorguyu bir string değişkenine aktarmak daha sonra tırnak içinde sorgu yerine bu string değerini kullanmak olur (Aşağıdaki kodda son satır). Bir for each döngüsüyle, her bir textbox için string değişkenine fazladan değer ekleyebilirsiniz.

    Hangi dili kullanıyorsunuz bilmiyorum ama anlaşılması kolay olduğundan VB ile bir örnek yazmaya çalışayım:

    'Marka için olan TextBox'larin Name degerini Marka1, Marka2 gibi ayarlayalim. 'Bu sekilde kontrol edilen bir TextBox'in markaya ait olup olmadigini anlayacagiz. Dim strQuery As String Dim UrunID, UrunIsim, Marka, Miktar As String Dim ctl As Control UrunID = txtUrunID.Text UrunIsim = txtUrunIsim.Text Miktar = txtMiktar.Text strQuery = "INSERT INTO UrunOzellikTablosu VALUES " For Each ctl in Me.Controls 'Sayfadaki tüm ögeleri kontrol edecegiz If TypeOf ctl Is TextBox And Left(ctl.Name, 5) = "Marka" Then 'Kontrol edilen öge TextBox'mi ve marka için mi? If ctl.Text <> "" Then 'TextBox içerisine deger girilmis mi? Marka = ctl.Text strQuery = strQuery + "(" + UrunID + ", " + UrunIsim + ", " + Marka + ", " + Miktar + ")," End If End If Next 'For döngüsü bittiginde sorgunun en sonunda fazladan bir virgül kalacak, bunu kaldiralim. strQuery = Left(strQuery, (Len(strQuery)-1))

    'Sorgu komutunu çalistiralim DoCmd.RunSQL strQuery

    Özetle, DoCmd fonksiyonuyla iki şekilde sorgu çalıştırılır;

    DoCmd.RunSQL "SELECT * FROM Tablo1"

    ya da

    strQuery = "SELECT * FROM Tablo1"

    DoCmd.RunSQL strQuery

    Siz sorgunuzu bir string değişkenine atayarak 2. şekli kullanma yoluna giderseniz problemi kolaylıkla çözebilirsiniz.

     

    Yukarıdaki kodda sözdizimi hatası olabilir, kontrol etmedim (Örneğin VB'de .Text kullanılmasına gerek yoktur). Ancak mantığını anlarsanız problemi çözmenize yardımcı olacaktır.  

     


    Size yardımcı olabildiysem lütfen sol taraftaki "Yardımcı Olarak Oyla" üçgenine tıklayın.


    29 Nisan 2013 Pazartesi 17:59