PDA

View Full Version : mask



seyed_27
جمعه 20 آذر 1388, 13:50 عصر
سلام یه سوال
من تو بانکم چندتا فیلد دارم که از نوع کاراکتر یا نامبره
میخوام اونا رو ماسک کنم به این صورت که مثلا فیلد a مقدارش 00000 باشه و وقتی کاربر عدد 1 رو وارد میکنه مقدار فیلد 00001 بشه(یعنی عدد از سمت راست اضافه بشه)؟

benyaminrahimi
جمعه 20 آذر 1388, 18:13 عصر
می تونی تو بیفر پست دیتا بیس کدتو بنوبیسی before post

یا از کنترل های مسک استفاده کنی
سوالت کمی کنگ

seyed_27
جمعه 20 آذر 1388, 23:56 عصر
منظورم اینه که وقتی رکورد جدید ایجاد میکنم dbedit1 که به فیلد name لینک شده مقدارش 5 تا صفر باشه و وقتی کاربر عدد رو وارد میکنه بجای اون صفرها قرار بگیره
مثلا وقتی عدد 123 رو وارد میکنه مقدار dbedit بشه 00123 یا وقتی عدد 1599 رو وارد میکنه عدد بشه 01599
همین طور اینکار در dbgrid امکان پذیر باشه

Tiam121
شنبه 21 آذر 1388, 09:29 صبح
سلام
ساده ست اگر فيلد شما از نوع char باشه كافي هست با عددي كه مي خواي جمع كني و اگر از نوع int هم باشه فرقي نداره اما توي ديتابيس صفر قبل از عدد همونطور كه همه ميدونيم لحاظ نميشه ولي واسه نمايشش ميتوني تعداد صفري رو كه مي خواي توي مثلا edit قبل از عدد اضافه كني

seyed_27
شنبه 21 آذر 1388, 13:35 عصر
من دارم برای یه شرکتی برنامه مینویسم که هر فیلدی اندازه مشخص داره مثلا "حساب سی"با طول 13 و "شماره ردیف" با طول 5 و .... که مثلا در فیلد "شماره ردیف" کاربر از 1 شروع میکنه و عدد 1 رو وارد میکنه ولی در بانک باید 00001 ثبت بشه و .... اینکار بخاطر اینه که وقتی در آخر میخوام بانک رو به یک فایل txt تبدیل کنم این عدد ها به اون صورتی که گفتم ذخیره بشه 0001 و 00002 و 00012354 و ......
چه راهنمایی می فرمائید

hossein_h62
شنبه 21 آذر 1388, 16:44 عصر
من دارم برای یه شرکتی برنامه مینویسم که هر فیلدی اندازه مشخص داره مثلا "حساب سی"با طول 13 و "شماره ردیف" با طول 5 و .... که مثلا در فیلد "شماره ردیف" کاربر از 1 شروع میکنه و عدد 1 رو وارد میکنه ولی در بانک باید 00001 ثبت بشه و .... اینکار بخاطر اینه که وقتی در آخر میخوام بانک رو به یک فایل txt تبدیل کنم این عدد ها به اون صورتی که گفتم ذخیره بشه 0001 و 00002 و 00012354 و ......
چه راهنمایی می فرمائید

دوست عزیز شما میخواین دیسکت پرداخت بانک درست کنید ؟؟!

hadisalahi2
شنبه 21 آذر 1388, 17:37 عصر
شما برای این کار باید ابتدا تعداد کارکترهای اون مقدار رو بدست بیارید و سپس به تعداد باقی مانده صفر به رشته مورد نظر اضافه کنید.
یا حق

seyed_27
شنبه 21 آذر 1388, 21:34 عصر
دوست عزیز شما میخواین دیسکت پرداخت بانک درست کنید ؟؟!
بله
لطفا راهنمایی کامل کنید

merced
شنبه 21 آذر 1388, 22:20 عصر
توي رويداد BeforPost بنويس :


:= Format('%4.4d',[strtoint(Edit1.text)])

merced
شنبه 21 آذر 1388, 22:54 عصر
اگه اعداد الان تو بانك اطلاعاتي هستند تو رويداد OnGetText مي توني دستور بالا رو بنويسي
ويا از كد SQL زير استفاده كنيد


Select Right('00000000000' + LTRIM (STR(NumricField)) , 10) as XX from Table

hossein_h62
یک شنبه 22 آذر 1388, 07:58 صبح
اگر درست حدس زده باشم شما میخواین فایل دیسکت بانک صادرات رو درست کنید.من همچین برنامه ای رو نوشتم.
اولا شما در مورد ردیف هر رکورد کاری که باید بکنید اینه که ردیف رو در ریپورتتون تعریف کنید تا هر چندتا رکورد داشتین خودش براتون بزنه.یعنی مثلا در فست ریپورت باید LINE# رو اول هررکورد بزارین با فرمت #0000
برای سایر فیلداتون مثل مبلغ پرداختی هم باید موقع ورود مبلغ به سیستم صفرها اضافه بشن.در رویداد OnExit ادیت طول مبلغ چک میشه و به مقدار تفاضلش با 13 عدد صفر رو جایگزین کنید.

