ورود

View Full Version : حرفه ای: Visual Fox Pro & SQL SERVER 2005 via ODBC



arashkhaan2002
سه شنبه 30 آذر 1389, 23:31 عصر
با سلام خدمت دوستان گرامی

بالاخره بخاطر فشار مشتریان مجبور شدم که دیتابیس نرم افزارم رو SQL SERVER کنم.

این کار میبایستی با حداقل تغییرات در برنامه نویسی سیستم با بانک اطلاعاتی فاکس انجام میشد.

بر روی ویندوز سرور 2003 نرم افزار SQL SERVER 2005 رو نصب کردم و بانکهای اطلاعاتی فاکس به راحتی Import شد. حالا تمام اطلاعات و بانک های فاکس رو روی SQL SERVER دارم.

از طریق ODBC کانکشن ساختم و از روی اون تمام بانکهای اطلاعاتی فاکس رو به صورت REMOTE VIEW در نرم افزارم ADD کزدم (طبیعتا با همون اسامی).

تا اینجا احتیاج به هیچ تغییری در سورس برنامه ندارم اما...

در سورس فعلی هنگام ثبت سند اول سیستم بانک DBFرو FLOCK میکرد تا کسی نتونه توش بنویسه ، بعد میرفت آخرین شماره سند رو یکی بهش اضافه میکرد و میشد شماره سند جدید و سپس اون رکوردها رو insert میکرد.

مشکل اینجاست که در حالت REMOTE VIEW ماچطور میتونیم اینکار رو بکنیم ؟

تنها کار ممکن اینه که یک دستور REQUERY() بزنیم تا REMOTE VIEW به روز رسانی بشه اونوقت شماره جدید رو بگیریم و در REMOTE VIEW عملیات insert رو انجام بدیم و سپس با دستور TABLEUPDATE() اطلاعات جدید ثبت شده در REMOTE VIEW رو به بانک SQL منتقل کنیم .

2 مشکل وجود داره

1- در حین این کار چون بانک اصلی SQL قفل نیست نفر دیگری هم همین کار رو انجام بده و با همین شماره سند ثبت کنه
2- دستور REQUERY() که برای بروز کردن REMOTE VIEW استفاده میشه سرعت کار رو کند میکنه و از نظر سرعت کار تغییری با حالت DBF بودن بانک نداره که هیچ ، یکمی هم بیشتر طول میده .

راه چاره چیه؟

اگر دوستان در این موارد تجربه ای دارن بگن که برام این کارحیثیتی شده...

ممنون...

gm_phk
چهارشنبه 01 دی 1389, 14:03 عصر
با سلام دوست عزیز

من یک برنامه تحت شبکه داشتم که تقریبا همین مشکل رو داشت برای حل آن من ابتدا شماره سند رو از یک بانک جداگانه برداشته و شماره را تا ثبت نهایی مسدود نگه می داشتم

تا اگر کاربری شما سند جدیدی رو خواست دیگه نتونند این شماره را ثبت کنند و در اتمام کار اگر کاربر سند رو ثبت نکرد شماره سند مسدود شده برای دیگر کاربران فعال می شد

arashkhaan2002
چهارشنبه 01 دی 1389, 14:40 عصر
به چه روشی شماره را مسدود میکردی دوست عزیز، البته فکر کنم راهکار بهتر از این هم باشه..

gm_phk
چهارشنبه 01 دی 1389, 15:10 عصر
با سلام مجدد
یک فیلد رو برای این کار اختصاص بدید هنگامی که شماره سند رو یکی از کاربران برای ثبت سند انتخاب کرده اند تا ثبت نهایی سند این شماره از طریق همین فیلد کنترل کنید
بعنوان مثال اگر داخل همین فیلد نوشته RES باشد یعنی رزرو برای ثبت می باشد

arashkhaan2002
چهارشنبه 01 دی 1389, 21:27 عصر
روش در نرم افزار من به این صورت بود که هنگام ثبت فایل را قفل میکنه و شماره دهی میکنه و تا ثبت نکنه فایل رو unlock نمیکنه تا کسی بتونه توش بنویسه یا شماره جدید بگیره ، ولی الان نمیدونم از چه طریق بانک sql رو قفل کنم ، چون دارم با remote view کار میکنم .

arashkhaan2002
جمعه 03 دی 1389, 13:04 عصر
انگار از دوستان قدیمی مثل Reza_TAVAK و Binyazو آقا مهران خبری نیست دیگه و زدن تو کار ساخت و ساز.

rezaTavak
شنبه 04 دی 1389, 07:44 صبح
سلام

شما از autoinc می‌توانید استفاده کنید اما ممکن است آنرا دوست نداشته باشید یا مشکلاتی داشته باشد راه دوم: بنابراین توصیه این است که یک جدول جدید ایجاد کنید و شماره سند موقتی که اختصاص داده می‌شود در آن ذکر کنید هر کس که سند جدید خواست اول سراغ این جدول برود و اول شماره بگیرد. بدی این روش این است که ممکن است کاربر از ادامه انصراف دهد و بسیاری از شماره‌ها از بین بروند. یعنی شماره سندی مثلا با ۱۳ وجود نداشته باشد چون کاربر آن را درخواست کرده و تکمیل نکرده است.

راه دیگر قفل جدول وجود دارد:

http://msdn.microsoft.com/en-us/library/aa213026.aspx




ساخت و ساز کجا بود این پروژه پایان نامه . کار و ... این است که کامپیوتر کار نمیکنم.



بالاخره هر یکی یه جوری درگیری دارد از آقای حسنی (بینیاز) هم خبر دارم که فرصت کافی ندارند.

arashkhaan2002
شنبه 04 دی 1389, 10:56 صبح
رضا جان اگر اون مورد sqlexec() حل بشه اینقدر سرعتش بالا هست که نیاز به قفل کردن نیست .

بچه ها در تالار sql گفتن با 20 کامپیوتر همزمان تست کردن شماره ها یکی نشده..