PDA

View Full Version : به روز رسانی یک کامند (خیلی خیلی فوری)



روح اله معینی زاده
شنبه 26 شهریور 1384, 08:52 صبح
با سلام خدمت دوستان

یک کامند تعریف کردم که و کانکشن آن را هم بهش تخصیص دادم. حالا چه طوری به روز رسانی رو روش انجام بدم.

توضیح:
از لیست قسمت Data در Toolbox یک کامند به نامه Odbccommand رو انتخاب کردم و ارتباط آن را هم به یک Odbcconnection برقرار کردم. سپس به خاصیت command text آن کامند مقدار مناسب رو اختصاص دادم و بعد هم اجرای دستور زیر

Cmd_Update_Chip.ExecuteNonQuery()

دستور هم بدون خطا اجرا می شود ولی بدون تغییر در بانک اطلاعاتی!

آیا باید حتما یک Data Adapter کنارش تعریف کنم و بعد کامند و بقیه مسایل یا این که راهی هست که با همین روشی که توضیح دادم بتونم بانک رو به روز رسانی کنم؟
آیا پس از دستور فوق باید جایی به روز رسانی رو انجام بدم (Update). اگه لازمه که بفرمایید چون خیلی کارم عقب مونده.

با احترام- خدانگهدار

Hamedm
شنبه 26 شهریور 1384, 10:51 صبح
با سلام خدمت دوستان

یک کامند تعریف کردم که و کانکشن آن را هم بهش تخصیص دادم. حالا چه طوری به روز رسانی رو روش انجام بدم.

توضیح:
از لیست قسمت Data در Toolbox یک کامند به نامه Odbccommand رو انتخاب کردم و ارتباط آن را هم به یک Odbcconnection برقرار کردم. سپس به خاصیت command text آن کامند مقدار مناسب رو اختصاص دادم و بعد هم اجرای دستور زیر

Cmd_Update_Chip.ExecuteNonQuery()

دستور هم بدون خطا اجرا می شود ولی بدون تغییر در بانک اطلاعاتی!

آیا باید حتما یک Data Adapter کنارش تعریف کنم و بعد کامند و بقیه مسایل یا این که راهی هست که با همین روشی که توضیح دادم بتونم بانک رو به روز رسانی کنم؟
آیا پس از دستور فوق باید جایی به روز رسانی رو انجام بدم (Update). اگه لازمه که بفرمایید چون خیلی کارم عقب مونده.

با احترام- خدانگهدار

سلام

نه نیاز به DataAdapter نیست.
لطفا بگو Connection چیه؟ و نیز دستوری که جلوی CommandText نوشتی چیه؟

در پناه حق موفق باشید و پرتوان

روح اله معینی زاده
شنبه 26 شهریور 1384, 13:10 عصر
با سلام خدمت دوست گرامی


Cmd_Update_Chip.CommandText = "UPDATE persons SET hausing_type=1 WHERE person_id='" & student_no.Trim & "'"
Try
Cmd_Update_Chip.ExecuteNonQuery()
Catch ex As Exception
MsgBox(Err.Number & vbCrLf & Err.Description & vbCrLf & "قسمت به روز رسانی اطلاعات جهت حذف خوابگاه")
Exit Sub
End Try

Hamedm
شنبه 26 شهریور 1384, 14:14 عصر
با سلام خدمت دوست گرامی


Cmd_Update_Chip.CommandText = "UPDATE persons SET hausing_type=1 WHERE person_id='" & student_no.Trim & "'"
Try
Cmd_Update_Chip.ExecuteNonQuery()
Catch ex As Exception
MsgBox(Err.Number & vbCrLf & Err.Description & vbCrLf & "قسمت به روز رسانی اطلاعات جهت حذف خوابگاه")
Exit Sub
End Try

سلام

اگه بانکت SQL Server است، برو درQuery Analyzer خودت دستی این دستور رو اجرا کن و ببین از اونجا اجرا میشه یا نه؟

در پناه حق موفق باشید و پرتوان

روح اله معینی زاده
شنبه 26 شهریور 1384, 23:13 عصر
با سلام خدمت آقا حامد