seyed_27
یک شنبه 22 آذر 1388, 12:50 عصر
اگر درست حدس زده باشم شما میخواین فایل دیسکت بانک صادرات رو درست کنید.من همچین برنامه ای رو نوشتم.
میتونم خواهش کنم این برنامه ای که نوشتید رو برام بگذارید یا یک دمویی از کدهای اونو بگذارید چون فرصتی که به من برای طراحی این برنامه دادن خیلی کمه حسابی به این برنامه شما احتیاج دارم

seyed_27
یک شنبه 22 آذر 1388, 23:40 عصر
من از کد زیر برای تفاضل صفرها در رویداد onexit برای dbedit استفاده میکنم به نظر شما راه حل خوبیه یا راه کوتاه تر و بهتری دارید البته یه مشکلی هست اونم اینه که وقتی از این dbedit به dbedit دیگه میرم و بعد تغییرات رو در دیتابیس ذخیره میکنم صفرها ذخیره نمیشن!!!!!!

var
a: integer;
begin
a:=length(adotable1.FieldValues['shomare siba'] );
a:=13-a;
while a<>0 do begin

dbedit6.Text:='0'+dbedit6.Text;
a:=a-1;
end;


یه مشکل دیگه اینه که در تبدیل بانک به فایل متنی از کد ذیر استفاده میکنم ولی درست کار نمیکنه و صفرها رو درست نمیزنه :

procedure TfrmMain.Button1Click(Sender: TObject);
var
radif,siba,mablagh:string;
a,b,c,d,e,f: integer;
st:string;
outfile:textfile;
filename:string;
temp:string;
begin
savedialog1.FileName:=filename;
if savedialog1.Execute then
begin
filename:=savedialog1.FileName;
assignfile(outfile,filename);
rewrite(outfile);
adotable1.First;
while (adotable1.Eof=false) do
begin
if adotable1.FieldValues['code']<>null then
begin
//////radif/////////////
a:=length(adotable1.FieldValues['shomare redif'] );
a:=5-a;
while a>0 do begin
radif:=adotable1.FieldValues['shomare redif'];
radif:='0'+radif;
a:=a-1;
end;
/////////////////siba
b:=length(adotable1.FieldValues['shomare siba'] );
b:=13-b;
while b<>0 do begin
siba:=adotable1.FieldValues['shomare siba'];
siba:='0'+siba;
b:=b-1;
end;
/////////////////// mablagh
c:=length(adotable1.FieldValues['mablagh'] );
c:=15-c;
while c<>0 do begin
mablagh:=adotable1.FieldValues['mablagh'];
mablagh:='0'+mablagh;
c:=c-1;
end;
//temp:=adotable1.FieldValues['code']+adotable1.FieldValues['name']+adotable1.FieldValues['family'];
writeln(outfile,radif{+siba+mablagh+'0000000000000 00'});
adotable1.Next
end
else
adotable1.Next;
end;
closefile(outfile);
end;
end;

حسین شهریاری
دوشنبه 23 آذر 1388, 10:27 صبح
سلام

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

CREATE Function SetZero(@N Bigint,@L Tinyint) Returns VarChar(255) As
Begin
Return Right(Replicate('0',20)+Convert(Varchar(20),IsNull (@N,0)),@L)
End
برای استفاده:
select setzero(5,100)

seyed_27
دوشنبه 23 آذر 1388, 12:35 عصر
من این تابع را در بخش Sql براتون پیدا کردم.درست هم جواب میده.کافیه اونا ایجاد و به شکل زیر استفاده کنین.
ممنونم ولی من در دلفی اصلا در مورد بانک اطلاعاتی کار نکردم و فقط در بخش مالتی مدیا ،فلش و گرافیک کار کردم این اولین کارمه. لذا نمیدونم چطور باید این کد sql رو وارد کرد
لطفا راهنمایی کنیید
بسیار ممنونم

حسین شهریاری
دوشنبه 23 آذر 1388, 13:06 عصر
شما کافیه تابع فوق را در کوئری آنالایزر بنویسید و اجرا بگیرید.
سپس توی دلفی رشته مربوط به دستور Sql را در یه Adoquery بنویسید.
مثال:

adoquery1.sql.text:='select *,setzero(10,4) from table1'
adoquery1.close
adoquery1.open

این تابع یه عدد و تعدای دامنه را از شما میپرسه و اون چیزی که شما میخاین را به شما میده