Tam Sürümünü Görmek İçin : ASP dersleri ve hataları

E.J.T
16.08.2007, 10:36
merhaba arkadaslar oncelikle gelende asp site kuran arkadaslar bu sorunla karsilasir ben oncelikle bu sorunun

cevabini yanitlamak istedim buyurum


80004005 hatası çözüm önerileri

80004005 nolu hatayı alan kullanıcımıza sunulan çözüm önerileri: Belki işinize yarar diye burada da yayınlıyoruz.

Kullanıcımızdan gelen mesaj!
------------------------------------
Hata Tipi:Microsoft OLE DB Provider for ODBC Drivers
(0x80004005)[Microsoft][ODBC Microsoft Access Sürücüsü]
Güncelleştirilemiyor. Veritabanı veya nesne salt okunur./asp2/kaydet.asp,
line 13


2 sayfalık bi asp çalışmam vardı
1.sayfa sorunsuz çalışıyo
2.sayfaya 1.sayfadan aldığım texleri çağırdım
sonra bunları veri tabanına kaydederken yukarıdaki gibi bi sorun çıktı
yardım edebilirseniz sevinirim
sevgiler...


Bizim cevabımız:
------------------------
Öncelikle sitemizi kullandığınız ve bize mesaj gönderdiğiniz için teşekkürler. Aldığınız hata mesajının bir çok anlamı olabilir. Be de zaman zaman bu hatayı alıyorum Bu hatanın birkaç çözüm noktası vardır. Ben kodlarınızı görmeden bu konuda fikir yürütmem mümkün değil. Ancak birkaç durumu kontrol ediniz!

1- Bu hatayı veritabanınız bozuk olduğu için alıyor olabilirsiniz. MS Access programının Araçlar > Veritabanı Hizmet Programları > Veri Tabanı Düzenle ve Onar seçeneği mevcuttur. Buradan veritabanınızı onarmayı deneyin. Kesin olmamakla beraber bu işlemin verileriniz açısından bir sakıncası olmayacaktır. Ancak yine de veri tabanınızdaki veriler önemliyse yedek almayı ihmal etmeyiniz. Eğer onarma işlemi sonunda hala bu hatayı alıyorsanız. Veri tabanınızı yeniden oluşturmayı deneyiniz.

2- 1. adımdaki tüm işlemleri denediniz ve yine de durum değişmediyse. Kodlarınızı kontrol etmenizi öneririm. Zaman zaman ben de döngü içerisinde olmayan kayıtları listeletmeye çalıştığımda bu hatayı alırım. Bunun için eğer bir döngü kullanıyorsanız içerisinde kayıtın sonuna gelinip gelinmediğini ve eğer gelindiyse döngüyü sonlandırması için şu kodları kullanabilirsiniz :
<%if rs.eof then
exit for
end if
%>




3. İlk iki adımda söylediklerinizi kontrol ettim ancak hala sorun devam ediyor diyorsanız yapmanız gereken kayıtları kontrol etmek. Bazen veri tabanı özel karakterleri kayıt ettiğinde bu hatayı verebilir. Yani hatalı kayıt girişi kabul edilmiştir ve bundan dolayı da bu hatayı alıyorsunuzdur.

Eğer 3 adımda işinize yaramadıysa. 80004005 nolu hatayı Google da arayarak alternatif çözüm önerileri bulabilirsiniz. Aradığınız halde yine de çözüm bulamadıysanız. Kodlarınızı ve veritabanınızı sıkıştırılmış bir dosya olarak bize gönderiniz. Elimizden geldiğince yardımcı olmaya çalışacağız.

İyi çalışmalar...

Mail Scirpt 2 : CDONTS ile mail gönderme

CDONTS bileşeni ile mail göndermek oldukça basittir. Windows XP kullanıcısı
iseniz bu bileşen sizde yüklü değildir. Yükleme gerektirmektedir. Ancak bu
bileşen standart windows bileşenleri arasında yer alabilmektedir. Bu nedenle de
kanaatimce en yaygın olanı



