PDA

View Full Version : ايجاد شماره ويزيت براي بيمارن به صورت اتوماتيك



imani1983
سه شنبه 10 فروردین 1389, 15:33 عصر
gortolosh1983@gmail.comمن يك برنامه كلينيك نوشتم نياز فوري به ايجاد شماره ويزيت براي بيمارن به صورت اتوماتيك دارم من براي شروع شماره اندازي براي هر ويزيت از تاريخ استفاده كرم يعني از سمت چپ شروع شده به ترتيب:8901010000 كه چهار صفر آخر مي خوام براي هر روز كاري از صفر شروع بشه ضمناً تاريخ ابتدايي را از persian.dll استفاده كردم كه مميز را نمي زاره واتوماتيك عوض مي كنه ممنون مي شم كمكم كنيد%%%%%:گریه::گریه::گریه::گری ه::گریه::گریه::عصبانی++::عصبان ی++:

pezhvakco
سه شنبه 10 فروردین 1389, 18:29 عصر
درود :
برای بدست آوردن شماره روش های زیادی هست .
استفاده از خود پایگاه داده در زمان طراحی و یا کدهای Sql در برنامه .
1) در پایگاه داده SQL استفاده از خصوصیت Identityم مربوط به فیلد شماره .
2) کد نویسی بدست آرودن شماره بیش تر در برنامه :

SELECT MAX(code) AS Expr1 FROM Table1
بعد شماره بدست آورده را یکی اضافه کن .

می تونی در هنگام نمایش بنا به تعداد رقم ، صفر های مورد نیاز را به ابتدای شماره بدست آورده اضافه کنی .
روش های دیگری هم هست ...
فکر خوش .

hamid-nic
سه شنبه 10 فروردین 1389, 18:35 عصر
سلام
دوست عزیز شما انواع و اقسام راه برای این کار دارید که یکی از اون ها بدست آوردن آخرین شماره ی ویزیت صادر شده و اضافه کردن یک واحد جدید به اون برای ویزیت بعدی است . کافیه یکم ابتکار و خلاقیت بزارید .
موفق باشید .

imani1983
چهارشنبه 11 فروردین 1389, 01:02 صبح
مشكل من اينه كه هنگام on create شماره اضافه بشه ؟!
الف ) اگر ركورد ثبت شد كه تمام .
ب ) اگر از ثبت ركورد (شماره درج شده در بانك ) صرف نظر كردم واز صفحه خارج شده موقع on close شماره هم لغو بشه وبيخودي شماره نندازه.
چند وقت پيش اين كد را ديافت كردم ولي نتونستم تحليلش كنم نام بانك من Clinic_database ونام جدول من paziresh مي باشد كه داراي فيلد هاي زير مي باشد. ضميمه::بوس::قلب::بوس:

imani1983
چهارشنبه 11 فروردین 1389, 01:07 صبح
ضمناً از پاسخ دوستان خيلي ممنون هستم

*****************************
دلی که عشق ندارد و به عشق نیاز دارد،
آدمی را همواره در پی گم شده اش،
ملتهبانه به هر سو می کشاند!
دكتر شريعتي

imani1983
چهارشنبه 11 فروردین 1389, 01:11 صبح
var
a:String;
begin
a:=Copy(MainForm.EDYear.Text,3,2)+'0001';
TFactorMain.Insert;
EDFactCode.SetFocus;
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT MAX(FactCode) as FMax FROM FactorMain Where DYear='+QuotedStr(MainForm.EDYear.Text) + '');
Open;
FCode.DataField:='FMax';
if AdoQuery1.RecordCount>0 then
EDFactCode.Text:=inttostr(strtoint(FCode.Text)+1)
else if AdoQuery1.RecordCount=0 then
EDFactCode.Text:=a;
EDDYear.Text:=MainForm.EDYear.Text;
end;
//FCode:=strtoint(FcCod.Text)+1;
//EDFactCode.Text:=inttostr(FCode);
end;

از َِADO DATASET ,ADOQUERY استفاده مي كنم

