ASP DE ÇOKLU KAYIT İŞLEMİ

Kodla Büyü

furkanefe

Site Gezgini
Mesajlar
47
10.jpg


Arkadaşlar iki haftadır uğraşıpta yapamadığm bir konu. Nette bütün kaynakları taradım ama tam sonuç alamadım.


Aspde çoklu kayıt güncelleme. e-okuldaki öğrenci notlarını düşünün . Y1 Y2 Y3 S1 tüm sınıfın notlarını aynı anda eklenmesi yada güncellenmesi işlemi...
Yardımcı olursanız çoook mutlu olacağız..
 
Konuyu biradaha açarmısın dicema ma ben php biliyorum . Sen genede aç belki sql tarafında fikirimiz olur.
Fakat sana şunu söyelyebilrimki araştırman gereken konu sql
uygun bir sql cümlesi yazman lazım bunu script dili ile pek ilgisi yok tahminim
 
sql ile çok alternatifler denedim. Amasonuç asla alamadım...
örneğin

<%@ Language="VBScript" %>
<% Option Explicit %>




<!--#include file="oktayconn.asp"-->

<%
Dim i,rS,Mesaj
If Request.Form("islem" )="Guncelle" Then
For i = 0 To 683
Set rS = baglanti.Execute("Update users Set not1='" & Request.Form("not1" & i) & "',not2='" & Request.Form("not2" & i) & "',not3='" & Request.Form("not3" & i) & "',not4='" & Request.Form("not4" & i) & "' WHERE uID=" &i)
Next
End If
Mesaj="Tebrikler,notları başarıyla güncellediniz :)"
%>


<%
Response.Redirect("rapornot.asp")
 
form sayfamda notları çekiyorum textfield ile.... Son sütünda ortalama hesaplatıyorum. Ancak hatalar alıyorum....
 
Msyql ile çalışırken sunu yapardım genelde

WHERE UID IN ('23,23,45,67,....');

$idler='23,23,45,67,....'; de kullanmak mükün
burda WHERE UID IN ($idler) şeklindede kullnılabiliyor
belki fikir veriri

Ayrıca senin guncellemek istediğin uid aralığı 0 ile 683 arsındamı ? arada boş geçen veya güncellemek istediğin bir satır yokmu
WHERE uid BETWEEN 0 AND 683
BETWEEN bunun mssql deki alternatifini karşılığını bul dene


kolay gelisin
 
Benim sıkıntım aslında sql ile olan kısımda değil..... Toplu güncelleme veya toplu kayıt ..... Nette birçok örnekleri inceledim, irdeledim, fakat tam sonuç malesef yok....

örnekte kayıtları rahatlıkla ekletebiliyorum. Ancak ortalama hesaplatırken problem yaşıyorum.... Yukarıdaki örneğimde access ortalama sütünun kayıt türünü "sayi" yaptığımda kodlarımda hata veriyor....
 
Hocam gözünü seveyim , başlıkta ortalamadan bahsetmemişsin , mesajlarındada :D
Mesajı okuyanları farklı yerlere yönderiyorsun ama asıl sorununu yazmıyorsun.

Ayrıca sorularında konuyu açmıyorsun. Unutmaki okuyan kişi oknu hakkında hiçbirşey bilmiyor. iyi detaylandırmak lazım . Sen anlatmak için emek harcamazsaz okuyan hiç emek harcamaz.

Ortalamayı vertabanındaki bir alandamı saklayacaksın , yoksa veritabanından çektiyin notların ortalamasını ekranamı azacaksın ?

Ayrıca hatamesajımı alıyorsun yoksa boş sonuçmu dönüyor ?
 
ASP İLE TOPLU KAYIT EKLEME, GÜNCELLEME İŞLEMLERİ ÖRNEĞİ ELİNDE OLAN VAR MI? VEYA BU UYGULAMA İLE UĞRAŞMIŞ ARKADAŞLAR... DESTEĞİNİZE İHTİYACIM VAR.
 
Hocam bu şekilde kayıt yapıyor mu? Ya da kayıtta da mı sorun var?

eğer sorun ortalama ise

cint(rs("not1")) +cint(rs("not2")) gibi kullanın...

Not: Cint (ifade) :Parantez içinde verilen ifadeyi Integer veri tipine dönüştürür.
 
s_kajmeran hocam deniyorum aynısını ama bu seferde null uyarısı veriyor.. Sanırım problem

<%
Dim i,rS,Mesaj
If Request.Form("islem" )="Guncelle" Then
For i = 0 To 683
Set rS = baglanti.Execute("Update users Set not1='" & Request.Form("not1" & i) & "',not2='" & Request.Form("not2" & i) & "',not3='" & Request.Form("not3" & i) & "',not4='" & Request.Form("not4" & i) & "' WHERE uID=" &i)
Next
End If
Mesaj="Tebrikler,notları başarıyla güncellediniz "
%>

veri türünü sayı yapınca yukarıdaki Set rS=baglanti.Excute satırındaki tanımlamada sıkıntı var gibi. Oradaki tanımlama string üzerine yapılan bir tanımlama.... işin içinden çıkamadım..
 
hocam veri tabanını kontrol edin bakalım kayıtlarınız yazılıyor mu?

yada hata veriyorsa hatayı buraya yazar mısınız?
 
senin odaklanmak gereken konu belli oldu veritürleri konusunda bir sıkıntın var
ayrıca bir dip not
ortalamayı sql içinde yaparsan her yönden iyi olur gözünde büyütme araştır bul
AVG sanırım


kolay gelsin
 
Microsoft VBScript çalýþma hatasý hata '800a005e'

Geçersiz Null kullanýmý: 'Cdbl'

sorguoktay/notliste2.asp, satır 150

hata mesajı
 
Buradaki problem msaccess te veri türü sayı yapınca oluyor.... Metin olduğu zamanda "tür uyuşmazlığı" hatası veriyor. Eğer string değerlerini Cdbl veya Cint ile çevirerek yaparsam "Null kullanýmý: 'Cdbl' " hata mesajını alıyorum. Sayı veri türünü
 
10.jpg



Yukarıda mevcut kodlarla notları ekliyor, güncelliyor, ancak sayfa ilk açıldığında, notlar boş olduğunda malesef yapılmıyor.
kodlar..... notları eklemesi için post ettiğim kodlar:
<%@ Language="VBScript" %>
<% Option Explicit %>




<!--#include file="oktayconn.asp"-->

<%
Dim i,rS,Mesaj
If Request.Form("islem" )="Guncelle" Then
For i = 683 To 1000
Set rS = baglanti.Execute("Update users Set not1='" & Request.Form("not1" & i) & "',not2='" & Request.Form("not2" & i) & "',not3='" & Request.Form("not3" & i) & "',not4='" & Request.Form("not4" & i) & "' WHERE uID=" &i)
Next
End If
Mesaj="Tebrikler,notları başarıyla güncellediniz :)"
%>


<%
Response.Redirect("rapornot.asp")
%>


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

Eğer notları access te girerek yayınlarsam hata almıyorum..... ve aşağıdaki gibi problemsiz. Hesaplamayıda yapıyor, notları da gösteriyor.

20.jpg
 
ASP İLE TOPLU KAYIT EKLEME, GÜNCELLEME İŞLEMLERİ ÖRNEĞİ ELİNDE OLAN VAR MI? VEYA BU UYGULAMA İLE UĞRAŞMIŞ ARKADAŞLAR... DESTEĞİNİZE İHTİYACIM VAR.
 
hocam şart koyun o zaman