Kodlarımız aşağıdaki gibi.



<%

Set ObjCDO = CreateObject("CDONTS.NewMail" )



ObjCDO.BodyFormat = 0 'E-Posta türü:
bodyformatın alacağı değerlere göre gönderilme tercihi 0:HTML , 1
TEXT



ObjCDO.MailFormat = 0 'Kodlama 0:MIME, 1:TEXT


ObjCDO.Subject = "Örnek" 'Başlık

ObjCDO.Body = "<html><head></head><body><h1>CDONTS</h1>ASPDersine
gider
</body></html>" ' Burası HTML içerikle
oluşturulmuş mesajımızın ta kendisi. Bunu istersek daha kısa şekilde ve sadece
test olarak ya da link olarak da gönderebiliriz



'ObjCDO.body= "ASPDersine
gider
" ... gibi



ObjCDO.From = "Adınız Soyadınız <gonderenkisi@adresiniz.com>"
' sizin yani gönderen kişinin isim bilgileri ve mail
adresi

' İsterseniz ----- ObjCDO.From = "gonderenkisi@adresiniz.com" ---- Şeklinde
sadece mailinizi yazarak ta gönderebilirsiniz!

ObjCDO.To = "AliciAdres@adresi.com" ' İsterseniz (
; ) noktalı virgüller kullanarak birden fazla alıcı belirleyebilirsiniz

ObjCDO.Bcc = "GizliAlici1@adresi.com;GizliAlici2@adresi.com
"
' Gizli alıcılara mail gönderdiğinizde gönderilen mailler
diğerlerine görünmez.

ObjCDO.Cc = "BilgiAlici1@adresi.com;BilgiAlici2@adresi.com
"
' Aynı şekilde bilgi alıcılarda maillerde görünmez





ObjCDO.Importance = 1 'Öncelik 0: düşük, 1: normal,
2: yüksek



ObjCDO.Value("Reply-To" ) = "YanitAlacakAdres@domain.com"
'E-Posta'nın başlığına ek anahtarlar yerleştirir.




'ObjCDO.ContentBase = "" Tam olarak bilemiyorum
ancak sanırım içerik hakkında bilgi veriliyor.

'ObjCDO.ContentLocation = "" Bunu da tam olarak bilmiyorum




ObjCDO.AttachFile("\\server\\images\foto1.jpg" , "foto1.jpg" )
' Göndermek istediğiniz bir dosya varsa fiziksel adresini
doğru şekilde girerek gönderebilirsiniz

ObjCDO.AttachURL("d:\images\foto2.jpg" , "foto2.jpg" )





ObjCDO.SetLocaleIDs(1055) 'CodePage ya da dil
kodlaması diyelim



ObjCDO.Send 'tabiki hazırladığımız mesajı gönderme
zamanı. Send diyince gidiyor.



Response.Write "CDONTS " & ObjCDO.Version & " versiyonu ile gönderildi."
'Bu da gönderdiğimiz bileşenin versiyonunu ve mesajın
gönderildiğini bildiren mesajı

%>

Mail Script 1 : aspEMAIL ile mail gönderme

Not: Bu script sitemizle alakası olmayan biri tarafından kodlanmış bizim
tarafımızdan düzenlenmiştir!



<%

Set Mailer = Server.CreateObject("SMTPsvg.Mailer" )

Mailer.FromName = "Gönderenin Adı"

Mailer.FromAddress= "email@adresi.com"

Mailer.RemoteHost = "mail.domainadınız.com"

Mailer.AddRecipient "AlıcınınAdı Soyadı " , "alıcımail@adresi.com"

Mailer.Subject = "Başlık"

Mailer.BodyText = "Buraya ayzacağınız metin" & VbCrLf & "sizin mesajınız
olacaktır!"

If Mailer.SendMail Then

Response.Write "Mail gönderildi..."

Else

Response.Write "Mail gönderilirken hata oluştu. Hata: " & Mailer.Response

End If

%>

Veri Tabanı İşlemleri 1 - Uygulamalı



ASPDersi.com ziyaretçileri. Yeni bir ders daha ekliyorum. Daha önce anlatmış
olduğum, veri tabanı kayıt işlemini tekrar konu alarak anlatıyorum bu
dersi. Bu derste benim asp öğretmeye çalıştığım bir kaç arkadaşta gördüğüm
eksikleri düzeltirken fark ettiğim bir kaç noktayı vurgulamak için kullandığym
methodu uygulayacağım. Size bir kaç dosya hazırladım. Bu dosyalardan kısaca
bahsedeyim.
1-Default.asp Bu dosyayı siz
oluşturacaksınız. içine kayıtform.asp ve listele.asp için link vermeniz yeterli
olacaktır

2-Listele.asp Bu dosya yapılan
tüm kayıtları listeleyecektir.

3-Kayitform.asp Kayıt form isminden de anlaşıldığı gibi
tablomuza verilerimizi kayıt edebilmemiz için gerekli form sayfası.

4-Kayit.asp Bu dosya
kayitform.asp de ( <form action="kayit.asp" method="POST"> ) form verilerinin
gönderildiği satırdır.

5-Goster.asp Bu dosya bize adres
çubuğundan gelen veriye ait bilgileri listeler. Hangi bilgiler.Tabiki bizim
istediğiklerimizi




Konuya başlamadan önce eğer ASP hakkında yeterli bilginiz yoksa dersi
anlayamayabilirsiniz.




Bu nedenle size;




1- Request Nesnesi

2-
Response (Cevap) Nesnesi

3-

Veri Tabanına Kayıt İşlemi

4-

ASP nedir - ASP nasıl çalışır




Derslerini okumanızı tavsiye ederim. 4. sıradaki ders sıfırdan başlayan
ziyaretçilere tavsiyemizdir. Diğer ziyaretçilerin ilk 3 seçeneğe göz atması
konuyu daha iyi anlamalarını sağlayacaktır.




Bu kadar açıklamadan sonra artık giriş yapalım. Size veritabanı tablosunun
bir görünümünü veriyorum. Henüz içerisinde hiç kayıt yok. Buradaki field (alan)
lara

dikkat etmelisiniz.Eğer yaş alanına sayı yerine harf içerikli karaktersel bilgi
girerseniz hata alırsınız. Bunun nedeni yas isimli alanımızın alan
özelliği resimden de görebileceğiniz gibi sayıdır. Bu nedenle karaktersel
bilgiye kapalıdır. Bu tarz hatalar (bug) kod tuzaklamalarıyla
önlenebilir. Bu aşamada sadece bu bilgi yeterlidir. ilerleyen derslerimizde kod
tuzaklama için Visual Basic fonksiyonlarından yararlanacağız.

