ورود

View Full Version : سوال: مشکل این کد کجاست؟



returnx
یک شنبه 10 مرداد 1389, 20:59 عصر
من موندم مشکل این کد کجاست ؟ به نظر کاملا سالم می رسه اما error میده.:متفکر:

if Adodc1.Recordset.EOF = True Then
del = MsgBox("NO RECORD FOR DELETE", vbOKOnly, "DELETE")
Else
Beep
response = MsgBox("Are you sure to delete this record?", vbYesNo + vbQuestion, "DELETE")
If response = vbYes Then
Adodc1.Recordset.Delete
Adodc1.Refresh
End If
End If

M.T.P
یک شنبه 10 مرداد 1389, 21:09 عصر
قبل یا بعد از این کد از MoveNext استفاده میکنید؟
یا اینکه در جای دیگه برنامه ؟!

returnx
یک شنبه 10 مرداد 1389, 21:16 عصر
قبل یا بعد از این کد از MoveNext استفاده میکنید؟
یا اینکه در جای دیگه برنامه ؟!
متشکرم که انقدر زود جواب دادی.
در این button نه اما جای دیگه هم از move next و هم از move previous استفاده میکنم.

M.T.P
یک شنبه 10 مرداد 1389, 21:28 عصر
این دو خط رو اول کدت بزار ببین درست میشه!


if Adodc1.Recordset.EOF = True Then Adodc1.Recordset.MoveLast
if Adodc1.Recordset.BOF = True Then Adodc1.Recordset.MoveFirst

returnx
یک شنبه 10 مرداد 1389, 22:07 عصر
این دو خط رو اول کدت بزار ببین درست میشه!



if Adodc1.Recordset.EOF = True Then Adodc1.Recordset.MoveLast




if Adodc1.Recordset.BOF = True Then Adodc1.Recordset.MoveFirst

متاسفانه بازم مشکلم حل نشد.
این هم عکس error که میده:
http://up.iranblog.com/Files/b4597cf802654077b0ad.jpg:عصبانی++:

returnx
یک شنبه 10 مرداد 1389, 22:40 عصر
نکته بسیار جالب اینه که در جداول دیگر همین کد کاملا جواب میده اما نمیدونم دلیل error در این جدول چیه؟:متفکر:

M.T.P
دوشنبه 11 مرداد 1389, 10:46 صبح
بعد از دستور Delete و قبل از Rfresh رکوردست رو Update کنید.


Adodc1.Recordset.Update

returnx
سه شنبه 12 مرداد 1389, 17:56 عصر
متاسفانه هنوز مشکل من برطرف نشد .:گریه:
لطفاکمکم کنید.

M.T.P
سه شنبه 12 مرداد 1389, 19:22 عصر
این کد رو تو حلقه گذاشتین که EOF رو چک میکنید؟ :متفکر:
دوست من این شرطی که شما برای حذف رکورد گذاشتین منطقی نیست. شما باید از وحود حداقل یک رکورد در جدول هم مطمئن بشید ، اگه امکانش هست قسمتی از برنامه رو Upload کنید.

returnx
پنج شنبه 14 مرداد 1389, 09:34 صبح
این کد تو حلقه نیست قسمت

if adodc1.recordset.eof=true
برای اینه که اگه تمام رکورد ها حذف شد دیگه adodc عمل حذف انجام نده تا run time error نده.

M.T.P
پنج شنبه 14 مرداد 1389, 09:42 صبح
این کد تو حلقه نیست قسمت

if adodc1.recordset.eof=true
برای اینه که اگه تمام رکورد ها حذف شد دیگه adodc عمل حذف انجام نده تا run time error نده.

خب از RecordCount استفاده کن.


If Adodc1.Recordset.RecordCount <> 0 Then
راستی نگفتی ارور رو کدوم خط از کد هست؟

returnx
پنج شنبه 14 مرداد 1389, 11:13 صبح
دقیقا این خط


Adodc1.Recordset.Delete