<%dim sonuc
if rsMem("not1")<>"" or rsMem("not2")<>"" or rsMem("not3")<>"" or rsMem("not4")<>"" then
sonuc=(Cdbl(rsMem("not1")+Cdbl(rsMem("not2")+Cdbl(rsMem("not3")+Cdbl(rsMem("not4"))/4

Response.write sonuc
else
response.write("Tüm alanlar girilmediğinden ortalama çıkarılamadı")
end if
%>

veya


bolum=0
sonuc=0

if rsMem("not1")<>"" then
sonuc=sonuc+Cdbl(rsMem("not1")
bolum=bolum+1
end if

if rsMem("not2")<>"" then
sonuc=sonuc+Cdbl(rsMem("not2")
bolum=bolum+1
end if

if rsMem("not3")<>"" then
sonuc=sonuc+Cdbl(rsMem("not3")
bolum=bolum+1
end if

if rsMem("not4")<>"" then
sonuc=sonuc+Cdbl(rsMem("not4")
bolum=bolum+1
end if

if bolum<>0 then
ortalama=sonuc/bolum
response.write(ortalama)

else
response.write("hiç bir alan doldurulmadığından ortalama alınamadı"

end if

sanırım böyle olmalı... Kolay gelsin...
 
Hocam beni büyük bir dertten kurtardın... Teşekkür ederim. Şimdilik bu şekilde çalışmama devam edeceğim.... :+1:

Yalnız benim bu uygulamamla nette çoğu zaman hemen post olmuyorn.... Sayfa görüntülenemiyor diye hata veriyor. Topluca girdiğimde refresh yaparak ancak girebiliyorum. Yani özetle ağır çalışıyor ve çoğu zaman kaydetmekte güçlük çekiyor. Acaba ASP İLE TOPLU KAYIT EKLEME, GÜNCELLEME İŞLEMLERİ ÖRNEĞİ ELİNDE OLAN VAR MI? VEYA BU UYGULAMA İLE UĞRAŞMIŞ ARKADAŞLAR... DESTEĞİNİZE İHTİYACIM VAR.
varsa yardımlarını bekleriz...
 
hocam sizin kodlarda sıkıntı yok... şu açtıığınız kayıt setlerini, ve bağlantıları kapatın işlemleriniz bitince... sıkıntı olmaması lazım...
 
s_kajmeran hocam....
Bu uygulamamda birsıkıntım daha var. Mesela veri tabanımda 300 öğrencim ve 7 şubem var. Ben örneğin her sınıfın sayfasını ayrı ayrı oluşturmak zorunda kaldım. Çünkü ben bir sınıfta güncelleme yaparken tüm notları güncelliyordu... Daha doğrusu tüm okulu siliyordu o sınıf hariç..... Aşağıdaki kodda For i = 683 To 1000 kısmını bu durumu çözmek için nasıl revize edebilirim.
<%
Dim i,rS,Mesaj
If Request.Form("islem" )="Guncelle" Then
For i = 683 To 1000
Set rS = baglanti.Execute("Update users Set not1='" & Request.Form("not1" & i) & "',not2='" & Request.Form("not2" & i) & "',not3='" & Request.Form("not3" & i) & "',not4='" & Request.Form("not4" & i) & "' WHERE uID=" &i)
Next
End If
Mesaj="Tebrikler,notları başarıyla güncellediniz "
%>
 
s_kajmeran hocam....
Bu uygulamamda birsıkıntım daha var. Mesela veri tabanımda 300 öğrencim ve 7 şubem var. Ben örneğin her sınıfın sayfasını ayrı ayrı oluşturmak zorunda kaldım. Çünkü ben bir sınıfta güncelleme yaparken tüm notları güncelliyordu... Daha doğrusu tüm okulu siliyordu o sınıf hariç..... Aşağıdaki kodda For i = 683 To 1000 kısmını bu durumu çözmek için nasıl revize edebilirim.
<%
Dim i,rS,Mesaj
If Request.Form("islem" )="Guncelle" Then
For i = 683 To 1000
Set rS = baglanti.Execute("Update users Set not1='" & Request.Form("not1" & i) & "',not2='" & Request.Form("not2" & i) & "',not3='" & Request.Form("not3" & i) & "',not4='" & Request.Form("not4" & i) & "' WHERE uID=" &i)
Next
End If
Mesaj="Tebrikler,notları başarıyla güncellediniz "
%>
 
furkanefe' Alıntı:
s_kajmeran hocam deniyorum aynısını ama bu seferde null uyarısı veriyor.. Sanırım problem

<%
Dim i,rS,Mesaj
If Request.Form("islem" )="Guncelle" Then
For i = 0 To 683
Set rS = baglanti.Execute("Update users Set not1='" & Request.Form("not1" & i) & "',not2='" & Request.Form("not2" & i) & "',not3='" & Request.Form("not3" & i) & "',not4='" & Request.Form("not4" & i) & "' WHERE uID=" &i) Next
End If
Mesaj="Tebrikler,notları başarıyla güncellediniz "
%>

veri türünü sayı yapınca yukarıdaki Set rS=baglanti.Excute satırındaki tanımlamada sıkıntı var gibi. Oradaki tanımlama string üzerine yapılan bir tanımlama.... işin içinden çıkamadım..
veritabanınızdaki not1 , not2 not3 ve not4 alanları integer olarak tanımlanmış sanırım.
request.form("not1") ile çektiğiniz zaman string olarak alıyor olabilir.

Önerim sql'i oluşturmadan önce
not1_sayi = int(request.form("not1"))

şeklinde formunuzdaki değerleri sayı tipine dönüştürmeniz ve
sql'i kurarken sayı değerlerini set ederken tek tırnak (') içinde yazmamalısınız.
 
hocam bir tablo yapın sınıflar_tablosu...
sınıf_id-şube_adı


diğer tablonuza; öğrenci tablonuza
öğr_adi-not1-not2-not3-not4-şube_adi


açarken

mesela sınıflar yazıyor 1-2-3-4 vs...
siz bunlara link verin; mesela sınıflar tablomuza..

<%Set vy=Server.CreateObject("ADODB.Connection")
vy.open "Provider=Microsoft.jet.oledb.4.0;data source="&yol
set kd=Server.CreateObject("Adodb.Recordset")
sql="Select * from siniflar_tablosu order by şube_adi desc"
kd.open sql,vy, 1,3
if kd.eof or kd.bof then
Response.write("Henüz sınıf eklenmemiş")
else
do while not kd.eof %>
<a href="sayfa.asp?deger=<%=kd("şube_adi")%>><%=kd("şube_adi")%></a>
<% kd.movenext
loop
end if
kd.close
set kd=nothing
set vy=nothing %>


şimdi 4 yazana basınca id numarası neyse diğer sayfadan onu alıp işlem yaptırmalı veya onu göstermeli; şöyleki...

<%deger=sqldegistir(trim(request.QueryString("deger")))

Set vy=Server.CreateObject("ADODB.Connection")
vy.open "Provider=Microsoft.jet.oledb.4.0;data source="&yol
Set kd=vy.execute("Select * from ogrenci where şube_adi="&deger&"")
if kd.eof or kd.bof then
response.write("sınıfa öğrenci kaydı yapılmamış"
else
.
.
.
işlemleriniz
.
.
.
end if%>

basitleştirerek yazdım umarım anlaşılır olmuştur...

Mantık şu; öğrencileri kaydederken tabloda sınıf bölümüne sınıfınıda yazıyoruz... Biz sınıflar bazında işlem yapacağız 1-2-3 vs sınıfları gösterirken herbirine link veriyoruz mesela 4 nolu linke basınca öğrenci tablosunda sınıf alanı 4 olanları bulup bize gösteriyor
Select * from ogrenci where şube_adi="&deger&""

sql cümlemizde where le şube adı bizim seçtiğimiz olan şubeleri listeletiyoruz...

Karışık oldu farkındayım ama umarım işinizi görür... kolay gelsin...
 
Peki sayın hocam bu şekilde yaptık. Benim notları ekleyebilmem için for döngüsünde nasıl bir yapı kullanmalıyım.
 
<%
Dim i,rS,Mesaj
If Request.Form("islem" )="Guncelle" Then
i=0
do while not rs.eof
Set rS = baglanti.Execute("Update users Set not1='" & Request.Form("not1" & i) & "',not2='" & Request.Form("not2" & i) & "',not3='" & Request.Form("not3" & i) & "',not4='" & Request.Form("not4" & i) & "' WHERE uID=" &i)
i=i+1
loop
End If
Mesaj="Tebrikler,notları başarıyla güncellediniz "
%>
 
s_kajmeran bu son yaptığında hata veriyor....


ANcak en başta yaptığında da
<%dim sonuc
if rsMem("not1")<>"" or rsMem("not2")<>"" or rsMem("not3")<>"" or rsMem("not4")<>"" then
sonuc=(Cdbl(rsMem("not1")+Cdbl(rsMem("not2")+Cdbl(rsMem("not3")+Cdbl(rsMem("not4"))/4

Response.write sonuc
else
response.write("Tüm alanlar girilmediğinden ortalama çıkarılamadı")
end if
%>


1) Dört notun dördünü girersem kayıt yapıyor. eksik girersem girdiğim notu kaydetmiyo...
2) Dört notun dördünü girdiğimde güncellebutonuna bastığımda kaydediyor ama veri türü uyuşmazlığı hatası vererek sayfa açılmıyor diyor. Ama refresh yaptığımda kaydetmiş olduğunu görüyorum....


beni bu dertten kurtar.......
 
Elinde ASPdde toplu veri güncelleme, ekleme ile ilgili örnek olan varsa, paylaşırsa çok mutul olucaz....
 
Güncellenecek verilerin dökümü
<form id="form1" name="form1" method="post" action="personel_bilgi_isle.asp">
<table border="1" class="KT_tngtable">
<tr>
<td align="center" valign="middle">Sıra</td>
<td width="354" align="center" valign="middle">Adı Soyadı</td>
<td width="200" align="center" valign="middle">TC Kimlik No</td>
<td width="42" align="center" valign="middle">Görev Yeri</td>
<td width="44" align="center" valign="middle">Kadro Ünvanı</td>
<td width="144" align="center" valign="middle"><p align="center">İlk Atama Tarihi (gün/ay/yıl)<br />
(gg/aa/yyyy)
</p></td>

</tr>
<% dim sayac
dim per_id
dim grv_yeri
dim kdr_unv
dim ilk_atm
sayac=0 %>
<% While ((Repeat1__numRows <> 0) AND (NOT pers_listeleme.EOF))

sayac=sayac+1
grv_yeri="g"+cstr(sayac)
'texbox'ın adını oluşturuyor
kdr_unv="k"+cstr(sayac)
'texbox'ın adını oluşturuyor
ilk_atm="i"+cstr(sayac)
'texbox'ın adını oluşturuyor
per_id="p"+cstr(sayac) %>
'texbox'ın adını oluşturuyor
<tr bgcolor="#CCCCCC">
<td><%= sayac %></td>
<td><%=(pers_listeleme.Fields.Item("AdiSoyadi").Value)%>
<input type="hidden" name="<%= per_id %>" value="<%=(pers_listeleme.Fields.Item("snv_pers_id").Value)%>" id="hiddenField" /></td>
<td><%=(pers_listeleme.Fields.Item("TC_Kimlik_No").Value)%></td>
<td><label>
<select name="<%= grv_yeri %>" id="select">
<%
While (NOT kurumlar.EOF)
%>
<option value="<%=(kurumlar.Fields.Item("kur_id").Value)%>"
<% If (kurumlar.Fields.Item("kur_id").Value)=cint( Session("kt_login_id")) Then %>
selected="selected"
<% End If %>
><%=(kurumlar.Fields.Item("kur_ad").Value)%></option>
<%
kurumlar.MoveNext()
Wend
If (kurumlar.CursorType > 0) Then
kurumlar.MoveFirst
Else
kurumlar.Requery
End If
%>
</select>
</label>
</td>
<td><label>
<select name="<%= kdr_unv %>" id="select2">
<%
While (NOT kadro_unvani.EOF)
%>
<option value="<%=(kadro_unvani.Fields.Item("pers_tur_id").Value)%>"
<% If (kadro_unvani.Fields.Item("pers_tur_id").Value)=(pers_listeleme.Fields.Item("Kadro_Unvani").Value) Then %>
selected="selected"
<% End If %>

><%=(kadro_unvani.Fields.Item("pers_turu").Value)%></option>
<%
kadro_unvani.MoveNext()
Wend
If (kadro_unvani.CursorType > 0) Then
kadro_unvani.MoveFirst
Else
kadro_unvani.Requery
End If
%>
</select>
</label></td>
<td><p>
<label>
<input type="text"
<% tarih=(pers_listeleme.Fields.Item("ilk_atama_tar").Value)
gun=mid(tarih,1,2)
ay=mid(tarih,4,2)
yil=mid(tarih,7,4)
top_tar=gun+"/"+ay+"/"+yil
%>
value="<%=top_tar %>" name="<%= ilk_atm %>" size="12" maxLength="10"
onkeyup="validDate(this)" onblur="validDate(this)">


</label>
</p></td>


</tr>

<%
Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
pers_listeleme.MoveNext()
Wend
%> <tr>
<td colspan="6"><div align="center">
<input type="hidden" name="satir_say" value="<%= sayac %>" id="hiddenField4" />
<input name="isleme_gonder" type="submit" id="isleme_gonder" value="Bilgileri Güncelle" />
</div></td></tr>
</table> </form>

Güncellemenin işlenmesi
<% say_satir=Trim(Request.Form("satir_say")) %>
'post edilen sayfadaki toplam satır sayısını aldım.
<!--#include file="../Connections/vy1.asp" --><%
'veritabanı bağlantı kodu
for i=1 to say_satir
al_per_id="p"+cstr(i)
'formun bulunduğu sayfadaki textboxın adını buldurma
al_grv_yeri="g"+cstr(i)
'formun bulunduğu sayfadaki textboxın adını buldurma
al_kdr_unv="k"+cstr(i)
'formun bulunduğu sayfadaki textboxın adını buldurma
al_ilk_atm="i"+cstr(i)
'formun bulunduğu sayfadaki textboxın adını buldurma
%><br><%
persn_id=Trim(Request.Form(al_per_id))
'formdan gelen ve adı daha önce yukarıdaki kodla bulunan textbox içeriği alınır
gorev_yeri=Trim(Request.Form(al_grv_yeri))
'formdan gelen ve adı daha önce yukarıdaki kodla bulunan textbox içeriği alınır
kadr_unv=Trim(Request.Form(al_kdr_unv))
'formdan gelen ve adı daha önce yukarıdaki kodla bulunan textbox içeriği alınır
atama_tar=Trim(Request.Form(al_ilk_atm))
'formdan gelen ve adı daha önce yukarıdaki kodla bulunan textbox içeriği alınır
if atama_tar="" then

Set kayit = ODBC.Execute("UPDATE snv_personel SET Gorev_yeri="&gorev_yeri&", Kadro_Unvani="&kadr_unv&" WHERE snv_pers_id="&persn_id&"")

Else

tarih=cdate(atama_tar)
Set kayit = ODBC.Execute("UPDATE snv_personel SET Gorev_yeri="&gorev_yeri&", Kadro_Unvani="&kadr_unv&",ilk_atama_tar='"&(tarih)&"' WHERE snv_pers_id="&persn_id&"")

End If


next
Set kayit = nothing
'Kaydı tamamla ve mesaj gönder
ODBC.Close %>
 
BBNET
Geri
Üst