arashkhaan2002
دوشنبه 18 خرداد 1388, 17:37 عصر
سلام ، من یه برنامه صنعتی نوشتم که حدود چند ساله کار میکنه اخیرا در یک محل که با فاکس 9 نصبش کردم و کار میکنه خبر میدن که گاها بعضی از اسنادشون پس از ثبت پریده!
این در صورتیه که دیگران که فاکس 7 استفاده میکنند این مشکلو نداشتن !
ضمنا برنامه به صورت Workgroupنوشته سده و هنگام ثبت باFlock فایل رو قفل و سپس آزاد میکنم . میخواستم نظر دوستان یا تجارب مشابه و رفع اون رو از دوستان سوال کنم.
mehran_337
سه شنبه 19 خرداد 1388, 13:36 عصر
سورستونو بزارید ببینیم چیه
arashkhaan2002
چهارشنبه 20 خرداد 1388, 02:02 صبح
امروز رفتم در محل مهران جان به 2 مورد برخوردم
1- ترافیک کار بالاست
2- چیزی حذف نشده بود ، ولی شماره ای روی دیگری نشسته بود ، یعنی مثلا یک سند که به شماره 1116 ثبت شده بود بعدا یکی دیگر از کلاینت ها روی همون شماره سندش رو ثبت کرده و طبیعتا سند قبلی رو از بین برده بود ! یعنی کلاینت دوم وقتی هنگام ثبت میخواسته شماره سند تعیین کنه سند 1116 رو در اطلاعات روی سرور ندیده و آخرین شماره که دیده 1115 بوده و طبعا شماره سند خودش رو 1116 ثبت کرده !
آیا دستور SET REFRRSH to 1,-1 مثلا کمکی میکنه؟
3- گاها تعدادی سند ثبت میکنند بعدا میان میبینن اون سند ها نیست! از برنامه خارج و دوباره وارد میشن ،
دوباره میاد و نشونشون میده! لازم به ذکر هست که من از CDX استفاده میکنم .
4- ویروس کش نصب کرده بودن ، من یه جای دیگه دیدم که وقتی ویروس کش نصب بود سیستم گزارش ها رو کامل نشون نمیداد یعنی قسمتی از اطلاعات در گزارش نمیومد . وقتی ویروس کش رو برداشتم درست شد!
5-ویندوزشون با وجود 15 کلاینت هنوز XP بود که من امروز SERVER 2003 گذاشتم .
arashkhaan2002
چهارشنبه 20 خرداد 1388, 02:05 صبح
نمونه کد ثبت سند در برنامه های من
SELECT snd_t
GO top
IF kind="d"
MESSAGEBOX("سـند دائمي بوده و تغيير اسـناد دائمي غير مجاز ميباشد",16)
thisform.spinner1.SetFocus
ELSE
If snd_cr=2 .And. s_save_p=0
Messagebox('ويرايش اطلاعات جهت کاربر جاري مقدور نميباشد',16)
Else
Select snd_t
Go Top
s_tag=0
If Empty(s_code)=.T.
s_tag=1
Messagebox("لطفا کد حساب را وارد فرمائيد",16)
Endif
If Empty(s_date)=.T.
s_tag=1
Messagebox("لطفا تاريخ سند را وارد فرمائيد",16)
Endif
If s_tag=0
Delete For Empty(s_code)=.T.
Go Top
Sum snd_t.s_bed To t_s_bed
Sum snd_t.s_bes To t_s_bes
If t_s_bed=t_s_bes .And. t_s_bed#0 .And. t_s_bes#0
Go Top
Select 1
If Flock()
If snd_cr=1
Select Max(s_no) From "&snd_dbf" Into Cursor sm;
s_no_t=MAX_s_no+1
SELECT snd_t
Replace s_no With s_no_t All
Endif
If snd_cr=2
Delete From "&snd_dbf" Where s_no=snd_t.s_no;
Endif
Select snd_t
Go Top
Do While !Eof()
Insert Into "&snd_dbf" (s_no,s_date,s_code,s_sharh,s_bed,s_bes,ch_rad,ch_ no,ch_date,ch_bank,ch_hesab,ch_r_code,ch_city,ch_c omm,ch_type,ch_status,kind) Values (snd_t.s_no,snd_t.s_date,snd_t.s_code,snd_t.s_shar h,snd_t.s_bed,snd_t.s_bes,snd_t.ch_rad,snd_t.ch_no ,snd_t.ch_date,snd_t.ch_bank,snd_t.ch_hesab,snd_t. ch_r_code,snd_t.ch_city,snd_t.ch_comm,snd_t.ch_typ e,snd_t.ch_status,snd_t.kind);
Skip
Enddo
Select snd_t
Go Top
Insert Into "&change_dbf" (ch_kind,ch_no,ch_id,ch_date,ch_time) Values ("s",snd_t.s_no,id_t,DATE_2,Time());
Delete From snd_t;
DATE_1=Dtoc(Date())
DATE_2='13 / / '
Do Date-1 With DATE_1,DATE_2,.T.
Select Max(s_no) From "&snd_dbf" Into Cursor s_no;
snd_cr=1
Insert Into snd_t (s_no,s_date) Values (s_no.MAX_s_no+1,DATE_2);
Thisform.Refresh
Thisform.spinner1.Enabled=.T.
Thisform.text1.SetFocus
FLUSH in 1
UNLOCK IN 1
Messagebox(" سند با موفقيت ثبت گرديد ",64)
Else
Messagebox(" به دليل ترافيک شبکه سند ثبت نگرديد لطفا دوباره سعي فرمائيد ",64)
Endif
Else
Messagebox(" سند تراز نميباشد ",48)
Endif
Endif
Endif
ENDIF
kia1349
پنج شنبه 21 خرداد 1388, 08:23 صبح
سعی کنید از بافرینگ و قابلیت هاش استفاده کنید
Esikhoob
شنبه 23 خرداد 1388, 20:48 عصر
سلام
ما هم که یک برنامه صندوق برای یک فروشگاه بزرگ نوشته بودیم (که چند تا صندوق داشت) - بعضی وقتها دو فیش با یک شماره ثبت میشد ، درست است ، با روش شما:
SELECT MAX(s_no) FROM "&snd_dbf" INTO CURSOR sm;
s_no_t=MAX_s_no+1
احتمال این قضیه هست ، ما هم از این روش استفاده میکردیم:
GO BOTTOM
p_invoice_number=t_Invoice_number+1
و راه حلی که ما برای حل این مشکل به ذهنمان رسید ، عوض کردن سیستم شماره فیش دادنمان بود ، که الان با تغییری که دادیم از شماره آخرین فیش بدست نمیآید ، بلکه شماره آخرین فیش در header فایل DBF نوشته میشود، البته ما برنامه نویسی سخت و پیچیده انجام ندادیم بلکه از یک خاصیت جدید فاکس پرو 9 به نام AutoInc استفاده کردیم.
AutoInc نوع جدیدی از فیلد است ، شما باید فیلد شماره سندتان که حالا باید Numeric باشد را به AutoInc تغییر بدهید و خطوط برنامه را که از روش قبلی شماره سند میآوردند را پاک کنید.
موقع ایجاد رکورد جدید خودش شماره جدید میاندازد و من هر چه امتحان (با شرایط بسیار سختگیرانه) کردم دو شماره مثل هم نشد.
در مورد ویروس کش هم باید بگویم همانطور که در یک پست مربوط به یک سال پیش تجربه ام را نوشتم ، حالا برایم از روز روشنتر است که Kaspersky تاثیر منفی در باز شدن فایلهای DBF دارد ، حتی میخواستم به شرکت Kaspersky این را اعلام کنم ، ولی من همیشه Kaspersky را نصب میکنم و در تنظیماتش بهش میگم که کاری به فایلهای DBF CDX DBC DCT DCX نداشته باشد.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.