(IMG:http://www.esintihosting.com/images/tablo.gif)




Veri tabanı adı: deneme.mdb

Tablo adı: Salihabi

Alan adları Veri Türü

id
Otomatik sayı

ad
Metin

soyad
Metin

yas
Sayı
Session (Oturum) Nesnesi
Session (Oturum) Nesnesi


ASP sayfalarında ziyaretçi sunucuya bağlandığı anda bir oturum (session) başlamıştır. Bu olay işletim sisteminizin, siz bilgisayarı açtığınız zaman yaptığı işleme benzer bir durumdur. Bağlandığınız sitenin serverı size bir oturum yaratır. Bu oturum ziyaretçi sayfadan çıkana kadar devam eder. Web Programcılığındaki en büyük problemlerden birisi bir sayfadan diğerine veri iletimidir. Session bizim, sayfadan sayfaya veri iletimini istediğimiz gibi sağlar üstelik herhangi bir link veya form elemanı kullanmadan. Eğer Request nesnesinin Form ve Querystring methodlarının kullanımı dersini okuduysanız bunu daha iyi anlayacaksınız. Sessionlar bizim tam istediğimiz gibi veri transferlerini sağlayabilirler. Ayrıca ziyaretçi sayfayı kapatana kadar görevlerine devam ederler. Böylece ziyaretçi sitemizdeki başka sayfaları da gezse sessionda sakladığımız bilgiler geçici hafızada saklanmaya devam edecektir...

Ziyaretçinin bilgilerini form ile almayı öğrenmiştik. Şimdi sessionla ilgili küçük bir örnek verelim...

<% ad=Request.Form("ad") 'Burada kullanıcının adını ad isimli form alanı ile alıyoruz
Session("ad") = ad ' Burada da Formdan gelen veriyi atadığımız değişkeni oturum bilgisine atıyoruz %>

Not: Session("ad")="Emrah" şeklinde başka yerden veri almadan da atama yapabiliriz

Açtığımız oturumun adı addır...Bundan sonra sayfanın herhangibir yerinde Session("ad") oturumunun içerisindeki veriyi istediğimiz gibi kullanabiliriz. Mesela ziyaretçimizin gezdiği her sayfada ziyaretçiye adıyla hitabederek çeşitli mesajlar verebiliriz...

Hoşgeldin <%=Session("ad") %>, Nasılsın <%=Session("ad") %>?, Bugün neler yaptın <%=Session("ad") %>? gibi... Eğer kullanıcı
oluşturduğumuz formda metin kutusunda

kullanici adini yazıp gönderirse Sayfada verdirdiğimiz mesajların çıktıları şu şekilde
olacaktır...



Hoşgeldin Emrah, Nasılsın Emrah? , Bugün neler yaptın Emrah?

Sessionlar ziyaretçi sayfadan çıkana kadar bilgilerini saklar demiştik. Ancak şöyle bir durum var. Ziyaretçi sayfaya girdi. Formdan adını yazdı ve gönderdi. Ancak 20 dakika hiç bir işlem yapmadı. 21. dakikada tekrar bir işlem yaptığında session içerisindeki bilgiler sıfırlanmış olacaktır. Nedeni ise çok basittir.

- Ziyaretçi sayfada hiç bir işlem yapmamıştır ve güvenlik nedeniyle 20 dakika sonra sessionların içi boşaltılmıştır. Bu güvenlik önlemi neden gereklidir. Diyelim ki sitenizde şifre ve kullanıcı adı girişi yapıldı ve siz ziyaretçilerin bu bilgilerini sessionda saklıyorsunuz. Ziyaretçi sitenize internet cafe veya benzeri bir yerden bağlandı diyelim ve 1-2 saat sonra sayfaları kapatmadan çıkıp gitti. 20 dakika sonra biri gelip o bilgisayarda onun adına işlem yaparsa bu sitenizin imajını zedeleyebileceği gibi başka zararlar da verebilir. Bu nedenle bu güvenlik önlemi gereklidir. Biz bu süreye istersek müdahale edebiliriz. Varsayılan değeri 20 dakikadır. Biz bunu 30 dakikaya çıkarmak için session nesnesinin TimeOut metodundan yararlanıyoruz.

Eğer sayfamızın başına Session.TimeOut=30 koyarsak bekleme süresi 30 dakikaya çıkar. Bunu istediğiniz gibi ayarlayabilirsiniz. Bu size kalmış... Session nesnesinin içeriğini elde etmek için istediğimiz sayfada istediğimiz yerde, <%=Session("ad") %> ya da <%Response.write Session("ad") %> koduyla yazdırabiliriz yapabiliriz.

Sessionun içerisindeki veriyi boşaltmak için <%Session("ad") = "" %> kodunu kullanabilirsiniz. Session dersimiz şimdilik bu kadar.
 
Request.ServerVariables
Request ile ba?ka ne tür istekler yapylabilir?


Request nesnesinin ServerVariables diye bir metodu vardyr. Bu metod sayesinde
sitemizi veya sayfamyzy ziyaret eden ki?ilerin DNS,ip,Sayfayy Çe?yrmak için
kullandy?y metod ve benzeri bilgileri alabiliriz. Kullanymy çok basittir.



Örnek olmasy için ip numarasyny alan kodu yazalym



<%Response.write (Request.ServerVariables("remote_addr"))%>



Bu kodu uygulayyp localhostta açty?ynyzda kar?ynyza 81.215.xxx.xxx gibi bi?ey
çykacak bu sizin ip numaranyz.



Request.ServerVariablesin tüm synyf metodlaryny (remote_addr gibi) görmek
için ?u kodu kullanabilirsiniz.



<table><tr><td>ServerVariables</td></tr>



<%For Each name in Request.ServerVariables%>



<tr><td><%Request.ServerVariables(name)%></td></tr><%Nest%>



</table>

Request.ServerVariables
Request ile ba?ka ne tür istekler yapylabilir?


Request nesnesinin ServerVariables diye bir metodu vardyr. Bu metod sayesinde
sitemizi veya sayfamyzy ziyaret eden ki?ilerin DNS,ip,Sayfayy Çe?yrmak için
kullandy?y metod ve benzeri bilgileri alabiliriz. Kullanymy çok basittir.



Örnek olmasy için ip numarasyny alan kodu yazalym



<%Response.write (Request.ServerVariables("remote_addr"))%>



Bu kodu uygulayyp localhostta açty?ynyzda kar?ynyza 81.215.xxx.xxx gibi bi?ey
çykacak bu sizin ip numaranyz.



Request.ServerVariablesin tüm synyf metodlaryny (remote_addr gibi) görmek
için ?u kodu kullanabilirsiniz.



<table><tr><td>ServerVariables</td></tr>



<%For Each name in Request.ServerVariables%>



<tr><td><%Request.ServerVariables(name)%></td></tr><%Nest%>



</table>

Veri Tabany Kayyt Düzenleme islemi
asadaki kodlarin uyarlandigi veritabani resimdeki gibidir...

(IMG:http://www.esintihosting.com/images/veritabani.gif)



bilgilerin alinaciga adres resimdeki gibidir


(IMG:http://www.esintihosting.com/images/adres.gif)





<%

1. uyead=request.querystring("ad")

uyesoyad=request.querystring("Soyad")





2.
Vt_Yolu=Server.Mappath("kisiler.mdb")


cumle= "DBQ="& Vt_Yolu &";Driver={Microsoft Access Driver (*.mdb)}"



3.
set Baglanti= Server.Createobject ("ADODB.Connection")


Baglanti.open (cumle)

4.
set rs= Server.Createobject ("ADODB.Recordset")

5.
sql= " Select * from
bilgiler
where
ad=' " &
uyead
& " ' and soyad=' "
& uyesoyad
& " ' "


rs.open sql,Baglanti, 1,3

6. if not rs.eof then

rs("ad")="Buraya
yeni ady yazyn"

rs("soyad")="Buraya
yeni soyady yazyn"

end if

%>



Yukarydaki yapylan i?lem ?udur! Veri tabanynda
ad ve soyad adynda iki
alan(field) vardyr. ad alanynda Ferhat
soyad alanynda Karaka? verileri kayytlydyr.



1- Öncelikle adres çubu?undan gelen verileri request.querystring metodu ile
aldyk.

2- Daha sonra kisiler.mdb adly veri tabanymyzyn
yolunu belirttik.

3- Sonra Baglanti adyyla veritabanymyz için
ba?lanty olu?turduk

4- Daha sonra rs adyyla RecordSet(Kayyt
Düzenleyici) olu?turuyoruz

5- Veri tabanymyzdan alaca?ymyz kayyt için sql dili
ile bir sorgu olu?turuyoruz.

6- E?er kayyt varsa diye bir deyim olu?turuyoruz

7- Burada ad ve soyad
de?erlerini de?i?tiriyoruz.

8- 6. adymda olu?turulan deyimi sonlandyryyoruz.

Böylelikle kayyt düzenleme i?lemimiz
son buluyor