ورود

View Full Version : سوال: نمايش پيغام خطا در هنگام خالي بودن فيلدها



hentjanson
چهارشنبه 26 تیر 1387, 11:42 صبح
سلام دوستان
من يك كد insert دارم حالا مي خوام اگه mask edit 1 و ... هنگام ذخيره خالي بودند پيغام بده كه فيلد هاي خالي رو پر كنيد . البته يك نمونه كد دارم كه به نظرم من خوب متوجه نشدم روند كارشو
اين كد منه ميشه بگيد براي نمايش پيغام چي بايد بنويسم ؟


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Try
IF (maskEdit2.Text <> '') And (maskEdit3.Text <> '') And (maskEdit4.Text <> '') And
(maskEdit6.Text <> '') And (maskEdit7.Text <> '') And (maskEdit8.Text <> '') Then
Begin
With DataModule2 Do
Begin
ADOTable1.Insert;
ADOTable1.Edit;
ADOTable1number.AsString := maskEdit1.Text;
ADOTable1shabek.AsString := maskEdit2.Text;
ADOTable1namketab.AsString := maskEdit3.Text;
ADOTable1name.AsString := maskEdit4.Text;
ADOTable1date.AsString := maskEdit5.Text;
ADOTable1tedad.AsString := maskEdit6.Text;
ADOTable1fe.AsString := maskEdit7.Text;
ADOTable1gheymat.AsString := maskedit8.Text;
ADOTable1.Post;
End;
maskEdit2.Clear;
maskEdit3.Clear;
maskEdit4.Clear;
maskEdit6.Clear;
maskEdit7.Clear;
maskEdit8.Clear;
maskEdit2.SetFocus;

من شرط رو نوشتم چون قبلا همچين چيزي رو ديده بودم ولي نميدونم براي نمايش پيغام بايد چكار كنم ميشه كمكم كنيد ؟

etedali
چهارشنبه 26 تیر 1387, 12:08 عصر
در اين كد شما اول شرط كرديد كه اگر maskEdit ها مخالف خالي بود شرط اجرا بشه اگر ميخواي پيغام بهتون بده بعد از End بايد Else گذاشته و پيغام مناسب را نمايش بدهيد.

hentjanson
چهارشنبه 26 تیر 1387, 12:19 عصر
من همين قسمت رو متوجه نشدم واسه همين تا همين حد نوشتم كه كمكم كنيد

etedali
چهارشنبه 26 تیر 1387, 12:32 عصر
IF (maskEdit2.Text <> '') And (maskEdit3.Text <> '') And (maskEdit4.Text <> '') And
(maskEdit6.Text <> '') And (maskEdit7.Text <> '') And (maskEdit8.Text <> '') Then
Begin
With DataModule2 Do
Begin
ADOTable1.Insert;
ADOTable1.Edit;
ADOTable1number.AsString := maskEdit1.Text;
ADOTable1shabek.AsString := maskEdit2.Text;
ADOTable1namketab.AsString := maskEdit3.Text;
ADOTable1name.AsString := maskEdit4.Text;
ADOTable1date.AsString := maskEdit5.Text;
ADOTable1tedad.AsString := maskEdit6.Text;
ADOTable1fe.AsString := maskEdit7.Text;
ADOTable1gheymat.AsString := maskedit8.Text;
ADOTable1.Post;
End else
ShowMessage('Please Confirm All Fields');
maskEdit2.Clear;
maskEdit3.Clear;
maskEdit4.Clear;
maskEdit6.Clear;
maskEdit7.Clear;
maskEdit8.Clear;
maskEdit2.SetFocus;

hentjanson
چهارشنبه 26 تیر 1387, 12:39 عصر
سلام من كد رو اينطوري نوشتم البته ميشه به كاربر گفت كه كدوم فيلد ها خاليه مثلا بگيم فيلد نام خاليه يا مثلا فيلد قيمت
اينو رو هم بگم به قسمت else كه ميرسه برنامه خطا ميگيره در اين رابطه ميشه راهنمايي كنيد ؟


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
IF (maskEdit2.Text <> '') And (maskEdit3.Text <> '') And (maskEdit4.Text <> '') And
(maskEdit6.Text <> '') And (maskEdit7.Text <> '') And (maskEdit8.Text <> '') Then
Begin
With DataModule2 Do
Begin
ADOTable1.Insert;
ADOTable1.Edit;
ADOTable1number.AsString := maskEdit1.Text;
ADOTable1shabek.AsString := maskEdit2.Text;
ADOTable1namketab.AsString := maskEdit3.Text;
ADOTable1name.AsString := maskEdit4.Text;
ADOTable1date.AsString := maskEdit5.Text;
ADOTable1tedad.AsString := maskEdit6.Text;
ADOTable1fe.AsString := maskEdit7.Text;
ADOTable1gheymat.AsString := maskedit8.Text;
ADOTable1.Post;
End else
ShowMessage('Please Confirm All Fields');
maskEdit2.Clear;
maskEdit3.Clear;
maskEdit4.Clear;
maskEdit6.Clear;
maskEdit7.Clear;
maskEdit8.Clear;
maskEdit2.SetFocus;
end;
end;

