PDA

View Full Version : نحوه مقایسه شماره سریال چک و مبلغ آن در دو جدول برای ورود اطلاعات



niloofarabi137
جمعه 30 فروردین 1387, 15:01 عصر
سلام
من دو تا فرم دارم که در یکی از اونها که ثبت چک به عنوان واریزی است شماره سریال چک و اطلاعات مربوط به آن رو وارد میکنم و توسط کد اجازه وارد کردن شماره سریال تکراری برای چک رو از کاربر گرفته ام و در فرم دوم که برداشت چک است میخواهم در هنگامی که کاربر شماره سریال چک را به عنوان برداشت وارد کرد وقتی که به مبلغ چک رسید برنامه من مبلغ چک وارد شده در این قسمت را با مبلغ چک وارد شده در قسمت ثبت چک مقایسه کند و اگر مبلغ یکی بود اجازه برداشت را به کاربر بدهد این کار برای جلوگیری از اختلاس صورت می گیرد به اینصورت که اگر فردی شماره سریال 1 را با مبلغ فرضی صد هزار تومان وارد کرد نتواند در قسمت برداشت همان شماره سریال را با مبلغ سی هزار تومان ثبت نماید از برنامه نویسان محترم خواهشمندم که مرا راهنمایی کنند . متشکرم

Amir_Safideh
جمعه 30 فروردین 1387, 15:34 عصر
شما برای اینکار نیاز به یه کوئری ساده دارید .شما در فرم برداشت زمانی که کاربر میخواد مبلغ برداشت شده رو ذخیره کنه قبل از اینکه عملیات ذخیره انجام بشه میبایست شماره سریال چک رو با یک پارامتر به کوئری بفرستید . Select مربوط به کوئری رو به این صورت بنویسید :

ADOQuery1.SQL.Text := 'SELECT MABLAGH FROM VARIZ_CHECK WHERE CHECK_SERIAL = '+@CHECK_SERIAL;
بعد کوئری رو اجرا کنید :

with ADOQuery1 do
begin
Close;
Parameters.ParamByName('@CHECK_SERIAL').Value := Edit_CHECK_SERIAL.Text;
SQL;
Open;
end;
و در مرحله آخر هم میتونید کنید که اگر خروجی کوئری با مبلغ برداشت ناهماهنگ بود به کاربر پیغامی نمایش داده بشه و درخواست ذخیره اطلاعات لغو بشه :

if ADOQuery1.FieldByName('MABLAGH').AsFloat <> StrToFloat(Edit_CHECK_SERIAL.Text) then
begin
ShowMessage('Informations are incorrect');
Exit;
end;
---------------
موفق باشید .

niloofarabi137
جمعه 30 فروردین 1387, 15:47 عصر
سلام دوست عزیز ( امیر جان )
آیا امکان داره کدی رو که گفتین توی on exit dbedit مربوط به وارد کردن مبلغ بنویسم یا خیر ؟

Amir_Safideh
جمعه 30 فروردین 1387, 17:26 عصر
آیا امکان داره کدی رو که گفتین توی on exit dbedit مربوط به وارد کردن مبلغ بنویسم یا خیر ؟
چرا که نه . شما میتونید کد رو در هر جا که صلاح بدونید و همچنین قوانین زبان برنامه نویسی اجازه بده اجرا کنید . در این رابطه مانعی وجود نداره . فقط شما باید ببینید که منطقی ترین مکان(با توجه به شرایط و خواسته خودتون و کاربرتون)برای قرار دادن کد کجاست .
------------------
موفق باشید .

niloofarabi137
جمعه 30 فروردین 1387, 17:39 عصر
سلام کدی رو که گفتین نوشتم اما جواب نمی ده
فرم برداشت من دارای جدولی با فیلدهای برای مبلغ (mablagh ) و برای شماره سریال (serial ) و ... هست و اسم جدول هم chek2 .
فرم واریزی من هم دارای یک جدول دیگست که فیلدهای اون مثل جدول بالاییه و اسم جدول اون هم chek .
1.من برای اینکه کاربر اجازه وارد کردن شماره سریال تکراری رو نداشته باشه در onexit dbedit مربوط به شماره سریال فرم واریزی و فرم برداشتی کد زیر رو نوشتم با یک پیغام که می گه شما مجاز به استفاده از شماره سریال تکراری نمی باشید .

