ورود

View Full Version : سوال: انتخاب آخرين ركورد يك جدول در فرم مربوط به آن



ali_zali
یک شنبه 11 مرداد 1388, 09:31 صبح
سلام
ميخوام آخرين ركورد جدول رو (كه مربوط به يه شماره انديكاتور هستش ولي بنا به دلايلي اتونامبر نيست) پيدا بشه و در فيلد مربوط به فرم همون جدول قرار بگيره
من با يه ماكرو و دستورات
OPENTABLE
و
GOTORECORD و ركورد LAST
اخرين رو پيدا كردم
ولي چجوري ميشه اينو بردش توي فيلد فرم براي ايجاد يه ركورد جديد
شماره اين ساختار رو دارن
87-01-01
87-01-02
,...
88-01-01
88-01-02
و...
شماره اول مربوط به سال است و نمي شود اتونامبر باشد

dadsara
یک شنبه 11 مرداد 1388, 09:41 صبح
سلام
دوست عزیز البته همیشه اینطور نیست که آخرین شماره بزرگترین شماره باشد
فکر کنم منظور شما اینه که در هر سال بزرگترین شماره را پیدا کند در انتها آنرا +1 کند در فیلد مورد نظر بریزد و در صورت نیاز آنرا ذخیره کند
اگر چنین باشد ، شما می توانید با استفاده از توابع Left و Right بسته به اینکه عدد سال در ابتدا و یا انتها می باشد آنرا استخراج کرده و . . .
(فرض کنید عدد بدست آمده با نام IDMax می باشد) بعد از استخراج کافی است
FieldName=IDMax
به شما توصیه می کنم هنگام ذخیره کردن رکورد ، ابتدا این عمل (استخراج عدد) را انجام دهید نه زیر کلی جدید ، چرا که اگر برنامه شما در شبکه در حال اجرا باشد شاید همان زمان فرد دیگری قصد ذخیره داشته باشد

ali_zali
یک شنبه 11 مرداد 1388, 09:49 صبح
سلام
فکر کنم منظور شما اینه که در هر سال بزرگترین شماره را پیدا کند در انتها آنرا +1 کند در فیلد مورد نظر بریزد و در صورت نیاز آنرا ذخیره کند

دقیقا همین رو میخوام

میشه بیشتر توضیح بدید
فیلدهای بنده به علت اینکه از یک دیتا اکسل وارد شده اند به صورت عدد نیستند و به صورت text هستند.
شماره ها شماره اندیکاتور هستند با این فرمت
شماره سریال-01-شماره سال
مشکل این بوده که اعداد زیادی از اکسل وارد اکسس شده اند ( حدود 1000 رکورد)
و با دانش بنده فعلا چاره ای نداشته ام که اخرین فیلد رو ببینم و دستی عدد بعدی رو وارد کنم
لازم به ذکره که بایستی در سال بعد عدد سال هم عوض بشه یعنی اتو نامبر نیست
اگر کلا راه کار برای حل این موضوع دارید ممنون میشم راهنمایی کنید

bita_ziba77
یک شنبه 11 مرداد 1388, 09:53 صبح
میشه بیشتر توضیح بدید
فیلدهای بنده به علت اینکه از یک دیتا اکسل وارد شده اند به صورت عدد نیستند و به صورت text هستند.
آخرین عدد بزرگترین فیلد هم هست
شماره ها شماره اندیکاتور هستند با این فرمت
شماره سریال-01-شماره سال
مشکل این بوده که اعداد زیادی از اکسل وارد اکسس شده اند ( حدود 1000 رکورد)
و با دانش بنده فعلا چاره ای نداشته ام که اخرین فیلد رو ببینم و دستی عدد بعدی رو وارد کنم
لازم به ذکره که بایستی در سال بعد عدد سال هم عوض بشه یعنی اتو نامبر نیست
اگر کلا راه کار برای حل این موضوع دارید ممنون میشم راهنمایی کنید

با سلام
شما از تابع dmax استفاده كنيد كه ماكسيمم مربوط به هر فيلدي را پيدا ميكند حتي اگر فرمت آن text با شد تابع آن به شرح زير است:

dmax("fieldname","tablename")

dadsara
یک شنبه 11 مرداد 1388, 10:00 صبح
دقیقا همین رو میخوام

دوست عزیز توابع Left و Right برروی فیلدهای متنی (تکست) عمل می کنند ، چنانچه قصد دارید زودتر به نتیجه برسید تعداد از رکوردهای خود و همچنین فقط فرمی که قصد دارید عملیات روی آن انجام شود را آپلود کنید

dadsara
یک شنبه 11 مرداد 1388, 10:03 صبح
با سلام
شما از تابع dmax استفاده كنيد كه ماكسيمم مربوط به هر فيلدي را پيدا ميكند حتي اگر فرمت آن text با شد تابع آن به شرح زير است:


dmax("fieldname","tablename")

دوست عزیز می توانید مطلب خود را در فایل ضمیمه انجام دهید

ali_zali
یک شنبه 11 مرداد 1388, 10:30 صبح
چنانچه قصد دارید زودتر به نتیجه برسید تعداد از رکوردهای خود و همچنین فقط فرمی که قصد دارید عملیات روی آن انجام شود را آپلود کنید
ممنون از لطف شما
فقط اگر لطف کنید همراه آموزش باشد و نه فقط عمل کردن که ما هم از شما اساتید چیزی یاد بگیریم

ali_zali
یک شنبه 11 مرداد 1388, 11:39 صبح
دوست عزیز می توانید مطلب خود را در فایل ضمیمه انجام دهید
من متوجه نشدم در فايل شما چه چيزي هست
من فايل خودم رو كه دقيقا داراي مطالب بود آپلود كردم ولي فايل شما فقط يه جدول داره
ميشه توضيح بديد

dadsara
یک شنبه 11 مرداد 1388, 11:55 صبح
دوست عزیز ، من آن فایل را برای Bita_Ziba77 ارسال کرده بودم

ali_zali
یک شنبه 11 مرداد 1388, 12:01 عصر
دوست عزیز ، من آن فایل را برای Bita_Ziba77 ارسال کرده بودم
لطف ميكنيد فايل من رو هم يه بررسي كنيد ممنون ميشم كه اين همه وقت مي گذاريد

dadsara
یک شنبه 11 مرداد 1388, 13:09 عصر
دوست عزیز
فایل ضمیمه را نگاه کنید ، با زدن کلید مربوطه، بزرگترین عدد (با استفاده از تابع mid ) استخراج شده سپس +1 و در محل مربوطه قرار میگیرد
اما همانگونه که خدمت جنابعالی در پستهای بالا عرض نمودم باید شما این عمل را در هنگام ذخیره کردن اعمال نمائید
ابهام : من نمی دانم که دو رقم چهارم و پنجم (01) مربوط به چیست ؟
باتوجه به دو رقم ابتدای شماره که ظاهرا مربوط به سال می باشد این مقایسه در کدامیک از فیلدها باید انجام گیرد ، در حال این عمل انجام نمی شود
در نمونه فعلی قصد داشتم فقط به شما یک ایده بدهم