Hsimple11
چهارشنبه 26 تیر 1387, 13:22 عصر
در اینصورت برای هر چک کردن خالی بودن فیلد یک Else بگذارید و پیغام خود را نمایش دهید.

Hsimple11
چهارشنبه 26 تیر 1387, 13:23 عصر
قبل از Esle یک End کم دارید.

hentjanson
چهارشنبه 26 تیر 1387, 13:33 عصر
مرسي دوست من .
يك نمونه از اين شرطي كه گفتيد ميشه مثال بزنيد براي هركدام

Hsimple11
چهارشنبه 26 تیر 1387, 13:48 عصر
if maskedit1.text='' then showmessage('') else
if mask edit2.text='' then Showmessage('') else
.
.
.


یا یک راه بهتر اینکه بین شرطهاتان OR بگذارید و درنهایت Edit هایی که فیلد خالی دارند را پیدا کرده و نام آنها را در Message خود بیاورید.

tefos666
چهارشنبه 26 تیر 1387, 13:50 عصر
دوست عزیز میتونی از این روش هم استفاده کنی


if (Edit1.Text='' ) or (Edit2.Text='' ) or (Edit3.Text='' ) or (Edit4.Text='' ) then
begin
MessageDlg('please fill all box', mterror , [mbok],0)i

end
else
adoquery.insert
دستورات اضافه و ثبت


البته یک راه ساده تر هم هست که با index ها بازی کنی یعنی اسم تمامی editbox ها رو مثلا edit بزار و index اونها رو یکی یکی زیاد کن اونوقت برنامه به همنام بودن edit ها توجهی نمیکنه بعد یکبار یک edit رو فراخونی میکنی بقیه از همون پیروی میکنند - خودت دربارش تحقیق کن روشه جالبیه البته این که گفتم رو من تو vb6 استفاده کرده بودم تو دلفی نمیدونم چجوری اگر کسی چیزی میدونست بگه .


if edit(0).text='' then
showmessage ('fill form')l
else
insert


سوالی بود در خدمتم

success is doing , not wishing

tefos666
چهارشنبه 26 تیر 1387, 13:52 عصر
if maskedit1.text='' then showmessage('') else
if mask edit2.text='' then Showmessage('') else
.
.
.
یا یک راه بهتر اینکه بین شرطهاتان OR بگذارید و درنهایت Edit هایی که فیلد خالی دارند را پیدا کرده و نام آنها را در Message خود بیاورید.


دوست عزیز اینجوری بابای بچه و صاحب بچه در میاد هر edit که خالی باشه پیغام خطا میده باید کد رو جوری بنویسه که همه رو چک کنه و در نهایت یک پیغام خطا بده استفاده از or تو اینجا بدرد میخوره منم با نظر شما موافقم :)

Hsimple11
چهارشنبه 26 تیر 1387, 13:56 عصر
دوست عزیز میتونی از این روش هم استفاده کنی


if (Edit1.Text='' ) or (Edit2.Text='' ) or (Edit3.Text='' ) or (Edit4.Text='' ) then
begin
MessageDlg('please fill all box', mterror , [mbok],0)i
[INDENT]end
else
adoquery.insert


ایشون ذکر کردند که میخواهند برای هر کنترل یک پیغام ویژه نمایش دهند.


[RIGHT]البته یک راه ساده تر هم هست که با index ها بازی کنی یعنی اسم تمامی editbox ها رو مثلا edit بزار و index اونها رو یکی یکی زیاد کن اونوقت برنامه به همنام بودن edit ها توجهی نمیکنه بعد یکبار یک edit رو فراخونی میکنی بقیه از همون پیروی میکنند - خودت دربارش تحقیق کن روشه جالبیه البته این که گفتم رو من تو vb6 استفاده کرده بودم تو دلفی نمیدونم چجوری اگر کسی چیزی میدونست بگه .

[LEFT]if edit(0).text='' then
showmessage ('fill form')l
else
insert



برای اینکه بتوانید از کنترلها بصورت آرایه ای استفاده کنید بایستی این ویژگی را در کلاس آنها تعریف کنید. یا آنها را بصورت آرایه تعریف کنید که راه مناسبی نیست.

Hsimple11
چهارشنبه 26 تیر 1387, 13:58 عصر
دوست عزیز اینجوری بابای بچه و صاحب بچه در میاد هر edit که خالی باشه پیغام خطا میده باید کد رو جوری بنویسه که همه رو چک کنه و در نهایت یک پیغام خطا بده استفاده از or تو اینجا بدرد میخوره منم با نظر شما موافقم :)

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

hentjanson
چهارشنبه 26 تیر 1387, 14:22 عصر
دوست من اينطوري نوشته بشه درسته من از صحبت شما اينو برداشت كردم فقط يك جايه كار اشتباه كردم ميشه يك نگاهي بكنيد به كد من ؟



procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if maskedit2.text='' then showmessage('ÔãÇÑå ÔÇÈß ßÊÇÈ ÑÇ æÇÑÏ ßäíÏ') else
if maskedit3.text='' then Showmessage('äÇã ßÊÇÈ ÑÇ æÇÑÏ ßäíÏ') else
if maskedit4.text='' then Showmessage('äÇã ÎÑíÏÇÑ ÑÇ æÇÑÏ äãÇííÏ') then
With DataModule2 Do
Begin
ADOTable1.Insert;
ADOTable1.Edit;
ADOTable1number.AsString := maskEdit1.Text;
ADOTable1shabek.AsString := maskEdit2.Text;
ADOTable1namketab.AsString := maskEdit3.Text;
ADOTable1name.AsString := maskEdit4.Text;
ADOTable1date.AsString := maskEdit5.Text;
ADOTable1tedad.AsString := maskEdit6.Text;
ADOTable1fe.AsString := maskEdit7.Text;
ADOTable1gheymat.AsString := maskedit8.Text;
ADOTable1.Post;
end;
maskEdit2.Clear;
maskEdit3.Clear;
maskEdit4.Clear;
maskEdit6.Clear;
maskEdit7.Clear;
maskEdit8.Clear;
maskEdit2.SetFocus;
end;
end;

Hsimple11
چهارشنبه 26 تیر 1387, 16:55 عصر
چرا دو تا Then؟؟
شرط آخر :


if mask edit4.text='' then showmessage ('') esle
BEGIN

دستورات برنامه//

END;

hentjanson
چهارشنبه 26 تیر 1387, 19:03 عصر
اين خطا از كجا ناشي ميشه موقعي كه مي خوام ذخيره كنم اين پيغام مياد
" is not a valid integer value

Hsimple11
چهارشنبه 26 تیر 1387, 19:11 عصر
خب خودش که میگوید. یعنی یک پارامتر که نیاز داشته با عدد Integer پر شود، یا پر نشده یا بصورت رشته ای پر شده است. میتواند ناشی از خالی بودن فیلدهایتان باشد یا اینکه میخواهید یک رشته را به یک فیلد عددی نسبت دهید.

tefos666
چهارشنبه 26 تیر 1387, 19:17 عصر
دوست عزیز این خطا موقعی ظاهر میشه که شما یه ورودی عددی رو میخوای زوری رشته ای بهش وارد کنی میتونی جای asstring از asinteger کمک بگیری یا اینکه با توابع inttostr مشکلت رو برطرف کنی - من یه تیکه کد دارم که فقط به کاربر اجازه میده تو ادیت باکس عدد تایپ کنه اینجوری میتونی جلوی ایجاد اینگونه خطا ها رو بگیری

کافی این کد رو در keypress ادیت باکست بنویسی



if key<>#8 then
if ((key<'0') or (key>'9'))and (key<>'.') then
key:=#0



سوالی بود در خدمتم - یا علی مدد

success is doing , not wishing

hentjanson
چهارشنبه 26 تیر 1387, 19:19 عصر
سلام دوست من
گفته شما رو انجام دادم ولي نتونستم رفع كنم اين خطا رو .
سورس برنامه رو ميزارم براي مشاهده شما در صورت امكان نگاه كنيد . تشكر از شما كه وقت ميزاريد

Hsimple11
چهارشنبه 26 تیر 1387, 19:25 عصر
دوست گرامی این یک خطای بسیار ساده است و مواردی هم که اتفاق می افتد کامل گفته شد. یک دور برنامه خود را چک کنید تا اشکال خود را بیابید.
دوست Tefoss لطفا کدهای خود را داخل تگ Code قرار دهید. با تشکر.