pezhvakco
چهارشنبه 11 فروردین 1389, 09:55 صبح
شما بهتره برای نوشتن کد ها در سایت از تگ کد ( علامت # ) در ابزارهای بالای نوشتن پیام استفاده کنی .
چرا با رویداد OnCreate فرم کار می کنی ! این رویداد فقط یکبار در ابتدای برنامه فراخوانی میشه ؟
اگه درست منظورت رو فهمیده باشم، باید از OnShow استفاده کنی که البته این هم خوب نیست .
اگه از دکمه برای موارد ایجاد ، انصراف و ذخیره استفاده کنی ( کاربر مجبور به بستن و باز کردن فرم برای چند پذیرش پشت سر هم نباشه )بهتره و مناسب تره .
فکر خوش .

mehdimdp
جمعه 13 فروردین 1389, 22:55 عصر
من جای شما باشم در جدول paziresh دو فیلد می سازم
1: تاریخ ویزیت : vdate
2: شماره ویزیت : vnum
در رویداد afterinsert جدول ، یک کوئری بات مضمون زیر مینوسم:


select max(vnum) from paziresh
where vdate=MYDATE

این کوئری ، آخرین شماره رو به شما میده که ادامش با خودتون...

imani1983
شنبه 14 فروردین 1389, 21:03 عصر
در اين نمونه اگه جدول خالي باشه ارور مي ده در غير اين صورت شماره را مي ندازه
دوم اينكه بعد از ثبت اولين شماره در هنگام عوض شدن تاريخ روز(يعني يك روز بعد، امتحان كنيد) شماره ويزيت تاريخ روز قبل رو ثبت مي كنه! ولي در دومين دفعه كه عمل ثبت رو انجام مي دهيم تاريخ رو عوض مي كنه
سوم اينكه هرروز كه يك روز به روز شمار اضافه ميشه از صفر شروع نمي كنه و ادامه شماره روز قبل رو ميندازه ولي تاريخ فرق ميكنه.
من نمونه اي از اين برنامه را براتون مي زارم ببينيد كجا مشكل داره
من مدتهاست گير اين مشكل هستم چون برنامه ام بغير از اين در چند جاي ديگه نياز به شماره انداز داره%
ضمنا ً اگه لينكي در مورد اين بحث سراغ دارين ممنون مي شم بزارين :تشویق::لبخندساده::تشویق:

************************************************** ***
هنگامی دستم را دراز کردم که دستی نبود
هنگامی لب به زمزمه گشودم که مخاطبی نداشتم
و هنگامی تشنه آتش شدم که در برابرم دریا بود و دریاو دریا….
دكتر علي شريعتي

mehdimdp
یک شنبه 15 فروردین 1389, 01:04 صبح
سلام
اولین و مهمترین اشتباه و اشکال شما اینکه در رویداد FormCreate کدهایتان را نوشته اید.
به جای FormCreate می بایست در FormActivate کدهاتون رو بنویسید.
اشتباه دوم:
کد sql رو می بایست به صورت زیر بنویسید:


adodataset1.CommandText:=
'SELECT MAX(row)AS maxs FROM Clinic_database where datavizit='+QuotedStr(mydate);


و همچنین برای اینکه در حالت خالی بودن جدول ، با خطا مواجه نشوید:
به جای :


edit3.Text:=adodataset1.FieldValues['maxs']+1;

این کد رو بنویسید:


if adodataset1.FieldValues['maxs']>0 then
edit3.Text:=adodataset1.FieldValues['maxs']+1
else
edit3.Text:='1';


در ضمن منظور از mydate یک متغیر رشته ای با مقدار تاریخ فعلی سیستم می باشد که می بایست در کوئری درج شود.
موفق باشید

imani1983
چهارشنبه 18 فروردین 1389, 00:38 صبح
سلام
ازهمه دوستان تشكر مي كنم بالاخره خودم توانستم يك Autonumber درست كنم
كاملاً براي هرروز از 0001 شروع مي شه وتاريخ رو هم براي هر شماره ويزيت نگه مي داره%:چشمک::خجالت::تشویق::تشو یق::تشویق: