PDA

View Full Version : database



javad0062
سه شنبه 19 اردیبهشت 1385, 13:04 عصر
سلام
من با پایگاه داده درasp ارتباط بر قرار کردم ولی وقتی یک فرم درست میکنم submitمیزنم یک اشکال از while آخر میگیره نمیدونم چرا
<!--#include file="datastore.asp" -->
<!--metadata type="typelib"
file="d:\program files\common files\system\ado\msado15.dll"-->
<HTML>
<HEAD>
</HEAD>
<BODY>
<%
dim objcommand,objrs
set objcommand=server.createobject("adodb.command")
response.write"updating"
objcommand.activeconnection=strconnect
objcommand.commandtext="select *from employees"
objcommand.commandtype=adcmdtext
set objrs=objcommand.Execute
while not objrs.eof
response.write objrs("fname") &","&objrs("lname") &","&objrs("city") &"<br>"
objrs.movenext
wend
%>
<hr><br>
<%
objcommand.commandtext="insert into employees values('"+request.Form.Item("fname")+"','"+request.Form.Item("lname")+"','"+request.Form.Item("city")+"')"
objcommand.commandtype=adcmdtext
set objrs=objcommand.Execute
response.write"after inserting"&"<br>"
while not objrs.open
response.write objrs("fname")&","&objrs("lname")&","&objrs("city") &"<br>"
objrs.movenext
wend
set objcommand=nothing
set objrs=nothing
%>
</BODY>
</HTML>

سارا نجفی
چهارشنبه 20 اردیبهشت 1385, 07:42 صبح
به نظر من شرط while درست نیست. چون فکر کنم که وقتی insert into میکنی open هم میشه.
میشه بگی که چه اشکالی میگیره؟

javad0062
چهارشنبه 20 اردیبهشت 1385, 11:16 صبح
سلام
من تازه کار با aspرا شروع کردم برای همین با بعضی از پیغام های خطا آشنا نیستم
پیغام خطای دستور بالا اینه
Item cannot be found in the collection corresponding to the requested name or ordinal.
البته اگر به جایopenدر این خطeofبزارم
while not objrs.eof
باز پیغام زیر را میدهد
Operation is not allowed when the object is closed
نمیدونم چی باید بنویسم
اشکال از کجاست؟

reza_rad
چهارشنبه 20 اردیبهشت 1385, 11:28 صبح
بجای while از for استفاده کن و بگو تا مقدار recordcount ات loop بزنه.
یعنی connection رو open کن.
بعدش به تعداد رکورد های خروجی read کن.

archangel
چهارشنبه 20 اردیبهشت 1385, 12:55 عصر
شرط while دومت درست نیست. اصلاً از حلقه نباید استفاده کنی. چون query ای که اجرا کردی query ای نیست که مقداری برگردونه (اصطلاح فنی‌اش یادم رفته). دلیل پیغام خطات هم همینه که می‌گه توی objrs آیتمی به اسم fname، lname یا city نداره. چون objrs اساساً خالیه. برای این که ببینی رکوردی که به جدولت اضافه کردی، واقعاً اضافه شذه یا نه باید یه بار دیگه از کوریه select استفاده کنی و رکرودهای جدول رو بخونی و اونوقت در یک حلقه اونها رو همون طوری که نوشتی، روی صفحه بنویسی تا ببینی رکوردت اضافه شده یا نه.

ضمناً دقت کن چون برای اضاف کردن رکورد، مقادیر فرم‌ات رو از Request.Form می‌خونی، نوع ارسال داده‌های فرم‌ات به صورت post باشه و نه get (خصوصیت method مقدارش post باشه).

<form name="..." action="..." method="post">

javad0062
پنج شنبه 21 اردیبهشت 1385, 13:57 عصر
سلام دوستان
با تشکر از راهنمایهاتون
whileآخر را حذف کردم مشکل بر طرف شد
ممنون

vahab_vb
جمعه 12 آبان 1385, 20:05 عصر
منم الان با این مشکل مواجه شدم. ولی مسئله اینجاست که من همون کدهائی رو که قبلا استفاده میکردم. رو فقط کپی و پیست کردم. و فکر نکنم اونجا اشکال از کد نویسی من باشه. فکر کنم اشکال در این خطا، بعضی مواقع بخاطر تکرار در عمل باز کردن و بستن یک دیتابیس به یکباره باشه.
یعنی مثلا بیشتر از سه بار یک دیتابیس اکسس رو به یکباره بصورت asp بخونیم و ببندیم !!!
با اینکه پستهای بالا رو خونم ولی هیچ چیز برام روشن نشده هنوز. و هنوز همین مشکل رو دارم، مثل دوستمون ... !!!
جالب اینجاست که کد خطای من بر روی قسمت باز کننده دیتابیس هستش، نه قسمت چرخشی اون !!!

vahab_vb
شنبه 13 آبان 1385, 18:22 عصر
من بعد از تحقیقات عملی زیاد روی این مشکل بالاخره دلیلش رو فهمیدم. اینو یادتون باشه که هر وقت با این خطا مواجه شدید. اولین کاری که میکنید این باشه که اول اسم جدولها و فیلدهاتون رو از نظر عدم تداخل چک کنید.
مثلا اگر در اکسل شما اسم جدولتون رو بزارید general به هیچ وجه نمیتونید از اون استفاده کنید.
یا مثلا اگر اسم فیلدتون رو بزارید call-ok احتمالا با همین پیغام خطای بالا مواجه خواهید شد.
اسمهایی هستند که نباید در اسم جدولها و یا فیلدها قرار بگیرن. در اسم گذاری دقت کنید.

میدونید این مثل چیه ؟ مثلا توی برنامه نویسی توی ویژوال بیسیک اگر در یک شرط تو در تو مثلا end if رو بردارید. و اطراف او do ... loop باشه، کامپایلر اشتباها میگه که شما Loop رو نزاشتید. اینجا هم تقریبا همین صادقه ...