ali_zali
یک شنبه 11 مرداد 1388, 14:59 عصر
دوست عزیز
فایل ضمیمه را نگاه کنید ، با زدن کلید مربوطه، بزرگترین عدد (با استفاده از تابع mid ) استخراج شده سپس +1 و در محل مربوطه قرار میگیرد
اما همانگونه که خدمت جنابعالی در پستهای بالا عرض نمودم باید شما این عمل را در هنگام ذخیره کردن اعمال نمائید
ابهام : من نمی دانم که دو رقم چهارم و پنجم (01) مربوط به چیست ؟
باتوجه به دو رقم ابتدای شماره که ظاهرا مربوط به سال می باشد این مقایسه در کدامیک از فیلدها باید انجام گیرد ، در حال این عمل انجام نمی شود
در نمونه فعلی قصد داشتم فقط به شما یک ایده بدهم
خوب من بايد ابتدا ابهام رو برطرف كنم
من تابع mid رو بررسي كردم و ديدم مياد تعداد كاركتر خاصي رو از يك جاي يك متن جدا ميكنه و بر ميگردونه درسته؟
خوب ابهام رو رفع كنم
دو رقم سمت چپ مربوط به عدد سال هستش
(در آينده قصد دارم اصلا اين عدد از تاريخ صدور دستور كار استخراج بشه . يعني اگه تاريخ صدور دستور كاري 88/1/1 بود اين دو رقم باشه 88 و اگه 89/1/1 بود بشه 89 اين تو پرو‍ژه بعديه چون تاريخهاي من هنوز text هستند و تبديل به date نشدند)
دو رقم وسط مربوط به فرمهاي ماست. مثلا واسه دستور كارها همش 01 هستش ميشه به عنوان يه رقم ثابت بهش نگاه كرد
دو رقم ( و جلوتر كه بريم سه رقم) شماره انديكاتور است كه بصورت مسلسل وارد ميشه و اون فيلد بايد با عدد بعد اون پر بشه.
در ضمن بايد prefix هاي اون عدد كه مثلا براي امسال 01-88 هست هم باهاش باشه
اين حالت ايده آل هستش و اگه نشه هم خود كاربر تايپ ميكنه
اما كلا ماژول شما يه ارور هم داد(run time 3464 )
خيلي ممنونم از وقتي كه ميگذاريد

dadsara
یک شنبه 11 مرداد 1388, 16:45 عصر
در ضمن بايد prefix هاي اون عدد كه مثلا براي امسال 01-88 هست هم باهاش باشه
هنگام ذخیره کردن باید این تکست را به ابتدای عدد استخراج شده بچسبانید سپس ذخیره کنید

چون تاريخهاي من هنوز text هستند و تبديل به date نشدند
اگر تاریخهای خود را Date درنظر بگیرید باید از توابع تاریخ میلادی استفاده کنید

ماژول شما يه ارور هم داد(run time 3464 )

در حال حاضر روی کامپیوتر خودم چک کردم درست عمل می کند ، رفرنسهای خود را چک کنید