بله این دستور در Ems اجرا می شه. بعد هم که Commit ش می کنم، تغییرات اعمال می شه.

بانکی که من به آن وصل می شوم از نوع Interbase است و نرم افزاری که توسط آن چک می کنم نرم افزار
EMS Interbase/Firebird Manager است.

حدس می زنم که باید من در یه جایی یا Commit داشته باشم یا Update که تغییرات اعمال بشه. شما از یک کامند تنها به چه شکلی استفاده می کنید؟ می شه توضیح بدید.

با احترام- خدانگهدار

Hamedm
شنبه 26 شهریور 1384, 23:28 عصر
با سلام خدمت آقا حامد

بله این دستور در Ems اجرا می شه. بعد هم که Commit ش می کنم، تغییرات اعمال می شه.

بانکی که من به آن وصل می شوم از نوع Interbase است و نرم افزاری که توسط آن چک می کنم نرم افزار
EMS Interbase/Firebird Manager است.

حدس می زنم که باید من در یه جایی یا Commit داشته باشم یا Update که تغییرات اعمال بشه. شما از یک کامند تنها به چه شکلی استفاده می کنید؟ می شه توضیح بدید.

با احترام- خدانگهدار
سلام

ببخشید میشه درباره EMS توضیح بدید؟ من با این نرم افزار آشنا نیستم.

در پناه حق موفق باشید و پرتوان

amin_programmer
یک شنبه 27 شهریور 1384, 01:30 صبح
connection.open()
Cmd_Update_Chip.ExecuteNonQuery()
connection.close()

Hamedm
یک شنبه 27 شهریور 1384, 02:00 صبح
connection.open()
Cmd_Update_Chip.ExecuteNonQuery()
connection.close()
سلام

اگه Connection باز نباشه، در زمان Cmd_Update_Chip.ExecuteNonQuery() خطا میگیره و اگه Connection رو نبندی باز تغیرات اعمال میشه. پس اعمال نشدن تغیرات از باز یا بسته بودن Connection نیست.

در پناه حق موفق باشید و پرتوان

روح اله معینی زاده
یک شنبه 27 شهریور 1384, 09:55 صبح
سلام
بابا جواب منو بدید. ممکنه از کجا کار خراب باشه؟

در ضمن EMS کلی محصولات برای کار با بانک‌های اطلاعاتی داره که خیلی قدرتمند هم هستند. البته من فقط دو تا از اون رو دارم. یکی برای همین بانک‌های Interbase (یا Firebird) و دیگری برای کار با بانک‌های MySql. ولی در کل عجب چیز باحالیه.

بعضی از خصوصیات:
1- ساختن یک بانک خام از بانکی که داخل آن اطلاعات دارد.
2- ارسال (Export) اطلاعت به دست آمده از یک درخواست (Query) یا جدول (Table) به فرمت‌های Excel, Access, Word, Rtf, Html, Pdf, Text, Csv, Dif, Sylk, LaTeX, Xml, Dbf و یا Clipboard ویندوز
3- ارسال به شکل درج (Insert Into) با انتخاب ستون‌های (Field) دلخواه
4- مدیریت کاربران بانک اطلاعاتی (در سطح بانک اطلاعاتی) اعم از تعریف کاربر جدید یا تغییر کلمه عبور کاربر موجود.
5- بسته به نوع بانک اطلاعاتی شما، امکان پشتیبان گیری و برگرداندن آن و دیگر امکانات از این قبیل
.
.
.

بازم بگم؟

با احترام- خدانگهدار

صابر
یک شنبه 27 شهریور 1384, 17:54 عصر
کد شما درست به نظر می‌رسه.
بعد از ExecuteNonQuery نیاز به Update کردن چیز خاصی نیست.
چون پیغام خطائی نمی‌گیرید به احتمال زیاد عبارت WHERE person_id='" & student_no.Trim مقداری رو برنمی‌گردونه.

بهتره با یه دستور ساده تر تست کنید.
مثلاً:

Cmd_Update_Chip.CommandText = "UPDATE persons SET hausing_type=1 WHERE person_id='1'"

در ضمن، اگه person_id شما از نوع رشته‌ای نیست از کوتیشن ( ' ) استفاده نکنید. اصلاً شاید مشکل به این دلیل باشه که از کوتیشن استفاده کردید!!

Hamedm
یک شنبه 27 شهریور 1384, 22:56 عصر
سلام


اصلاً شاید مشکل به این دلیل باشه که از کوتیشن استفاده کردید!!
نه عزیز جان، اگه اینجوری بود Error میداد.

در پناه حق موفق باشید و پرتوان

روح اله معینی زاده
دوشنبه 28 شهریور 1384, 12:26 عصر
با سلام خدمت دوستان

مشکل حل شد.

ببخشید که ناخواسته سرکار رفتیم. من برنامه رو دوباره از روی حوصله چک کردم و دیدم که داده‌ی که برای اولین بار به روز رسانی می شود، بدون مشکل است اما برای بار دوم به بعد این کار انجام نمی شود!!!.

حال قصه از چه قرار است:

چون من از یک کانکشن برای کل کارهام استفاده می کردم و کامند به روز رسانی هم از همون استفاده می کرد، نمی تونستم آن را ببندم. بنابراین فکر کردم که مشکل ممکن است از این قسمت باشد و رفتم و یک کانکشن جدید ساختم ولی آزمایش نکردم که درسته یا نه.

خوب آزمایش رو شروع کردم. داده‌ی اول پس از عبور از روال‌های آزمایش صحت، به قسمت ثبت در بانک می رسد. من قبل از این که داده را در بانک بریزم برای اطمینان، یک فایل باز کرده و مقادیر را در این فایل ذخیره کرده و بعد بانک را به روز رسانی می کنم. خدا رو شکر درست بود و ثبت بانک شد.
داده‌ی دوم هم از روال‌های تعیین صحت عبور کرد. به قسمت ثبت در فایل رسید. روال خطا گیری مشخص کرد که هم اکنون فایل باز است و از شرط عبور می کند. وای خدای من! این دستور Exit Sub این‌جا چی کار می کنه. ...

و این جوری بود که از داده‌ی دوم به بعد در بانک ذخیره نمی شد.

بچه‌ها بازم شرمنده که موجب اتلاف وقت‌تان شدم.

با احترام- خدانگهدار.

صابر
دوشنبه 28 شهریور 1384, 14:40 عصر
اشکال نداره،
در عوض یاد گرفتیم تا حد امکان از Exit Sub استفاده نکنیم. چون دشمن برنامه‌نویسی ساخت‌یافته است!

روح اله معینی زاده
چهارشنبه 30 شهریور 1384, 07:08 صبح
با سلام خدمت دوست گرامی

من همین جوری برنامه نویسی رو یاد گرفتم و تحصیلات خاصی رو هم در این زمینه ندارم. می شه بفرمایید در برنامه نویسی ساخت یافته اگر در وسط شروطی که صحت و سقم داده‌ها یا وضعیت‌ها را چک می کنند بخواهیم با این کار پایان دهیم و از ادامه اجرا شدن یک Sub یا Function جلوگیری کنیم چه کاری باید صورت گیرد؟
بالاخره چی بخواهیم و چه نخواهیم در برنامه باید از دستورات شرطی استفاده کنیم، حال اگر شرطی که آزمایش می شود دارای جواب مثبت بود و بر اساس این جواب مثبت ما بخواهیم از اجرای Sub جلوگیری کنیم، چه دستوری باید نوشته شود.

امیدوارم که منظورم رو رسونده باشم.

با احترام - خدانگهدار

صابر
چهارشنبه 30 شهریور 1384, 08:10 صبح
استفاده از Exit Sub و نظیر این باعث کاهش خوانایی و احتمالاً بوجود اومدن خطاهائی می‌شه که ردگیری اونها بخصوص در برنامه‌های بزرگ مشکله. (که نمونه‌ش رو خودتون دیدیدن)
معمولاً برای چنین کارهائی در برنامه‌نویسی ساخت یافته، از IF و یا CASE استفاده می‌شه.
حتی اگه شده همه‌ی بلوک یک روتین شما در بدنه‌ی IF باشد و در صورت نقض شدن شرط، خود به خود از بدنه IF خارج و از روتین نیز خارج می‌شود.