البته یک موضوع دیگه هم هست این هم اینه که این جدول با یک جدول دیگه هم ارتباط داره
یعنی فیلد id این جدول با یه جدول دیگه با فیلدid ارتباط داره.

returnx
پنج شنبه 14 مرداد 1389, 11:16 صبح
این کد رو تو حلقه گذاشتین که EOF رو چک میکنید؟ :متفکر:
دوست من این شرطی که شما برای حذف رکورد گذاشتین منطقی نیست. شما باید از وحود حداقل یک رکورد در جدول هم مطمئن بشید ، اگه امکانش هست قسمتی از برنامه رو Upload کنید.
چه جوری قسمتی از برنامه راupload کنم ؟
نمیشه باید کل برنامه رو uplaod کنم که حجمش زیاده.

returnx
پنج شنبه 14 مرداد 1389, 11:25 صبح
این لینک دانلود برنامه البته کل برنامه.
http://up.iranblog.com/Files/f32343783dec438c889e.rar

M.T.P
پنج شنبه 14 مرداد 1389, 12:25 عصر
من تو فرم ثبت خونه تست کردم خطا نداد ، به چه شکل واسه شما خطا میده ؟

M.T.P
پنج شنبه 14 مرداد 1389, 12:34 عصر
ضمنا دوست عزیز تنظیم ConnectionString کنترل Adodc به صورت ویزارد کار درستی نیست و صرفا به خاطر اینه که متوجه چگونگی ساختش بشیم وگرنه شما پوشه پروژه ات رو به یه مسیر دیگه منتقل کن و برنامه رو اجرا کن ببین وضعیت از چه قراره. من برای اجرا شدن برنامه شما کلی خطا رو Ok کردم و Adodc رو از نو تنظیم کزدم.

returnx
پنج شنبه 14 مرداد 1389, 19:39 عصر
من تو فرم ثبت خونه تست کردم خطا نداد ، به چه شکل واسه شما خطا میده ؟
تو فرم فروش خونه خطا داره.
در ضمن با ویزارد که اتصال دادم برای این بود که راحت تر و بدون کد نویسی textbox ها رو به بانک مرتبط کنم و در form_load با کد نویسی adodc رو به بانک وصل کردم.
من آدرس پوشه بانک رو تغییر دادم و مشکلی نداشت.:متفکر:

returnx
پنج شنبه 14 مرداد 1389, 20:05 عصر
در ضمن شما چه جوری username و password برنامه رو پیدا کردید؟ یعنی انقدر تابلو بود؟:اشتباه::ناراحت::عصبانی: :متعجب:

M.T.P
جمعه 15 مرداد 1389, 10:14 صبح
سلام
تو فروش خونه بعد Delete از Refresh استفاده نشده.


در ضمن شما چه جوری username و password برنامه رو پیدا کردید؟ یعنی انقدر تابلو بود؟
متغیر هاش رو چک کردم ببینم کجا مقدار دهی میشن :لبخند:

ولی دوست عزیز برنامه تون واسه اجرا جون مشتری رو به لبش میاره ، از ما گفتن بود.
پروژه رو به یه مسیر دیگه Move کن و برنامه رو اجرا کن ببین چه خبره.
کنترل ها رو هم یه کم مرتب کن.

returnx
شنبه 16 مرداد 1389, 10:03 صبح
من مسیر برنامه رو عوض کردم مشکل خاصی نداشت!!!!:متعجب:
البته برای بار چندم تست میکنم.
با مرتب کردن کنترل ها خیلی خیلی موافقم.:خجالت:

returnx
شنبه 16 مرداد 1389, 10:06 صبح
لطفا شما به فرم جست جو خانه یا هرکدوم از جست جو های دیگه برین ببینید میتونید data grid ها را فارسی کنید؟
ممنون میشم.:چشمک:

M.T.P
شنبه 16 مرداد 1389, 11:05 صبح
من مسیر برنامه رو عوض کردم مشکل خاصی نداشت!!!!:متعجب:
البته برای بار چندم تست میکنم.

پوشه پروژه رو Copy کردین یا Move ؟؟

