PDA

View Full Version : سوال: گرفتن اطلاعات از روی جدولی دیگر



hf.farhadi
سه شنبه 04 مرداد 1390, 00:41 صبح
با سلام خدمت اساتید و دوستان گرامی
من یه جدولی دارم بنام "Npersenel" که مشخصات پرسنلی افراد رو در اون میریزم.

یه جدول مرتبط دیگه ای بنام "Morkhasi"دارم که تعداد مرخصیهای افراد رو ذخیره میکنم .


مشکم اینه که تا وقتی شماره پرسنلی شخص وارد این جدول نمیشه چون تعداد روزهای مرخصی در این جدول ثبت میشه امکان این وجود نداره که مثلاً باقیمانده مرخصی شخص رو گزارش کنی .
پس مجبورم ابتدا یه فیلد از مشخصات هر پرسنل وارد این جدول کنم. (فیلد تاریخ هم با مقدار پیش فرض ( 0 ) ذخیره بشه)
چون تعداد افراد زیاده به سختی میشه تک به تک افراد رو وارد کرد . از آبدیت کویری خواستم کمک بگیرم موفق نشدم

ممنون میشم بزرگواری کرده و راهنمایی کنین نیاز فوری دارم

dadsara
سه شنبه 04 مرداد 1390, 09:18 صبح
سلام
به نوع ارتباط در کوئری دقت کنید

hf.farhadi
سه شنبه 04 مرداد 1390, 17:36 عصر
با سلام دادسرای عزیز ممنون از توجه و لطفتون

چطوری میتونم در کوئری که زحمتشو کشیدین مقدار پیش فرض 0 رو برای فیلدهای تاریخ قرار بدم

چون در غیر اینصورت به اکثر کدهام گیر میده . چون برابر با صفر بودن این فیلدهارو به عنوان شرط قرار دادم

dadsara
چهارشنبه 05 مرداد 1390, 09:12 صبح
سلام
از دستور IIF می توانید برای اینکار استفاده کنید

hf.farhadi
چهارشنبه 05 مرداد 1390, 19:10 عصر
با سلام
من یه فرم که از کوئری گرفته میشه ساختم و کوئری فرم رو به روش بالا ارتباط دادم ولی فرم اطلاعات جدید قبول نمیکرد و ارور میداد.

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

اگه این موضوع حل نشه تمامی شرطهام به هم میخوره چون توی شرطهام از باقیمانده سابفرم استفاده کردم و گفتم اگه باقیمانده کمتر از صفر شد رکورد ذخیره نشه .

حالا کسانی که موقع وارد کردن اسمشون ، سابفرم خالی است برنامه اونهارو قبول نمیکنه . و پس از اینکه یه بار اسم شخص وارد جدول میشه دیگه مشکلی نداره.

ممنون از لطف همگی شما

hf.farhadi
پنج شنبه 06 مرداد 1390, 18:34 عصر
با سلام
من از نمونه دوستان و اساتید عزیز تو سایت استفاده کردم و نمونه زیر رو ساختم ولی ایراد داره لطف میکنین یه نگاه بندازین. خواهشاً اگه امکانش هست سریعتر جواب بدین نیاز خیلی فوری دارم.

میخوام فیلد شماره پرسنلی از جدول usysNpersenel به فیلد شماره پرسنلی در جدول usysMorkhasi کپی بشه . به شرطی که این شماره پرسنلی قبلاً تو این جدول وجودنداشته باشه.

فیلدهای دیگر جدول usysMorkhasi با عبارات پیش فرض تنظیم شده در حالت عادی با تکمیل فیلد شماره پرسنلی ،عبارات پیش فرض ما بقی فیلدهای رو تکمیل میکنن تا رکورد خالی نمونه. حالا نمیدونم موقع اعمال کد نویسی این عمل دوباره شدنی هست که رکورد خالی نمونه و عبارات پیش فرض کار خودشونو انجام بدن

ضمناً به دلایلی مجبور شدم اول اسم جدولها و بعضی از فرمها از عبارت "usys " استفاده کنم تا به صورت مخفی دربیاد . از گزینه tools--> option --> sistem object تیک sistem object رو بزنین جداول نمایان میشه(از شگردهای بچه گونست دیگه)

saber.110
شنبه 08 مرداد 1390, 15:21 عصر
سلام
من توی tools ----------> option چیزی بنام system object پیدا نکردم

hf.farhadi
شنبه 08 مرداد 1390, 17:25 عصر
من توی tools ----------> option چیزی بنام system object پیدا نکردم
تو تصویر زیر مشخصه دوست عزیز

دوستان کد زیر رو غیر فعال کردم وقتی فعال میشه Run-time Error 2001 رو میده

StrNpersenel = DLookup("usysNpersenel", "usysMorkhasi", "Npersenel='" & Npersenel & "'")

hf.farhadi
یک شنبه 09 مرداد 1390, 17:29 عصر
دوستان لطفاً راهنمایی کنین خیلی بهش نیاز دارم

نمونه زیر رو کمی اصلاح کردم و تاحدی کار میکنه ادامش دست شما عزیزان رو میبوسه

dadsara
دوشنبه 10 مرداد 1390, 09:53 صبح
سلام
Form1 را اجرا کنید فقط فیلد شماره پرسنلی ، نام ، ازتاریخ ، تا تاریخ را به عنوان نمونه در فرم قرار دادم باقی کار را تصور می کنم بتوانید انجام دهید
پیشنهاد : مانده مرخصی را ذخیره نکنید چون بایستی مرتباً تغییر کند پس ارزش ذخیره کردن ندارد

hf.farhadi
دوشنبه 10 مرداد 1390, 17:55 عصر
با سلام دادسرای عزیز ممنون از زحمتی که کشیدی .

من وقتی اطلاعات form1 رو تکمیل میکنم و دکمه ذخیره رو میزنم رکورد به جدول مرخصیها اضافه میشه خوب تا اینجا درست ولی مشکل من اضافه کردن و ثبت رکورد نیست در ضمن به ازای هر بار کلیک همون رکورد به طور تکراری به جدول اضافه میشه

منظور من این نبود من میخوام با کلیک کردن یه کامند تمامی افرادی رو که تو جدول شماره پرسنلی هست رو چک کنه و در صورت موجود نبودن در جدول مرخصی شماره پرسنلی شخص رو به جدول مرخصیها کپی کنه اگه این کار عملی بشه مشکلم حله .ممنون

dadsara
سه شنبه 11 مرداد 1390, 10:21 صبح
سلام
یک کوئری بصورت زیر ایجاد کنید
دقت کنید در این کوئری شما جوین را بصورت یکطرفه از جدول پدر و به طرف فرزند تغییر داده اید و شرط را برروی جدول فرزند قرار داده اید

INSERT INTO usysMorkhasi ( Npersenel )
SELECT usysNpersenel.Npersenel
FROM usysNpersenel LEFT JOIN usysMorkhasi ON usysNpersenel.Npersenel = usysMorkhasi.Npersenel
WHERE (((usysMorkhasi.Npersenel) Is Null));

hf.farhadi
سه شنبه 11 مرداد 1390, 16:04 عصر
با سلام دادسرای عزیز و گرامی ممنون از زحمتی که کشیدی . شرمنده من تواین تاپیک خیلی زحمتتون دادم

عالی بود همونی بود که میخواستم بسیار دقیق و ساده مشکلمو حل کردین خدا خیرتون بده .

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

dadsara
چهارشنبه 12 مرداد 1390, 13:08 عصر
سلام
ابتدا به دستور زیر پیامهای اکسس را غیر فعال کنید و بعد از انجام عملیات Insert یک سلکت بنویسید که تعداد رکورد را برگرداند و آنرا داخل MsgBox خود قرار دهید
docmd.setwarning False
عملیات Insert
Docmd.setwarning true

hf.farhadi
پنج شنبه 13 مرداد 1390, 00:12 صبح
با سلام و سپاس فروان

حقیقتش منظودتون رو درست متوجه نشدم . البته کدهارو تو نمونه زیر استفاده کردم ولی جواب نگرفتم .ممنون میشم اصلاح کنین

dadsara
شنبه 15 مرداد 1390, 10:11 صبح
سلام
جای کوئری را عوض کردم

Dim DupRec
Dim DupRec1
DoCmd.SetWarnings False
DoCmd.OpenQuery "Append_Ezafe", acViewNormal

MsgBox "انتقال" & " " & DupRec & " " & "ركورد با موفقيت به پايان رسيد", _
vbInformation + vbMsgBoxRight, "توجه"
If DupRec1 > 0 Then MsgBox "تعداد" & " " & DupRec1 & " " _
& "ركورد تكراري منتقل نگرديد", vbMsgBoxRight + vbExclamation, "توجه"
DoCmd.SetWarnings True

hf.farhadi
شنبه 15 مرداد 1390, 15:59 عصر
با سلام و تشکر فراوان

فقط یه مشکل کوچیک، توی پیامم تعداد شمارش فیلدهارو نشون نمیده

دادسرای عزیز میدونم خستت کردم شرمنده ، قول میدم که دیگه آخرین سئوال در این تاپیک باشه

dadsara
یک شنبه 16 مرداد 1390, 11:29 صبح
سلام
با استفاده از تابع Dcount مقدار مورد نظر را استخراج و آنرا در یک متغیر بریزید سپس در متن پیامتان آنرا نمایش دهید