View Full Version : آخرین رکورد ثبت شده توسط کاربر در بانک رو چطور پیدا کنم
محمد دادودنیا
دوشنبه 13 آذر 1385, 06:00 صبح
با سلام خدمت همه
چطور میشه آخرین رکوردی که در یه بانک ذخیره می شه رو پیدا کرد
با Table1.EOF در ADO یا BDE میشه اینکارو کرد ولی راهی نیست که همیشه درست باشه مثلا
ممکن بانک Sort شده باشه یا نه یا .... و دیتای که کاربر وارد کرده در آخر قرار نگیره
روشهای ارائه شده چه با استفاده از ADO یا BDE چه با در SQLServer فرقی نداره ولی اگه هر دوش باشه معرکه اس
البته من در حال حاضر یه فیلد GUIDدر بانکم تعریف کردم با ثبت کاربر به اون فیلد مقدار می دم بعد اون مقدار رو جستجو می کنم آخرین رکورد رو پیدا می کنم
شاید بپرسید چرا
چون فیلد کلیدی من AutoNumber است و اون برام مهمه
mzjahromi
دوشنبه 13 آذر 1385, 06:58 صبح
ببینید در حالت عادی تفاوتی بین رکورد های درج شده در بانک وجود ندارد و مشخص نیست که کدوم اول وارد شده اند مگر اینکه همونطور که خودتون گفتید از فیلد autonumber استفاده کنید در سایر موارد رکوردها بر اساس کلید اصلی چیده میشوند. در حالت autonumber هم میتوانید از Query زیر برای پیدا کردن آخرین رکورد استفاده کنید
select max(autonumberfield)
from tablename
MNosouhi
دوشنبه 13 آذر 1385, 15:30 عصر
چطور میشه آخرین رکوردی که در یه بانک ذخیره می شه رو پیدا کرد
همه جا به جای دستور Insert از Append استفاده کنید . دستور Append رکورد جدید رو به انتهای جدول اضافه می کنه ، در اینصورت با متد Last می تونید به آخرین رکورد دست پیدا کنید . البته اگر جدولتون بر اساس فیلد خاصی سورت بشه ، این روش دیگه کارساز نیست و باید از یک فیلد عددی برای شناسایی آخرین رکورد استفاده کنید.
برای سهولت می تونید یک متغیر تعریف کنید و هنگامی که برنامه اجرا میشه با کدی که آقای ذوالقدر عزیز گذاشتند شماره آخرین رکورد را به دست آورده و در متغیر ذخیره کنید ، حالا هر وقت که رکورد جدیدی اضافه می کنید ، یکی به متغیر اضافه کنید.
محمد دادودنیا
سه شنبه 14 آذر 1385, 04:23 صبح
همه جا به جای دستور Insert از Append استفاده کنید . دستور Append رکورد جدید رو به انتهای جدول اضافه می کنه ، در اینصورت با متد Last می تونید به آخرین رکورد دست پیدا کنید . البته اگر جدولتون بر اساس فیلد خاصی سورت بشه ، این روش دیگه کارساز نیست و باید از یک فیلد عددی برای شناسایی آخرین رکورد استفاده کنید.
برای سهولت می تونید یک متغیر تعریف کنید و هنگامی که برنامه اجرا میشه با کدی که آقای ذوالقدر عزیز گذاشتند شماره آخرین رکورد را به دست آورده و در متغیر ذخیره کنید ، حالا هر وقت که رکورد جدیدی اضافه می کنید ، یکی به متغیر اضافه کنید.
تشکر از هر دو جواب
من از دستورات SQL استفاده می کنم از Append نمی خوام استفاده کنم
ضمنا در مورد جواب آقای ذوالقدر اون Group کردن برای چیه ؟
اَرژنگ
سه شنبه 14 آذر 1385, 06:39 صبح
شما احتمالاً مشکلتان یک چیزه دیگه است.
شما میخواهید که بعد از اضافه کردنه رکورد به داتابیس بتونید یکجوری بهش اشاره کنید، برایه اس*کیو*ال سرور از
AutoNumberFiled خودش باید استفاه کرد، ۶ ماه پیش جواب این روش را فرستاده بودم، ولی این روش شما که از گوئید استفاده میکنید بهتره. استفاده از گوئید برایه فیلد کلیدی از استفاده از AuoNumber بهتر است.
در ضمن روش نگه داشتن َخرین مقدار در یک متغییر برایه سیستمهایی که در شبکه باید کار کنند خوب نیست، ولی برایه برنامه*هایی تک کاربری درست کار میکنه.
mzjahromi
سه شنبه 14 آذر 1385, 07:39 صبح
ضمنا در مورد جواب آقای ذوالقدر اون Group کردن برای چیه ؟
ببخشید.
اشتباه شد.
تصحیح شد.
محمد دادودنیا
چهارشنبه 15 آذر 1385, 03:02 صبح
تشکر از جوابهاتون
ictboy
دوشنبه 21 اسفند 1385, 13:27 عصر
ببینید در حالت عادی تفاوتی بین رکورد های درج شده در بانک وجود ندارد و مشخص نیست که کدوم اول وارد شده اند مگر اینکه همونطور که خودتون گفتید از فیلد autonumber استفاده کنید در سایر موارد رکوردها بر اساس کلید اصلی چیده میشوند. در حالت autonumber هم میتوانید از Query زیر برای پیدا کردن آخرین رکورد استفاده کنید
select max(autonumberfield)
from tablename
با سلام
من تو برنامم می خوام فیلد کد را به صورت خودکار از داخل برنامه کد بدم ولی نمی خوام از AutoNumber استفاده کنم . از دستور Max تو SQL استفاده کردم . با این کار برای اولین بار درست کار می کنه ولی بعد از اینکه از برنامه خارج می شم و دوباره وارد می شم هر بار که این دستور فراخوانی می شه مقدار بزرگ رو بهم نمی ده . من باید چی کار کنم؟
mzjahromi
دوشنبه 21 اسفند 1385, 22:18 عصر
کدی که استفاده کردید رو بذارید اینجا
ictboy
سه شنبه 21 فروردین 1386, 10:05 صبح
با سلام
کدی که برای پیدا کردن آخرین مقدار جدول از آن استفاده می کنم همان کدی است که در چند پست قبلی دوستان گذاشتن . من این مورد رو خارج از پروژه ام نیز تست کردم. ولی اونجا هم یه مشکل دارم. من اولین کد را یک در نظر می گیرم و برای هر رکورد یک مقدار به اون اضافه می کنم ولی بعد از رکوردی که با کد 9 ثبت می کنم دستور Max بزرگترین کد را 9 در نظر می گیره. نمیدونم تونستم درست منظورم رو بیان کنم. به عبارت دیگه من کد 10 رو تو جدول دارم ولی دستور Max بزرگترین کد رو 9 نشون می ده.
در هر صورت راهی برای درست کردن یک AutoNumber دستی اگه در نظر دارید ممنون میشم راهنماییم کنید.
راستی اگه بخوام یک فیلد AutoNumber تو Sql Server داشته باشیم نوع فیلد رو باید چیزی بزاریم . من همه نوع فیلدها رو چک کردم چیزی دستم نیومد.
متشکرم
V60
یک شنبه 09 اردیبهشت 1386, 23:25 عصر
سلام
فکر می کنم مشکل شما این است که نوع فیلد خود را text انتخاب کرده اید ، برای همین 9 را بزرگتر از 10 می داند ، شما نوع فیلد را به عددی تغییر دهید درست می شود .
nimamohammadi
دوشنبه 19 بهمن 1388, 21:23 عصر
یک فیلد از نوع bigint تعریف می کنی بعد در قسمت پایین identity رو yes می کنی .
modernboy3
دوشنبه 19 بهمن 1388, 23:01 عصر
دوست عزیز اگه از sql server استفاده میکنی بهترین راه حل استفاده از store procedure
به این صورت که کوئری درح رو مینویسی و در اخر دستور
Return @@Identity
این دستور مقدار فیلد autonumber که درج کردی رو برات بازگشت میده من تو C# از این استفاده کردم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.