ورود

View Full Version : کوئری شرطی



m.maazi
سه شنبه 17 آبان 1390, 14:44 عصر
سلام.
دوتا سوال از خدمت اساتید داشتم.
یه بانک درست کردم که واسه ثبت نامه های ارسالی شرکت کاربرد داره ولی نمیدونم چکار کنم که شماره ثبت رو اتوماتیک وارد کنه. به این ترتیب که من میخوام نامه های ارسالی سال 89 به فرمت ----21 و نامه های ارسالی سال 90 با فرمت ----22 و به همین ترتیب تولید بشه. فقط فرم باید بتونه با گرفتن تاریخ، کوچکترین شماره نامه در دسترس رو پیدا کنه.
مثلا من نامه هایی از سال 89 ثبت کردم و تا شماره 212182 رفته. حالا سال 90 شده ولی میخوام یه نامه واسه 89 ثبت کنم. فرم باید با تحلیل تاریخ وارد شده، بیاد و شماره 212183 رو واسه این نامه ثبت کنه. مسئله اینجاست که نامه همه سالها تو یه تیبل باید ثبت بشن واسه همین اگر بزرگترین شماره ثبت رو از تیبل کوئری کنم، شماره ثبت نامه های سال 90 رو انتخاب میکنه.یه سوال دیگه هم داشتم که چجوری میشه واسه فرمان SearchForRecord توی ماکروها، ورودی رو از یه تکست باکس بهش بدیم. به این شکل که توی همون فرم بالا، یه تکست باکس بذاریم و با تایپ شماره نامه و اینتر زدن، به همون رکورد پرش کنیم.

مشکل دوم مهمتره. چون اولی رو به یه جایی رسوندم. الان مشکل کوئری حل شده ولی نمیدونم شماره ای رو که کوئری به من میده رو چجوری تو تکست باکس وارد کنم.
ممنون از کمکتون.

Abbas Amiri
سه شنبه 17 آبان 1390, 19:24 عصر
سلام دوست عزیز ، اگه بتونی یک نمونه از فایل تان را جهت راهنمایی یا انجام اصلاحات برای دوستان بگذارید کارتان بهتر حل می شود.

m.maazi
یک شنبه 22 آبان 1390, 10:07 صبح
سلام.
مدیران فروم لطف کنند و پستهای من را تایید کنند تا مشکلم حل شود. ممنون

m.maazi
چهارشنبه 25 آبان 1390, 13:34 عصر
سلام.
فایل رو ضمیمه کردم. ممنون

Abbas Amiri
چهارشنبه 25 آبان 1390, 22:27 عصر
بنده پیشنهاد راحتتری برای شما دارم برای بدست آوردن بزرگترین وکوچکترین شماره نامه ورودی هر سال می توانید ازدوتابع زیر استفاده کنید.



Public Function MaxReg(intYear As Integer) As Long
MaxReg = Nz(DMax("Register", "RecievedMail", "Left(Register, 2) = " & intYear), intYear & 0) '+ 1
End Function
Public Function MinReg(intYear As Integer) As Long
MinReg = Nz(DMin("Register", "RecievedMail", "Left(Register, 2) = " & intYear), intYear & 0)
End Function



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

m.maazi
پنج شنبه 26 آبان 1390, 12:46 عصر
سلام.
ممنون آقای امیری. IntYear رو چجوری مقداردهی کنم؟ میشه کاری کرد که با توجه به تاریخ، مقداردهی بشه؟
و هنوز هم نمیدونم چجوری باید وارد تکست باکس بشه.
من این کوئری رو نوشتم واسه بزرگترین شماره هر سال:
SELECT DISTINCTROW Max([SentMail].[Register]) AS [Max Of Register]
FROM SentMail
WHERE SentMail.Register Between 210000 And 219999;
این رو هم نمیدونم چجوری وارد فیلد مربوطه کنم.

دوتا سوال دیگه هم داشتم.
اول اینکه فرم Managers ارتباطشو با تیبلش از دست داده. درستش میکنم ولی ذخیره نمیشه. میدونین چرا؟
دوم اینکه تو فرم Expense یه فیلد سبز رنگ گذاشتم. میخوام با وارد کردن شماره ثبت و زدن اینتر، به رکورد با اون شماره ثبت پرش کنم. SearchForRecord تو ماکروها میتونه کارمو راه بندازه ولی نمیدونم چجوری مقدار این تکست باکس رو به ماکرو نسبت بدم.

ممنون از کمکتون...

Abbas Amiri
پنج شنبه 26 آبان 1390, 16:52 عصر
می توانید در جای مناسب در VBA تایپ کنید : (Textbox1=MaxReg(90 یا اگر متغیر یا کنترل با مقدار فرضی "11/08/90"=sDate می باشد ، تایپ کنید ((2,Textbox1=MaxReg(Left(sDate

m.maazi
جمعه 27 آبان 1390, 14:48 عصر
سلام . ممنون از کمکتون.
راه حلی واسه دوتا سوال دیگه ندارین؟
ممنون میشم اگه نظرتونو بدونم.

Abbas Amiri
جمعه 27 آبان 1390, 16:05 عصر
در مورد فرم Manager اونو حذف کنید ویکی دیگه بسازید و در مورد دوم در روال Text78_AfterUpdate کد زیر را کپی کنید


Private Sub Text78_AfterUpdate()
Me.Filter = "Register=" & Text78
Me.FilterOn = True
End Sub

m.maazi
جمعه 27 آبان 1390, 20:16 عصر
سلام. واقعا ممنون که هرچی سوال میکنم سریع جواب میدین.
مسئله اینه که نمیخوام از فیلتر استفاده کنم. فقط میخوام به رکورد خاصی پرش کنم.
توی سایت ماکروسافت گفته که اگه میخواین برای اکشن SearchForRecord، مقدار یه تکست باکسو وارد Where Condition کنین از فرمت زیر استفاده کنیم ولی من هرکاری میکنم جواب نمیده. در این مورد اگر راهنمایی کنین ممنون میشم.
="Description = '" & Forms![frmCategories]![txtDescription] & "'"

آدرس برای توضیحات بیشتر:
http://msdn.microsoft.com/en-us/library/bb177421%28v=office.12%29.aspx

Abbas Amiri
جمعه 27 آبان 1390, 21:36 عصر
در همان محل تایپ کنید : DoCmd.SearchForRecord , , , "Register=" & Text78

m.maazi
شنبه 28 آبان 1390, 09:05 صبح
واقعاً عالی بود...
ممنون از راهنماییتون.

m.maazi
شنبه 28 آبان 1390, 09:17 صبح
سلام.
از این که جواب سوالامو اینجا گرفتم کلی ذوق کردم!

دوتا مسئله بود واسه اینکه کار این دیتابیس بهتر بشه.
تو فیلد تصویر، میتونیم اسکن سند رو بذاریم (به روش Drag and Drop). میخواستم ببینم امکانش هست که بعد از وارد کردن عکس، خود عکس بصورت کوچیک شده تو همون فیلد نمایش داده بشه و نه اسم و آیکون؟
دوم اینکه تو فرم Report فیلدی رو ساختم که تایتلش رو "موضوع" تعیین کردم. میخوام با وارد کردن یه عبارت کوچیک و زدن دکمه گزارش گیری، تمام موضوعاتی که اون عبارت رو شامل میشن لیست کنه. کوئری که گذاشتم، توی دستور SQL از Like استفاده کردم ولی جواب نمیده:

SELECT Expense.Register, Expense.Cost, Expense.PayListNo, Expense.Date, Expense.Title, Expense.Calculate
FROM Expense
WHERE Expense.Title Like Forms!Report!Text59
ORDER BY Expense.Date;

میشه بگین که مشکلش چیه؟
راستش سوالام زیاده واسه اینکه کار دیتا بیس خوب بشه. ولی روم نمیشه همه رو یجا بپرسم...
دوباره ممنونم که وقت میذارین و مشکلات امثال من رو که چیز زیادی بلد نیستن رو حل میکنین.:قلب:

dadsara
شنبه 28 آبان 1390, 18:25 عصر
سلام
بعد از نوشتن Like از * استفاده نکرده اید