En iyi yanıtlayıcılar
SQL formdan oluşan bir ürün id si ile aynı formdan diğer bir tabloya veri eklemek

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.
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......
- Yanıt Olarak İşaretleyen Ali Rıza İnceoğlu 26 Nisan 2013 Cuma 05:59
-
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.
- Düzenleyen Kasım AKPINAR 29 Nisan 2013 Pazartesi 18:29
- Yanıt Olarak Öneren Ali Rıza İnceoğlu 30 Nisan 2013 Salı 06:27
- Yanıt Olarak İşaretleyen Ali Rıza İnceoğlu 6 Mayıs 2013 Pazartesi 13:39
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
-
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....
-
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......
- Yanıt Olarak İşaretleyen Ali Rıza İnceoğlu 26 Nisan 2013 Cuma 05:59
-
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.....
-
-
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...
-
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.
- Düzenleyen Kasım AKPINAR 29 Nisan 2013 Pazartesi 18:29
- Yanıt Olarak Öneren Ali Rıza İnceoğlu 30 Nisan 2013 Salı 06:27
- Yanıt Olarak İşaretleyen Ali Rıza İnceoğlu 6 Mayıs 2013 Pazartesi 13:39