ali_zali
دوشنبه 12 مرداد 1388, 07:47 صبح
ممنون از وقتی که میگذارید
1- من ارور دارم هنوز
من تابع شما رو که نگاه کردم(یعنی دارم چیز یاد میگیرم فهمیدم که با این قسمت
Mid([no],7,10
میاد از فیلد no از هفتمین کاراکتر 10 کاراکتر جدا میکنه
با int
جز صحیحش استخراج میشه
بقیه اش رو یه توضیحی میدید تا من بتونم دی باگ کنم
در ضمن اخرین عدد من 95-01-88 هستش
آیا عدد بعدی که به شما میده 96 هستش؟
2- در ضمن میشه بگین قبل از ذخیره چجوری میشه این پیش عدد رو بهش اضافه کرد قبل از ذخیره کردن (عدد 01-88 منظورم هست)؟
ممنون از وقتی که میگزارین

dadsara
دوشنبه 12 مرداد 1388, 07:58 صبح
بقیه اش رو یه توضیحی میدید تا من بتونم دی باگ کنم عدد استخراج شده +1 شده به تکست باکس مربوطه انتقال پیدا می کند

آیا عدد بعدی که به شما میده 96 هستش؟ باتوجه به اینکه شما اعداد را بصورت تکست مرتب می کنید و رشته از سمت چپ خوانده می شود شما عدد 95 را می بینید در حالیکه آخرین عدد شما 320 می باشد


میشه بگین قبل از ذخیره چجوری میشه این پیش عدد رو بهش اضافه کرد قبل از ذخیره کردن (عدد 01-88 منظورم هست)؟ کافی است مجددا عدد استخراج شده را به تکست تبدیل کنید و 01-88 را با آن جمع کنید

ali_zali
دوشنبه 12 مرداد 1388, 08:52 صبح
باتوجه به اینکه شما اعداد را بصورت تکست مرتب می کنید و رشته از سمت چپ خوانده می شود شما عدد 95 را می بینید در حالیکه آخرین عدد شما 320 می باشد

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


کافی است مجددا عدد استخراج شده را به تکست تبدیل کنید و 01-88 را با آن جمع کنید
میشه یه توضیح کوچک بدین
البته با توجه به مشکل بالا هنوز این مساله الویت نداره

dadsara
دوشنبه 12 مرداد 1388, 12:23 عصر
سلام
دوست عزیز اگر دقت می کردید در استخراج بزرگترین عدد هیچ شرطی قرارداده نشده بود
اگر به چند پست بالاتر همین تاپیک مراجعه کنید ملاحظه می کنید که عرض کردم هنگام ذخیره کردن باید عمل استخراج صورت گیرد این تذکر بخاط این بود که هنگام ذخیره کردن فیلد تاریخ موردنظر در فرم درج شده است و عمل استخراج براساس ان صورت میگیرد
در هر حال اگر جنابعالی توابع تاریخ مربوط به آقای آزادی را داشته باشید یکی از این توابع با نام Shamsi تاریخ روز را بصورت شمسی برمی گرداند در نمونه زیر که عدد 95 را بعنوان بزرگترین استخراج می شود فرض براین قرارداده شده است که قصد استخراج بزرگترین عدد سال جاری را دارید

Set rst = CurrentDb.OpenRecordset(" SELECT Max(Int(Mid([no],7,10))) AS Maxid FROM table1 WHERE (((Left([No],2))=Left(shamsi(),2)))")

ali_zali
سه شنبه 13 مرداد 1388, 08:22 صبح
واقعا شرمنده میکنید از این همه وقت
من فایل رو آپلود کردم دوباره
نمیدونم چرا رو این سیستم من هیچ عددی بر نمیگردونه
یه نیگاه بهش میندازین ببینی جایی ایرادی نداشته باشه
فقط آدرس dll تنها متغیره که من اول کار درستش میکنم

dadsara
سه شنبه 13 مرداد 1388, 08:42 صبح
نمونه جنابعالی رو دیدم ، اگر می خواهید از Dll استفاده نکنید می توانید از ماژولی که داخل فایل خودتان اضافه کردم استفاده کنید
در دستگاه بنده بعد از اجرای کلید مربوط به استخراج عدد 96 ظاهر می گردد.

ali_zali
سه شنبه 13 مرداد 1388, 11:28 صبح
خوب الان مشکلی نداریم و عدد 96 استخراج میشه
خوب این ماژول پیچیده شما رو من اصلا سر در نیاوردم.
من بهتره که از همون dll استفاده کنم چون در این شرایط تاریخ های من به هم میریزن و میشن رشته های متنی و من لازم دارم که اونها تاریخ بمونن چون محاسبات تاریخی در فرمها و جداول دیگر روی آنها انجام میشه
من تا حدودی حدس زدم که ماژول شما همون کارهای dll رو داره انجام میده
ولی نفهمیدم چطوری باید از کار بیندازمش تا بتونم صحت عملکرد برنامه ام رو با تابع dll تست کنم(البته جدیدا اکسس من ارور میده که نمیتونه vb باز کنه چون ممکنه تو شبکه باشه که نیست اصلا)
ممنون میشم در این خصوص کمک کنید
من اصلا کل فایلم را آپلودش کنم تا شما استاد گرامی روش بررسی کنید
لازم به ذکره که من آموزش اکسس رو هم دارم با نوشتن همین برنامه همزمان جلو میرم

paydarhost.com/db.rar

dadsara
سه شنبه 13 مرداد 1388, 11:33 صبح
در تابع ضمیمه شده قبلی تمام محاسبات از جمله اضافه کردن عددبه تاریخ ، کسر دو تاریخ ، صحت تاریخ و . . . انجام می گیرد

ali_zali
سه شنبه 13 مرداد 1388, 12:05 عصر
در تابع ضمیمه شده قبلی تمام محاسبات از جمله اضافه کردن عددبه تاریخ ، کسر دو تاریخ ، صحت تاریخ و . . . انجام می گیرد
همانطور که اشاره کردم بنده در اکسس صفر کیلومترم و dll را تازه یاد گرفته بودم
اگر روی این ماژول راهنمایی هست بفرمایید تا مطالعه کنم
در ضمن فایل من یه تغییراتی کرد که دستور کارها سه رقمی شد و نحوه سورت کردن تغییر کردن در نتیجه بهتره شما این فایل رو زحمتش رو بکشید

http://paydarhost.com/inspection.rar

dadsara
سه شنبه 13 مرداد 1388, 12:54 عصر
اگر روی این ماژول راهنمایی هست بفرمایید تا مطالعه کنممثل سایر ماژولها کافی است هنگام استفاده از آنها فقط آنرا صدا کنید
فرض کنید قصد دارید تاریخ جاری سیستم شما بصورت پیش فرض در Text1 قرار بگیرد

Text1=shamsi()و یا . . .

دستور کارها سه رقمی شد و نحوه سورت کردن تغییر کردن وقتی شما از کاراکتر هفتم رشته را به طول 10 کارکتر می خوانید دیگر فرقی بین تعداد ارقام از نظر دورقمی و 3 نمی کند

ali_zali
سه شنبه 13 مرداد 1388, 13:09 عصر
مثل سایر ماژولها کافی است هنگام استفاده از آنها فقط آنرا صدا کنید
فرض کنید قصد دارید تاریخ جاری سیستم شما بصورت پیش فرض در Text1 قرار بگیرد

Text1=shamsi()و یا . . .

خوب آیا تابع های این ماژول با تابع های اون dll یکی است
لیست توابعش رو کجا میشه دید؟
میدانم داخل خود ماژول جملات سیز رنگ راهنما هستند
منظورم جایی مدون شده (و فقط لیست توابع و کاری که میکنن)و ساده برای ما تازه کارها



وقتی شما از کاراکتر هفتم رشته را به طول 10 کارکتر می خوانید دیگر فرقی بین تعداد ارقام از نظر دورقمی و 3 نمی کند
این اروری که میدهد که نمیگذارد vb باز شود دیگر چه داستانی است
فایل اصلی من را مشاهده کردید؟

ali_zali
شنبه 17 مرداد 1388, 09:05 صبح
سلام مجدد
این راهنمای این ماژول خبری ازش نشد
باید از تو خودش بررسی کرد؟

ali_zali
شنبه 17 مرداد 1388, 15:11 عصر
همه چيز درست كار ميكنه ولي در فايل من همه چيز برعكسه
در فايل مثال همه چيز درسته ولي در فايلي كه ادرسش نوشته شده مشكلي هست كه هيچ عددي بر نميگرده
چیزی که مرا دیوانه کرده این است که چرا این فایل من درست نمی شود
یه نگاهی بهش می اندازید و توضیح هم بدهید بی زحمت
این کامند قراره الان در وضعیت موجود شماره 103 رو برای من در فیلد text1 از فرم inspection_normal_work_order_register وارد کنه و بعد از اینکه بقیه اطلاعات هم وارد شد (هنوز طراحی نشده) وارد جدول inspection_normal_work_order بشه
ولی ارور میده
میشه بگید مشکلش چیه
اینم ادرس فایل



http://www.paydarhost.com/inspection.rar

dadsara
یک شنبه 18 مرداد 1388, 08:18 صبح
نمونه اصلاح شده جنابعالی

ali_zali
دوشنبه 19 مرداد 1388, 07:01 صبح
ممنون
مشکل حل شد
فقط میشه راهنمایی کنید چجوری درست شد این مشکل
در ضمن این تاپیک دیگه قاعدتا باید بسته بشه

dadsara
دوشنبه 19 مرداد 1388, 07:23 صبح
من از DLL ها استفاده نکردم و ماژول جنابعالی را غیر فعال کردم

ali_zali
دوشنبه 19 مرداد 1388, 12:31 عصر
خوب من برای dll یک راهنمای کامل داشتم
ولی ماژولی که همان کار را میکند راهنمایی برای توابعش ندارم
شما چیزی سراغ دارید