PDA

View Full Version : کمک فوری در دلفی‌ 7



delphi7
یک شنبه 01 خرداد 1384, 04:17 صبح
با سلام به اساتید
من یک سوال داشتم در دلفی‌ 7 .
من یک برنامه نوشتم که در هنگام ثبت فرم مثلا اطلاعات را وارد می‌کنیم و سپس در بانک اطلاعاتی‌
ذخیره می‌شه.حالا می‌خوام کدی بنویسم که اگه مثلا یک کد کاربر من قبلان ثبت کردم در بانک ام
حالا دوباره اگه همون کد را وارد کنم در database بگرده و بگه که این کد قبلان ثبت شده .
من این کار را اینطوری انجام میدم
مثلا:if edit1.text=datamadual.query1.fieldbyname('code').a sstring then
یک پیغام بده که این قبلان وجود داشته.
مشگلم اینجاست که اگه من اولین کد کاربر ،رکوردم را وارد کنم پیدا می‌کنه ولی‌ گه
کدوجودد اشته مثلادومین رکوردم یا عنوم مین رکوردم رابزنم دیگه پیغام نمیده که قبلااین
یعنی‌ این که مثلا فرم ثبت مشتری دارم که هر مشتری کد داره من چطوری می‌تونم این کار را بکنم که بگم اگه این کد وجود داشت در بانکم بگه وجود دارد یا ثبت شده در حال حاضر با این سودی که من میگم اگه کد مشتری اولین رکورد را دوباره وارد کنم پیغام میده اگه کد مشتری دومین رکورد را وارد کنم دیگه پیغام نمیده و دوباره با وجود این که این کد ثبت شده باز دوباره ثبت می‌کنه یعنی‌ فقط کد اولین رکوردم رو چک می‌کنه و می‌خوام زمانی‌ که مثلا دیگه کد 4 اعمین رکوردم هم درست پیدا کرد گفت وجود داره قبلان اشاره گر من آنجا نباشه چون پیغام میده که آقا این وجود داره پس نمی‌تونیم در بانک این کد رو ثبت کنیم پس اگه اشاره گر هم همون جا باشه دفعهٔ بعدی دیگه از رکوردی که اشرگر الان هست به بد میگرده .درست خوب حالا یک استادی به من بگه من چطوری می‌تونم این کار رو بکنم که بد از پیدا کردن پیغام که میدم وجود داره اشاره گر بره اول چون ممکن یک کد دیگم دیگمبدم که اونم وجود داشته باشه .کسی‌ کمکم کنه ممنون میشم.
توضیح کامل دادم که جای سالی‌ نباشه.متشکر

Ali_Hashemi
یک شنبه 01 خرداد 1384, 08:52 صبح
سلام
روش چک کردنت کاملا اشتباهه چون فقط رکورد جاری رو چک میکنه. شما باید روی جدول سرچ کنی اگه
ازقبل ثبت نشده بود اونوقت ثبت رو انجام بدی.
با استفاده از دستور Locate این کار رو انجام بده. اگر رکوردی پیدا کرد True رو بر میگردونه .




If datamadual.query1.Locate('code',edit1.text,[]) Then
Showmessage('Please Enter Another Code!')
else
//register user code to database

میتی دات نت
یک شنبه 01 خرداد 1384, 08:59 صبح
به نام خدا

یه مقداری متن سئوال مفهوم نیست . ما که زیاد متوجه نشدیم :sunglass:

javidtaheri
یک شنبه 01 خرداد 1384, 17:01 عصر
یک کوری استفاده کن
در کوری این دستور را بنویس
select * from table1 where code = edit1.text
ودر رویداد خروج از edit
query1.open
if query1.recordcount >1 then
کد قبلا موجود بوده است//البته در اینجا میتونی پردازش لازم خود ر انجام دهی :flower:

delphi7
یک شنبه 01 خرداد 1384, 18:02 عصر
با سلام
از همهٔ شما متشکرم
آقا جاوید بد از این کار در کوری که منم همین کار رو می‌کنم خوب اشاره گر میره ابتدای فایل چون ممکن هست که یک کد دیگه بزنیم که قبلان در بانک موجود باشه ولی‌ مثلا رکورد 5 ام باشه متوجه میشید

حمیدرضاصادقیان
یک شنبه 01 خرداد 1384, 22:12 عصر
دوست عزیز با این کوری مشکلی پیش نمیاد و درست کار میکنه .
شما یک بار امتحان کن.


adq.sql.add('select code from table1 where code =: cd');
adq.parameters[0].value := edit1.text;

میتونی از کد بالا هم استفاده کنی. :sunglass:

delphi7
دوشنبه 02 خرداد 1384, 00:32 صبح
سلام آقای صادقین از شما متشکرم و همینطور از بقیه

Ali_Hashemi
دوشنبه 02 خرداد 1384, 08:50 صبح
:confy2:
ای بابا کدی که من گفتم که خیلی راحت تره. دقیقا هم جواب میده . :confy2:


اگه حتما دوست داری که با استفاده از SQL این کارو بکنی بگو تا بگم.
:wise2:

javidtaheri
دوشنبه 02 خرداد 1384, 11:07 صبح
دوست عزیز
query یک گزارش از بانک تو میگیره اگر شماره تکراری باشه query.recordcount=2 میشه مشکلی نداره که
اگر ممکنه کد یا برنامه ات را اینجا بگذار شاید من منظورت را متوجه نمیشم

javidtaheri
دوشنبه 02 خرداد 1384, 11:09 صبح
به نظرم از نامساوی باید استفاده کنی شاید مشکل این باشدquery.recordcount >1
Index جدولت را چک کن

delphi7
سه شنبه 03 خرداد 1384, 00:01 صبح
سلام دوست عزیز
اگه ممکن هست علی‌ آقا برام با sql بنویس کودش رو ممنون دستت درد نکنه.

Ali_Hashemi
سه شنبه 03 خرداد 1384, 09:09 صبح
خوب آقا
فرض میکنیم که :
1-کدی که قرار است ثبت شود از Edit1 خوانده می شود.
2-همانطور که در سوال شما مشخص است فیلد code از نوع String است.
3-فرض میکنیم نام جدول شما MyTable.db باشد و در مسیر بر نامه قرار داشته باشد.

حالا برای اینکه چک کنیم که کد قبلا در بانک ثبت شده یا نه ابتدا با یک دستور sql تعداد تمام
رکوردهایی را بدست می آوریم که کد آنها با کد جدید برابر است. یعنی اینکه آیا کدی در بانک موجود هست که
با این کد جدید برابر باشد یا نه. بعدش هم بر این اساس پیغام خطا نمایش داده میشه یا اینکه رکورد ثبت میشه.
این هم کدش :




query1.SQL.Clear;
query1.SQL.Add('select * From "MyTable.db" Where code='+QuotedStr(edit1.text));
query1.Open;

if Query1.RecordCount>0 then
// This code already exists
else
//add this code to database




:sunglass:

javidtaheri
سه شنبه 03 خرداد 1384, 16:48 عصر
علی آقا فکر کنم رکورد جاری ثبت نشده را هم باید در نظر گرفت
بنابراین
(تعداد رکورد بزرگتر از یک)
if Query1.RecordCount>1 then
// This code already exists
else
//add this code to dat

Ali_Hashemi
چهارشنبه 04 خرداد 1384, 10:49 صبح
نه ! :strange:

لطفا دقت کن !
شما عمل چک کردن کد رو قبل از اینکه کد جدید رو در دیتا بیس ثبت کنی انجام میدی

اگر جواب بزرگتر از 0 بود یعنی اینکه یک رکورد قبلا با همین کد ثبت شده و شما این کد رو ثبت نمیکنی

در غیر اینصورت تازه شما عمل ثبت رکورد جدید رو انجام میدی.

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

کدی که گفتم رو و همچنین کد خودت رو امتحان کن با مقادیر تکراری. متوجه میشی که کدوم درست جواب میده.

موفق باشی.

javidtaheri
پنج شنبه 05 خرداد 1384, 10:36 صبح
فکر میکنم queryرکورد جاری را در نظر میگیره حتی اگر ثبت نباشد حالا ببینیم دوستمان در برنامه اش چک کنه مشکا 0و یا 1 حل میشه :kaf: