PDA

View Full Version : درخواست راهنمایی در خصوص کوئری بر حسب فیلد Primary Key



Hassan200
پنج شنبه 03 مهر 1393, 15:23 عصر
سلام
دوستان چرا زمانی که کوئری بر حسب فیلد اصلی جدول می سازم گزینه دیفالت ولیو بقیه فیلد هام از کار می افتد ؟ ولی وقتی کوئری بر حسب مثلا تاریخ می سازم این مشکل وجود ندارد ؟

و این که کدی هستش برای حالتی که کوئری بر حسب primary key می گیرم ابتدا خالی یا پر بودن دو سه فیلد رو بررسی کنه اگر پر بودند اجازه پر کردن فیلد های خالی باقی مانده رو بدهد ؟
امیدوارم سوالم رو واضح پرسیده باشم

با تشکر

m.elmi
پنج شنبه 03 مهر 1393, 15:44 عصر
اگه سئوالت رو درست متوجه شده باشم: اكسس 2007 كه من كار مي كنم گزينة ديفالت وليو توي كوئري نداره و فقط توي جدول و فرم داره و علي القاعده كوئري هر طور كه درست بشه ارتباطي با مشخصات فيلدها (شامل ديفالت وليو) توي جدول نداره.

در مورد سئوال دوم مسلما كد وجود داره در عين حال شما مي تونين برعكس هم عمل كنين يعني (توي فرم) كلية فيلدها بجز اونهايي كه بايد اول پر بشند Lock كنين بعد توي Events اون فيلدهاي اصلي كد باز كردن باقي فيلدها رو قرار بدين.

Hassan200
پنج شنبه 03 مهر 1393, 16:54 عصر
اگه سئوالت رو درست متوجه شده باشم: اكسس 2007 كه من كار مي كنم گزينة ديفالت وليو توي كوئري نداره و فقط توي جدول و فرم داره و علي القاعده كوئري هر طور كه درست بشه ارتباطي با مشخصات فيلدها (شامل ديفالت وليو) توي جدول نداره.

در مورد سئوال دوم مسلما كد وجود داره در عين حال شما مي تونين برعكس هم عمل كنين يعني (توي فرم) كلية فيلدها بجز اونهايي كه بايد اول پر بشند Lock كنين بعد توي Events اون فيلدهاي اصلي كد باز كردن باقي فيلدها رو قرار بدين.
ممنونم که جواب دادین
من فرم هام رو به کوئری ها وصل کردم و دیفالت ولیو رو در فرمم می خوام قرار بدهم
در مورد دومی امکانش هست یه نمونه برام بگذارین - مرسی

m.elmi
پنج شنبه 03 مهر 1393, 18:00 عصر
ديفالت وليو در فرم هم مشكلي نداره و مجزا از خود كوئري است. بايد نمونه بگذاريد ببينم.

در مورد دوم - فرض كنيم اول بايد نام كارمند تكميل بشه بعد كد ملي (و كد ملي هم فعلا Lock هست):
Private Sub EmployeeName_AfterUpdate()

If Not IsNull(Me.EmployeeName.Value) Then
Me.NationalCode.Locked = False
End If


End Sub


اما بصورت كامل تر كه كاربر بعد از وارد كردن كد ملي، اسم كارمند رو پاك مي كنه:


If Not IsNull(Me.EmployeeName.Value) Then
Me.NationalCode.Locked = False
Else
Me.NationalCode.Value = Null
Me.NationalCode.Locked = True
End If

Hassan200
شنبه 05 مهر 1393, 12:33 عصر
ديفالت وليو در فرم هم مشكلي نداره و مجزا از خود كوئري است. بايد نمونه بگذاريد ببينم.

در مورد دوم - فرض كنيم اول بايد نام كارمند تكميل بشه بعد كد ملي (و كد ملي هم فعلا Lock هست):
Private Sub EmployeeName_AfterUpdate()

If Not IsNull(Me.EmployeeName.Value) Then
Me.NationalCode.Locked = False
End If


End Sub


اما بصورت كامل تر كه كاربر بعد از وارد كردن كد ملي، اسم كارمند رو پاك مي كنه:


If Not IsNull(Me.EmployeeName.Value) Then
Me.NationalCode.Locked = False
Else
Me.NationalCode.Value = Null
Me.NationalCode.Locked = True
End If


سلام
فایل نمونه را ضمیمه کردم
در این فایل در قسمت ثبت ورود به سالن مشکلی ندارم - دیفالت ولیو کار می کنه و ...
اما در ثبت خروج از سالن --> قسمت تکمیل اطلاعات قطعه - دیفالت ولیو پس از فراخواندن کد قطعه از کار می افتد و همچنین هیچ کدی که بتوانم برای فیلد " تاریخ خروج از بدنه " تعریف بشه که اول پر بودن مثلا فیلد "نوع" چک شود و در صورت پر بودن این فیلد اجازه ثبت اطلاعات داده شود پیدا نکردم
ممنون می شوم راهنمایی نمایید - با تشکر
123942

m.elmi
یک شنبه 06 مهر 1393, 02:49 صبح
حسن من فایلو نگاه کردم تستش ام کردم، در مورد دیفالت ولیو اینطور نیست که از کار بیافته. طبیعیه وقتی کد قطعۀ موجود رو فراخوانی می کنی دادۀ هر Text Box از فیلد مربوطه خونده می شه و نشون داده می شه (نه از دیفالت ولیو). دیفالت ولیو کاربردش برای ورود اطلاعات جدیده و ممکنه به همون صورت ازش استفاده کنی یا تغییرش بدی. امیدوارم بد متوجه نشده باشم.

در مورد دوم وقتی که داری از دیفالت ولیو استفاده می کنی (مثلا در مورد تاریخ که تاریخ روز رو نشون می ده) خود بخود اونجا هست و نمی شه که مثلا بعد از پر شدن فیلد خاصی یه دفعه نشون داده بشه (دیتای پیش گزیده). برای اینکار باید کد بنویسی - بخصوص رویداد Before Insert برای اینجور کارا خیلی مناسبه. میشه از کدی هم که بالا آوردم با یه تغییری برای این منظور (بجای دیفالت ولیو) استفاده کرد.

Hassan200
یک شنبه 06 مهر 1393, 08:11 صبح
حسن من فایلو نگاه کردم تستش ام کردم، در مورد دیفالت ولیو اینطور نیست که از کار بیافته. طبیعیه وقتی کد قطعۀ موجود رو فراخوانی می کنی دادۀ هر Text Box از فیلد مربوطه خونده می شه و نشون داده می شه (نه از دیفالت ولیو). دیفالت ولیو کاربردش برای ورود اطلاعات جدیده و ممکنه به همون صورت ازش استفاده کنی یا تغییرش بدی. امیدوارم بد متوجه نشده باشم.

ممنونم از پاسخت m.elmi (http://barnamenevis.org/member.php?341809-m-elmi) عزیز - حق با شماست - کاری که من می خوام انجام بدم اینه که بعد از این که قطعه تولید شد و خواست از سالن خروج بخورد تاریخ خروج توسط دیفالت ولیو ( تاریخ روز سیستم ) پر شود و البته این فیلد زمانی که آن قطعه تاریخ ورود نداشت غیر فعال باشد - مثلا قطعه با کد 925837 که توسط ورودی سالن ثبت شده رو بشود براش اطلاعات خروجی ثبت کرد ولی مثلا قطعه به کد 901234 به دلیل نداشتن اطلاعات در ورودی ، در خروجی هم ثبت نشود
با تشکر

m.elmi
یک شنبه 06 مهر 1393, 19:14 عصر
حسن اديتور ويژيوال بيسيك ات بسته است (پسورد مي خواد). مي خواستم يه دكمه بذارم به اسم "ثبت خروج" و توي ايونتش كد اطلاعات خروج رو بذارم (ديفالت تاريخ و ساعت و ...) - البته ساده است فكر كنم با ماكرو هم بشه انجام داد.

m.elmi
دوشنبه 07 مهر 1393, 18:20 عصر
باز كردم اديتور ويژيوال بيسيك رو و سعي كردم كد رو بذارم يعني كد رو گذاشتم ولي به خطاي اكسس برخوردم. چك كردم يكي دو تا نكتة اساسي توي نامگذاري ها هست كه بايد رعايت كني:

1- اولا هر آبجكت (فرم، جدول، كوئري، ...)‌ كه معرفي مي كني اسمشون يه تكه باشه مثلا براي اسم فرم يا ماكرو و غيره از Body Enter استفاده نكن - يا بگذار BodyEnter يا Body_Enter

2- در هيچ مورد براي اسامي آبجكت ها يا كنترل هاي فرم ها يا اسامي فيلدها و غيره از نامگذاري فارسي استفاده نكن. مثلا مشكلي كه من با خطاي اكسس مواجه شدم بخاطر اين بود كه توي فرم BodyExit اسم كنترل ها فارسي بود. براي مشاهدة فارسي هر جا لازم باشه از Caption استفاده كن.

3- جاهايي كه مي خواهي اسم دو تكه باشه همونطور كه گفتم از خط تيرة پايين استفاده كن و نه خط تيرة معمولي. خط تيرة معمولي گاهي با منها مخلوط مي شه.

4- براي Text Box ها بهترين راه اينه كه Name و Control Source شون يكي باشه.

من اون قسمت مربوط به فرم BodyExit رو فرم رو درست كردم و كد مورد نظر رو توش گذاشتم با مختصر توضيح توي كد. براي اينكه فايلو اينجا بذارم يه كم كوچيكش كردم (ديتاهاي جداول مختصر شد و گزارش ها برداشته شد)

m.elmi
دوشنبه 07 مهر 1393, 18:23 عصر
ضمنا توي فايلي كه فرستادم يه تغييرات ديگه هم دادم مثلا ديفالت وليو تاريخ و ساعت خروجي و نوع رو برداشتم چون ديگه لازم نبود و اين سه تا كنترل رو Lock كردم.

Hassan200
سه شنبه 08 مهر 1393, 23:59 عصر
m.elmi عزیز ممنون بابت کمک ارزشمندت در خصوص دیفالت ولیومن دکمه" جدید " رو که توش ماکرو Requery رو قرار داده بودم تغییر دادم به کد بیسیک و کد های تنظیم شده در دکمه " ثبت خروج " شما رو تو رویداد OnClick دکمه "جدید" قرار دادم ومشکل دیفالت ولیو به کل حل شد
در خصوص عدم توانایی اپراتور در ثبت تاریخ در قسمت خروج در صورتی که تاریخ ورودی در ورودی سالن ثبت نشده باشد ، راه حلی وجود ندارد ؟
بازم ممنون

m.elmi
چهارشنبه 09 مهر 1393, 10:13 صبح
درسته من براي ركورداي جديد يادم نبود كه بايد تكليف ديفالت وليو شون روشن بشه كه حالا شما انجام دادي. چرا راه كه زياده. مثلا شما مي توني از رويداد On Current (مربوط به فرم)‌ استفاده كني و يه كد اونجا بذاري (يه شرط IF ساده) تا هر بار چك كنه اگه تاريخ ورودي موجود نيست باكس هاي خروجي رو Lock كنه در غير اينصورت Lock اونها رو برداره (كه بشه اطلاعات وارد كرد). امتحان كن نتيجه اش رو بگو.

Hassan200
چهارشنبه 09 مهر 1393, 15:49 عصر
درسته من براي ركورداي جديد يادم نبود كه بايد تكليف ديفالت وليو شون روشن بشه كه حالا شما انجام دادي. چرا راه كه زياده. مثلا شما مي توني از رويداد On Current (مربوط به فرم)‌ استفاده كني و يه كد اونجا بذاري (يه شرط IF ساده) تا هر بار چك كنه اگه تاريخ ورودي موجود نيست باكس هاي خروجي رو Lock كنه در غير اينصورت Lock اونها رو برداره (كه بشه اطلاعات وارد كرد). امتحان كن نتيجه اش رو بگو. ممنونم - انجام شد - خدا خیرت بده