niloofarabi137
جمعه 30 فروردین 1387, 17:39 عصر
DataModule9.ADOQuery27.Close;
DataModule9.ADOQuery27.SQL.Clear;
DataModule9.ADOQuery27.SQL.Add('select * from chek2 ' +
'where serial ='+#39+DBEdit4.Text+#39);
DataModule9.ADOQuery27.Open;
if (DataModule9.ADOQuery27.RecordCount>0) then
begin
MessageDlg('ÇÓÊÝÇÏå ÇÒ ÔãÇÑå ÓÑíÇá ʘÑÇÑí ãÌÇÒ äíÓÊ ',mtInformation,[mbOK],0);
DBEdit4.SetFocus;
end;

niloofarabi137
جمعه 30 فروردین 1387, 17:49 عصر
DataModule9.ADOQuery27.Close;
DataModule9.ADOQuery27.SQL.Clear;
DataModule9.ADOQuery27.SQL.Add('select * from chek2 ' +
'where serial ='+#39+DBEdit4.Text+#39);
DataModule9.ADOQuery27.Open;
if (DataModule9.ADOQuery27.RecordCount>0) then
begin
MessageDlg('ÇÓÊÝÇÏå ÇÒ ÔãÇÑå ÓÑíÇá ʘÑÇÑí ãÌÇÒ äíÓÊ ',mtInformation,[mbOK],0);
DBEdit4.SetFocus;
end;


2. لطفا کد مربوطه رو با توجه به اطلاعات و نام فیلدها که بهتون دادم برام بنویسین اول اینکه مبلغ چکی رو که در فرم برداشت کاربر وارد میکنه با مبلغ چک واریزی و شماره سریال اون رو با شماره سریال چکی که در جدول واریزی ثبت شده مطابقت بده و اگر اطلاعات درست بود امکان ادامه کار برای کاربر وجود داشته باشه به خاطر همین
من کدها رو در ( on exit dbedit )نوشتم تا اگر اشتباه بود کاربر همان جا آن را تصحیح و سپس ادامه دهد . با تشکر

Amir_Safideh
جمعه 30 فروردین 1387, 19:01 عصر
سلام کدی رو که گفتین نوشتم اما جواب نمی ده شما اسم فیلدها و جداول رو مطابق اسامی خودتون تغییر دادید و نشد یا همون کدها رو بدون تغییر استفاده کردید ؟

with DataModule9.ADOQuery27 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT mablagh FROM [check] WHERE serial = '+DBEdit_Mablagh);
SQL;
Open;
if FieldByName('mablagh').AsFloat <> StrToFloat(DBEdit_Mablagh.Text) then
begin
ShowMessage('Informations are incorrect');
DBEdit_Mablagh.SetFocus;
end;
end;
فقط به DBEdit_Mablagh شما باید نام DBEdit ی رو که مبلغ رو توش وارد میکنید بزارید و تمام .
-------------
موفق باشید .

SYNDROME
جمعه 30 فروردین 1387, 21:40 عصر
به این نکته توجه کنید در تعریف چک شماره سری چک و شماره سریال چک با هم کلید در نظر گرفته می شوند.
موفق اشید

mohammadtaromi
دوشنبه 31 تیر 1392, 09:41 صبح
سلام به همه دوستان
اين مطلبي رو كه دوستمون عنوان كرد با اين كوثري مشكلش حل ميشه.
ببين شما يه بايند ساده نيازه داري!
و اما نحوه كار!
يه پروسيجر بنويس به اين شكل:
‍Create Procedure Bind_Serial Check
Serial_Check int@
as
select mablagh_check from Tb_Name where serial_check=@serial check
حالا همين پاس بده سمت سي شارپ