returnx
شنبه 16 مرداد 1389, 11:35 صبح
پوشه پروژه رو Copy کردین یا Move ؟؟
من Copy کردم.

M.T.P
شنبه 16 مرداد 1389, 11:48 صبح
من Copy کردم.

همین دیگه :لبخند:
Moveش کن تا مسیر بانک تغییر کنه و متوجه معایب تعریف ConnectionString بصورت ویزاردی بشین.

یا ConnectionString رو تو Form_Load بصورت کد به Adodc نسبت بده و از App.Path برای مسیر بانک استفاده کن تا برنامه همیشه بانک رو در کنار خودش جستجو کنه. :چشمک:

راستی اگه به جای کنترل Adodc از کتابخانه ADODB استفاده کنید بهتره ها. دیگه لازم نیست توی هر فرمی یکی دوتا Adodc بزاری. فقط دو خط کد تو ماژول مینویسی برای همیشه.


Dim Cn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
اینجا رو ببینید (http://barnamenevis.org/forum/showthread.php?t=236730)

returnx
شنبه 16 مرداد 1389, 11:54 صبح
این error مربوط به فایل Log فرم main با این error نمی دونم چی کار کنم؟

http://up.iranblog.com/Files/bc43dea120e446cc8a3c.jpg
ولی این error مربوط به ریجستر کردن OCXکه فکر کنم با Package ساختن حل بشه:
http://up.iranblog.com/Files/cff25072727c453d8c84.jpg

می شه بگین چه طوری از دست Error ها خلاص بشم؟

returnx
شنبه 16 مرداد 1389, 11:57 صبح
همین دیگه :لبخند:
Moveش کن تا مسیر بانک تغییر کنه و متوجه معایب تعریف ConnectionString بصورت ویزاردی بشین.

یا ConnectionString رو تو Form_Load بصورت کد به Adodc نسبت بده و از App.Path برای مسیر بانک استفاده کن تا برنامه همیشه بانک رو در کنار خودش جستجو کنه. :چشمک:

راستی اگه به جای کنترل Adodc از کتابخانه ADODB استفاده کنید بهتره ها. دیگه لازم نیست توی هر فرمی یکی دوتا Adodc بزاری. فقط دو خط کد تو ماژول مینویسی برای همیشه.



Dim Cn As New ADODB.Connection




Dim Rs As New ADODB.Recordset

اینجا رو ببینید (http://barnamenevis.org/forum/showthread.php?t=236730)

فکر کنم که خیلی دیر شده:ناراحت:

M.T.P
شنبه 16 مرداد 1389, 12:01 عصر
خب ببینید شما راهکار درستی هم برای استفاده از ocx ها ندارین.
ocx ها در مسیر کنار پروژه Register شدن بنابراین با تغییر دادن پوشه پروژه ویندوز نمیتونه ocxها رو پیدا کنه همچنین بانکتون رو.
برای رفع مشکل شناسایی بانک که در پست قبل توضیح دادم اما برای رفع مشکل ocx باید اونها رو تو System32 برزید و از اونجا Register کنید که البته این کار رو باید به برنامه ساخت Setup بسپرید.

M.T.P
شنبه 16 مرداد 1389, 12:04 عصر
فکر کنم که خیلی دیر شده:ناراحت:

نه نه اصلا دیر نشده 20 دقیقه کاره ...

returnx
شنبه 16 مرداد 1389, 12:13 عصر
نه نه اصلا دیر نشده 20 دقیقه کاره ...
این کد درسته:
Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Resorce\Data Base\sysdata.mdb;Persist Security Info=False"

M.T.P
شنبه 16 مرداد 1389, 12:20 عصر
آره درسته.

اینم یه نمونه برای استفاده از ADODB

returnx
شنبه 16 مرداد 1389, 13:36 عصر
آره درسته.

اینم یه نمونه برای استفاده از ADODB
من از برنامه ای که برام گذاشتید این دو قطعه کد را استفاده کردم اما باز هم برنامه بانک رو نمیشناسه

Sub ConnectDB()
Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\Resorce\database\sysdata.mdb;" & _
"Mode=ReadWrite;" & _
"Persist Security Info=False;"
Cn.Open
Rs.CursorLocation = adUseClient
Rs.Open "home", Cn, adOpenStatic, adLockPessimistic
If Rs.RecordCount = 0 Then Exit Sub
Call SetTXTS
End Sub
این هم sub setext

Sub SetTXTS()
Set Text1.DataSource = Rs: Text1.DataField = "nam"
End Sub

returnx
شنبه 16 مرداد 1389, 13:47 عصر
شرمنده فهمیدم مشکل چی بود من تو Form_laod روال ConnectDB رو صدا نمیزدم.

M.T.P
شنبه 16 مرداد 1389, 15:40 عصر
فقط Cn کارش اینه که اول برنامه به بانک Connect بشه و اتصال رو برقرار کنه ، بقیه کارا دیگه بعهده Rs هست.
راستی برای باز کردن جدول هم از:


If Rs.State = 1 Then Rs.Close
Rs.Open "Table1"

بعد از هربار Delete یا Addnew هم یه Rs.Update بزن.

M.T.P
شنبه 16 مرداد 1389, 16:04 عصر
دوست من تو روال ConnectDB کد زیر رو من واسه خاطر تست یه مطلبی نوشتم یادم رفت پاکش کنم شما پاکش کن به کارتون نمیاد.
If Rs.RecordCount = 0 Then Exit Sub

در عوض ازش قبل از MoveNext ، MoveFirst ، MoveLast ، MovePrevios ، Delete استفاده کن که اگه جدولت خالی بود برنامه Error نده.

و اما یه موضوع دیگه اینکه همیشه بعد از Close کردن Rs و باز کردن یک Table جدید روال SetTXTs رو اجرا کن البته برای هر جدول یک روال خاص خودش مثلا شاید تو جدول فروش خونه فیلد nam نداشته باشی و ...

خلاصه اینکه موفق باشی.

returnx
شنبه 16 مرداد 1389, 19:52 عصر
متاسفانه هنوز مشکل Delete برنامم حل نشد در ضمن الان در فرم ثبت خونه هم error میده.:عصبانی++::افسرده:

M.T.P
شنبه 16 مرداد 1389, 19:57 عصر
متاسفانه هنوز مشکل Delete برنامم حل نشد در ضمن الان در فرم ثبت خونه هم error میده.:عصبانی++::افسرده:

خب هر اروری یه دلیلی داره دیگه ، چرا ضمیمه نکردی؟ بعد از Delete از Rs.Update استفاده میکنه یا نه؟ تو پست قبلی هم گفتم قبل از Delete و ... از این کد استفاده کن:


If Rs.RecordCount = 0 Then Exit Sub

ayub_coder
یک شنبه 17 مرداد 1389, 10:57 صبح
شما شماره رکورد رو گرفتید اصلا استفاده نکردید بهتری از دستورات sql استفاده کنید خیلی هم راحته

returnx
یک شنبه 17 مرداد 1389, 11:40 صبح
خب هر اروری یه دلیلی داره دیگه ، چرا ضمیمه نکردی؟ بعد از Delete از Rs.Update استفاده میکنه یا نه؟ تو پست قبلی هم گفتم قبل از Delete و ... از این کد استفاده کن:



If Rs.RecordCount = 0 Then Exit Sub

مشکل رو فهمیدم .مشکل از اینه که اگر یک رکورد داشته باشیم که دو فیلد عددی اون تکراری باشه error میده مثلا :متراژ برابر 2 باشه و Id برابر 2 باشه زمان حذف خطا میگیره و error زیرو میده:
http://up.iranblog.com/Files/b4597cf802654077b0ad.jpg
ولی زمانی که بین دو فیلد مقادیر مختلف می زارم بدون خطا رکورد رو حذف میکنه!:متعجب:

احمد رضا طونی
یک شنبه 17 مرداد 1389, 12:42 عصر
دوست عزیز برنامه شما مشکلی نداره اما شما از طریق یک ایندکس باید مشخص کنید که کدام رکورد باید حذف بشه.برای این کار ابتدا یه ایندکس تعریف کن بعد اگه ایندکس جستجو کرد رکورد مورد نظر پیدا شد اونوقت می تونی اون رکورد رو پاک کنی.اگه خواستی بهم ایمیل بده تا کد حذف رو برات بفرستم.شما با این کدی که نوشتی مشخص نکردی که کدوم رکورد باید حذف بشه.

M.T.P
یک شنبه 17 مرداد 1389, 13:00 عصر
جناب ms2222 مگه جدول هاتون فیلد ID که AutoNumber هست نداره؟ :متفکر:

M.T.P
یک شنبه 17 مرداد 1389, 13:15 عصر
ولی زمانی که بین دو فیلد مقادیر مختلف می زارم بدون خطا رکورد رو حذف میکنه!

فیلد ID رو دستکاری میکنید؟ :متعجب: :متعجب: :متعجب:
چرا؟ :عصبانی++:

returnx
یک شنبه 17 مرداد 1389, 14:43 عصر
فیلد ID رو دستکاری میکنید؟ :متعجب: :متعجب: :متعجب:
چرا؟ :عصبانی++:
این فقط یک مثال بود منظور اصلیم این بود که اگه ما یه رکورد داشته باشیم که دو فیلد عددی یکسان داشته باشه برای حذف کردن اون رکورد error میده .
حالا دلیلش چیه نمیدونم؟:متفکر:

M.T.P
دوشنبه 18 مرداد 1389, 16:25 عصر
دوست عزیز بعد مدتی اینطوری :عصبانی++: و :متفکر: و :اشتباه: فهمیدم این پیغام که گفتین چه موقع ظاهر میشه:
-اگه یه فیلدی مثلا Name طولش 10 کارکتر باشه و شما بیشتر از این مقدار مثلا 11 کارکتر بهش نسبت بدید و بخواین Update ، Refresh یا Delete کنید. با پیغامی که لینکش رو گذاشتین مواجه میشیم. برای رفع این مشکل اول با اکسس بانک رو باز کن ببین هر فیلد چند کارکتر میتونه ذخیره کنه TextBox های مربوط به اون رو خصوصیت MaxLength شون رو همونقدر بزار.
امیدوارم مصبر ثمر باشه. :متفکر:

returnx
دوشنبه 18 مرداد 1389, 20:30 عصر
دوست عزیز بعد مدتی اینطوری :عصبانی++: و :متفکر: و :اشتباه: فهمیدم این پیغام که گفتین چه موقع ظاهر میشه:
-اگه یه فیلدی مثلا Name طولش 10 کارکتر باشه و شما بیشتر از این مقدار مثلا 11 کارکتر بهش نسبت بدید و بخواین Update ، Refresh یا Delete کنید. با پیغامی که لینکش رو گذاشتین مواجه میشیم. برای رفع این مشکل اول با اکسس بانک رو باز کن ببین هر فیلد چند کارکتر میتونه ذخیره کنه TextBox های مربوط به اون رو خصوصیت MaxLength شون رو همونقدر بزار.
امیدوارم مصبر ثمر باشه. :متفکر:
متاسفانه مشکل این نبود.
من در پست قبل مشکل رو توضیح دادم شاید بد توضیح دادم متوجه نشدید .
شما در فرم ثبت خونه برید شماره(id) رو به طور مثال برابر 3 بزارید و متراژ رو هم مقدار 3 بدید و دیگر فیلد ها رو پر کنید حالا دکمه ثبت رو بزنید بدون هیچ مشکلی Add میشه .
حالا شما برید این رکورد رو پاک کنید ،error میده و این رکورد حذف نمیشه .
حالا یکبار دیگه به این رکورد برید متراژ رو تغییر بدید ،نیازی هم نیست دکمه ثبت را بزنید بدون هیچ مشکلی حذف میشه.
من مشکل رو می دونم اما را حل رو نمیدونم.
در ضمن بخاطر صبرتون در دادن پاسخ بسیار بسیار متشکرم.:بوس: