امیدوارم با مطالعه فایلها و مثالهای این ضمیمه مشکلتون حل بشه.متاسفانه چون حجمش یکم زیاد بود مجبور شدم بزارمش توی سایت rapidshare
http://rapidshare.com/files/31185027...mssql.rar.html
Printable View
امیدوارم با مطالعه فایلها و مثالهای این ضمیمه مشکلتون حل بشه.متاسفانه چون حجمش یکم زیاد بود مجبور شدم بزارمش توی سایت rapidshare
http://rapidshare.com/files/31185027...mssql.rar.html
سلام
اين همون Client-Server Applications with Visual FoxPro 6.0 and SQL Server هست يا يک چيز جديده؟
همون کتابه به علاوه یه تعداد مثال
چرا بعضی اوقات روی شبکه کاربرا وقتی یکی اطلاعات ذخیره میکنه و روی DBF که روی سرور شیر شده هم ذخیره میشه ، بقیه کامپیوترها نمیتونند اون رکوردها رو ببینند؟ یهنی اگه مثلا با دستور Select sql که میزنی نمیارتش ، گاها هم دیدم که اصلا با اجرای این دستور select که به آدرس اون فایل روی سرور اشاره داره هیچ send,recive دیده نمیشه ولی error هم نمیده؟!!
این مشکل فاکسه؟ شبکه س؟ یا ویندوز؟ یا بافر؟؟
ضمنا اگه ویندوز کلاینت ریستارت شه اونوقت رکوردهای جدید رو میبینه.
***user 1
select 1
if flock()
delete from '\\server\sds\snd.dbf' where s_no=6;
insert into '\\server\sds\snd.dbf' (s_no,...) value (6,...)
flush force in 1
unlock in 1
endif
****
i check the snd.dbf on server and the record(s) is saved on it on server BUT....
*** another users ***
select * from '\\server\sds\snd.dbf' where s_no=6
result:
it's empty!!
or
select max(s_no) from '\\server\sds\snd.dbf' into cursor snd_no;
result:
max_s_no=5!!!!
****
and during the execution of select command there is no activity on network indicator!!!
انگاری دوستان کسی با فاکس دیگه برنامه شبکه نمینویسه که به مشکل بخوره!
جناب آرش
قبلا هم عرض کردم که برای کار در شبکه سعی کنید از بانک اطلاعاتی sql server استفاده کنید
فاکس بیشتر به درد محیط کاری تک کاربره میخوره و امروزه مدیریت فرآیندهای پیچیده در بانکهای اطلاعاتی مستلزم استفاده از پایگاه های داده قوی مانند sql اوراکل mysql میباشد
هرچند فاکس هنوز هم قویه ولی واقعا با پیچیدگیهای شبکه ای بهتره استفاده از فایلهای dbf رو کنار بزارید.همونطور که میدانید دلفی بصورت پیش فرض از پارادوکس استفاده میکنه ولی تقریبا تمام برنامه نویسهای دلفی برای مدیریت بانکهای اطلاعاتی از sql و ... استفاده میکنن.البته dbf کجا و پارادوکس کجا.
حتی بهتون پیشنهاد میکنم در صورت ادامه استفاده از جداول dbf بر روی یک کامپیوتر و share کردن آن برای سایرین ، بدلیل مشکلات حافظه و کندی و ... حتما از بافرینگ بر روی سطر(توجه کنید که سطر و نه کل جدول)
استفاده کنید
باور بفرمائید سهولت برنامه نویسی با فاکس رو اگر با قدرت بانکهای اطلاعاتی قوی مثل sql آمیخته کنید برنامه شما صاحب توانائی های خوبی میشود
من توی vb.net , C# یکی از کارهای کوچیکی رو که مثل آب خوردن توی فاکس انجام میدادم نمیتونم انجام بدم از بس که سخت و طاقت فرساست
باور کنید برای استفاده از کومبو و گرید و برخی از این ابزارهای پر مصرف آدم باید توی سی شارپ و وی بی دات نت و .... هزار تا پشت وارو بزنه تا به نتیجه برسه در صورتی که در فاکس همه اینها با کمترین کوششی قابل دست یافتنه
یا علی مدد
عید بر همگی مبارک
سلام
من فكر ميكنم فرايند استفاده شما اشتباهه. من در پروژه هاي تحت شبكه هيچ گاه به اين مشكلاتي كه شما مي فرمائيد بر نخوردم و فكر ميكنم علتش تمامي شيوه كدنويسي ست .
مثلا من در يك فايل متني مسير ديتابيس اصلي رو گذاشتم حال اون ديتابيس ميتونه ازش استفاده تك كاربره بشه يا شبكه . اگر قرار باشه تحت شبكه كار كنن كاربر مياد مسير ديتابيس رو تنظيم ميكنه .
بعد از DataEnvironment براي كار با جداولم استفاده ميكنم .
در ضمن من فقط ديتابيس رو شر ميكنم نه كل پوشه برنامه رو.
مرسی آقای کیا ، شما درست میفرمائید ، این کار واسه پروژه های آتیم عملی هست منتها در حال حاضر من دنبال حل مشکل کاربران فعلیم هستم.
رهرو جان من تو برنامه ام بانکهام همه free table هستش ، و فقط مسیرشون روی سرور آدرس میدم همونطور که تو کدهای بالائی میبینی ، میشه لطفا در مورد روش مورد استفادت بیشتر توضیح بدی .
من فایلهام بینشون ریلیشنی وجود نداره و در صورت نیاز از دستورات sql واسه پیوندشون استفاده میکنم.
راجع به گذاشتن فایلهات تو دیتابیس و آدرس دهی روی سرور و نحوه اتصال data enviroument به database یا free table روی سرور میشه بیشتر توضیح بدی ، البته تا حدوی میدونم ولی میخوام ببینم دقیقا چیکار کردی.
مثلا فرض کنیم یک دیتابیس ایجاد کردیم و میخوایم توش add table کنیم ، معلوم نیست بعدا مسیر table ها روی سرور کجا باشه که الان بخواهیم add کنیم؟؟!! واسه data enviroument هم همین مسئله هست.
واسه همین من اول برنامه مسیر فایل های روی سرور رو تو یه متغییر میریزم و اول آدرس table هام میگذارم و باهاشون با دستورات sql کار میکنم.
دوست من ، من به نوبه خودم ميتونم بگويم اين ساده ترين نوع در شبكه است . و اصلا از اين درسرهايي كه شما ميگيد درش دخيل نيست . شما زحمت خودتون را اضافه كردي. مثلا چرا از ريليشنها نبايد استفاده كرد در حالي خيلي مفيد ميشه ازش سود جست.
موقعي كه شما ديتابيس رو شر ميكني اصلا نيازي نيست بدوني مسير جداولت كجا قرار دارند و دقيقا روش رفتار با اونها مثل رفتار با يك سيستم تك كاربره ست . شما فقط و فقط آدرس ديتابيس رو ميخاي كه اونهم داري .
يك تست كوچكلو بزن ، خودت متوجه ميشي .
البته هنوز از اساتيد من نقدي بر اين روش نديدم .
1 - شاید اولین نقد این باشه که همه کاربران به دیتابیس شما دسترسی دارند حتی می تونن حذفش کنن .
البته شما مجبورید در شبکه ای که دامین نداره از همین روش استفاده کنید .
2 - استفاده از دیتابیس شیرین ترین بخش قدرت نمایی فاکسه چرا free table اون هم تحت شبکه ؟؟؟؟ با این کار قدرت فاکس و محدود کردین
3 - منم تفاوت خاصی بین ایجاد رلیشن در ابتدای دیتابیس احساس نکردم ارتباط ها را با select ایجاد می می کنم اینطوری وقتی در ساختار جد اول تغییراتی ایجاد می شه دردسر سر و کله زدن با رلیشن ها کمتر می شه
4 - بجای flock از قفل رکورد استفاده کنید و حتما رکورد جاری رو بافرینگ کنید
ممنون دوستان عزیز
من هم برای قدرت نمائی بیشتر فاکس! فعلا فری تیبل هامو بردم تو یه دیتابیس و تو برنامه ام به جای آدرس دهی تک تک فری تیبل ها فقط آدرس دیتا بیس رو دادم و سپس بصورت معمولی با آوردن اسم دیتابیس و سپس نام فری تیبل اونها رو تو نواحی مختلف کاری یوز کردم . حالا ببینم بازم به مشکلات تداخلی میخورم یا نه
در مورد flock() من مجبورم هنگام ثبت واسه شماره دهی اینکاروبکنم تا تداخل شماره ایجاد نشه.
دوستان عزیز و آقا مهران گل و جناب کیا;
در رابطه با ایجاد بانکها در sql server 2000 من به راحتی تونستم از طریق odbc و با remote view زدن به بانک sql و کار کردن با remote view به عنوان بانک اطلاعاتی فاکس و پس از هر تغییر tableupdate() زدن برای به روز شدن بانک اصلی در sql , برای به روز کردن remote view با استفاده از دستور requery() کار رو تا اینجا به راحتی انجام بدم.
فقط مجبور شدم همه فیلدها رو با هم به عنوان key field تعریف کنم.چون احتمال تکراری بودن همه رکورد یک سند میرفت.
هیچکی مارو وشبکه فاکسو تحویل نمیگیره انگاری .
خوبه چه فروم فعالی داریم ، بهتره دوستان عزیز یه سری به www.foxite.com بزنن ببینن چقدر فعاله.
مهران جان از توصیه ات ممنونم ، free table هامو گذاشتم تو یه دیتابیس و اول برنامه به جای آدرس دهی تک تک تیبل ها ، open database میکنم و راحت با table ها کار میکنم فعلا تو شبکه تحت تسته ، امیدوارم دیگه تداخل ، کانفلیکت ، کالیژن و آپدیت نبودن واسم پیش نیاد.
فکر میکنی غیر از امنیت ، تو سرعت کارمم هم اینجوری تاثیر مثبت بذاره؟
مسلما تاثیر می زاره . حالا اگه کاربرات زیاد باهوش نیستند (البته من در هیچ برنامه ای کاربرارو دست کم نمی گیرم) می تونی کارهای امنیتی هم تا حدی پیش ببری.
مثلا توی محثی دیتابیس قرار بگیر و راست کلیک و پروپرتیز بزن می بینی که دیتابیس هم واسه خودش متدهایی داره مثلا وقتی باز می شه یا وقتی تیبلی مشاهد می شه حذف می شه و ...
می تونی پروسیجری بنویسی مثلا در active دیتابیس بنویس
if a <> 123
return .f.
endif
حالا توی برنامه ات یه متغیر عمومی a با مقدار 123 تعریف کن بعد دیتابیس و باز کن. اگه کاربر یه کم بلد باشه از use استفاده کنه تا این رمز و ندونه نمی تونه بازش کنه
ولی برای کار با برنامه های تحت شبکه بزرگ که فکر کنم برنامه ات جزو اونها باشه بهتره اسکیوال رو ادامه بدی مسلما در ابتدای راه این مشکلات و خواهی داشت.
موفق باشید
شايد کمک کنه :
http://www.foxite.com/articles/read....er-application
دوستان عزیز و آقا مهران گل سلام
از وقتی free table هامو بردم داخل یک دیتابیس و ازشون استفاده میکنم ، امنیت بالاتر رفته و دیگه به اون مشکلات قبلی بر نخوردم ولی چون از دیتا بافرینگ استفاده نمیکنم بدلیل ترس از بروز نبودن حتی لحظه ای اطلاعات ، سیستم روی شبکه سرعتش کمتر شده . این مسئله به وضوح هنگام browse کردن مشهوده و کاربرا رو شاکی کرده ، موقعی که از free table استفاده میکردم سرعت به مراتب بالاتر بود .
اگه توصیه ای دارین بفرمائین . ضمنا اول برنامه set refresh to 1,0.001 گذاشتم.
دیتابیس شدن جز اینکه یک سری امکانات بیشتری بده فکر نمی کنم تاثیری توی سرعت داشته باشه .
بافرینگ را روی یک رکورد تنظیم کنید نباید نگران رفرش شدن باشید چون فقط رکوردی که در حال تغییر هست بافرینگ می شه.
در هر صورت اگر کندی به دلیل حجم بالای اطلاعات شماست بازهم می گم مای اسکیوال که راحت تر از اسکیوال سرور هم هست
Browse را وقتی که کاربر میخواد جستجو کنه روی کدها میگذارم .
set refresh ru gozashtam rye 0,5 سرعت بهتر شد.
سلام دوستان
اگه منبعی در رابطه با برنامه نویسی شبکه با #c و sql دارید معرفی کنید
شما باید برای دریافت پاسخ به بخش C# مراجعه کنید.در بخش open source ، من یه مثال خوب و جامع گذاشتم
اين واقعا يك سوال جديده ؟!! آخه تاريخ ارسالش مربوط به شنبه 02 اسفند 1382, 01:01 صبح است ولي آخرين پست اين تاپيكه ؟!!
در وقايع زير کدتون رو اضافه کنيد :
PROCEDURE dbc_OpenData(cDatabaseName, lExclusive, lNoupdate, lValidate)
*Immediately after DBC is opened.
ENDPROC
PROCEDURE dbc_ModifyData(cDatabaseName, lNoWait, lNoEdit)
*Immediately after MODIFY DATABASE is issued.
ENDPROC
PROCEDURE dbc_Activate(cDatabaseName)
*When DBC is made current via SET DATABASE TO <dbname> or after OPEN DATABASE completes.
ENDPROC
PROCEDURE dbc_BeforeAddTable(cTableName, cLongTableName)
*Just before a table is added to the DBC. Return .F. to prevent table from being added.
ENDPROC
PROCEDURE dbc_BeforeAppendProc(cFileName, nCodePage, lOverWrite)
*Just before a DBC stored procedure is appended to.
ENDPROC
PROCEDURE dbc_BeforeCreateTable(cTableName, cLongTableName)
*Just before a table is created. Return .F. to prevent table creation.
ENDPROC
PROCEDURE dbc_BeforeCreateView(cViewName)
*Just before a view is created. Return .F. to prevent view creation.
ENDPROC
PROCEDURE dbc_BeforeModifyProc()
*Just before a DBC stored procedure is modified.
ENDPROC
PROCEDURE dbc_BeforeModifyTable(cTableName)
*Just before a table is modified. Return .F. to prevent modification.
ENDPROC
PROCEDURE dbc_BeforeDropTable(cTableName, lRecycle)
*Just before a table is dropped from DBC. Return .F. to prevent table from being dropped.
ENDPROC
PROCEDURE dbc_BeforeModifyView(cViewName)
*Just before a view is modified. Return .F. to prevent modification.
ENDPROC
PROCEDURE dbc_BeforeOpenTable(cTableName)
*Just before a table or view is opened. Return .F. to prevent table or view being opened.
ENDPROC
با سلام .
جناب بی نیاز عزیز ، مدیر محترم
در وقایع مربوطه کد مذکور را اضافه کردم ولی نشد .
به پیوست فایلها را ارسال میکنم ، تا در صورت صلاحدید بررسی بفرمایید .
با تشکر
علاوه بر نوشتن کدها بايد روي ديتابيس در طراح ديتابيس کليک راست کنيد و گزينه Properties ر ا انتخاب و سپس گزينه Set Events On را انتخاب کنيد.
#DEFINE DVDLOGIN_LOC [Enter password:]
#DEFINE DVDLOGINCAP_LOC [DVD Login]
#DEFINE DATAOPEN_LOC Database opened by
#DEFINE DATACLOSED_LOC Database closed by
#DEFINE NOMOD_LOC "Sorry, you cannot modify this table."
PROCEDURE dbc_BeforeOpenTable(cTableName)
*Just before a table or view is opened. Return .F. to prevent table or view being opened.
IF ATC("ctablename",cTableName)#0 AND UPPER(ALLTRIM(INPUTBOX(DVDLOGIN_LOC,DVDLOGINCAP_LO C)))#"123456"
*IF ATC("operator",cTableName)#0 AND USERNAME#"23456"
* Since this is a sample, we will ignore password, however, you can enforce it by returning .F.
RETURN .F.
*RETURN .T.
ENDIF
ENDPROC
PROCEDURE dbc_OpenData(cDatabaseName, lExclusive, lNoupdate, lValidate)
*Immediately after DBC is opened.
LOCAL lcStr,lcLog
TEXT TO lcStr NOSHOW TEXTMERGE
DATAOPEN_LOC <<SYS(0)>> <<DATETIME()>>.
ENDTEXT
lcLog = FORCEEXT(cDatabaseName,"LOG")
STRTOFILE(lcStr,lcLog,.T.)
ENDPROC
PROCEDURE dbc_CloseData(cDatabaseName, lExclusive, lNoupdate, lValidate)
*Immediately after DBC is opened.
LOCAL lcStr,lcLog
TEXT TO lcStr NOSHOW TEXTMERGE
DATACLOSED_LOC <<SYS(0)>> <<DATETIME()>>.
ENDTEXT
lcLog = FORCEEXT(cDatabaseName,"LOG")
STRTOFILE(lcStr,lcLog,.T.)
ENDPROC
PROCEDURE dbc_BeforeModifyTable(cTableName)
* Just before a table is modified. Return .F. to prevent modification.
IF ATC("ctablename",cTableName)#0
MESSAGEBOX(NOMOD_LOC)
RETURN .F.
ENDIF
ENDPROC
اين كدها در مثالهاي خود ويژوال موجود كه درedit stroed procedures ذخيره و براي امنيت ديتاباس استفاده ميشه
http://social.msdn.microsoft.com/For...a-798c91028f87
به اين ادرس نگاه كنيد
در مورد امنيت جدول و پسورد گذاري موضوع جالبي داره
Procedure dbc_OpenData(cDatabaseName, lExclusive, lNoupdate, lValidate)
*Immediately after DBC is opened.
If Vartype(ANY_RANDOM_VARIABLE)= "U" .Or. ANY_RANDOM_VARIABLE<> "YOUR_PASSWORD"
Return .F.
Endif
Endproc
هنگامي كه جدولي خارج از برنامه بخواهد باز بشه و براي كنترل متغيري در برنامه تعريف كرده باشيم چون متغير براي كنترل مجاز بودن و غير مجاز بودن در بانك تعريف نــــــــــــشده پيام خطا ميده اما در برنــــامه فوق Vartype(ANY_RANDOM_VARIABLE)= "U" ميگه اگه چنين متغيري نامفهوم و ناشناخته بود يا مخالف پسورد بود دسترسي را غير ممكن كن
با سلام
ايا براي باز كردن جداول يك بانك در محيط شبكه براي بالا بردن سرعت يكي از اين دو راه زير مناسب است يا خير؟
1- در فرم اصلي برنامه در متدي تمام جداول را با دستور USE database!table SHARED IN 0 باز كنيم و
datasession مساوي يك قرار بدهيم تا از جداول باز شده در تمام فرمها بتونيم استفاده كنيم.
2-در data environment فرم اصلي كليه جداول را انتخاب كنيم كنيم و بازم datasession مساوي يك قرار بدهيم تا بتونيم در تمام فرمها از انها استفاده كنيم
و در دو حالت براي خواندن و ثبت و ويرايش از دستورا ت sql مثل insert into , update و SELECT ... INTO cursor استفاده كنيم
با سلام .
جناب بی نیاز به فرموده شما :
"علاوه بر نوشتن کدها بايد روي ديتابيس در طراح ديتابيس کليک راست کنيد و گزينه Properties ر ا انتخاب و سپس گزينه Set Events On را انتخاب کنيد."
عمل کردم و مشکلم حل شد ، خیلی ممنونم .
ولی یک ایراد اینکه کاربران میتوانند بدون بازکردن دیتابیس با دستور Free Table جداول را از بانک بیرون کشیده و محتویات آنرا ببینند و صد البته کار من را زیاد کنند چون باید دوباره به دیتابیس اضافه اش کنم .
آیا راهی برای جلوگیری از اینمورد وجود دارد ؟
با سلام-اگه جداول در server رو use کنی فرمانهای free table و remove table امكان اجرا ندارند.البته اگر روی سرعت برنامه تاثیری نداشته باشدکه خوب باید تست بشه.
با سلام
اگه راهنمايي در مورد پست 80 سه تا پست قبل از اين داريد بفرماييد در مورد باز كردان جداول در شبكه.
در محيط شبكه باز كردن ديتاباس زياد طول ميكشه اما جداول كمتر . درايوي را شرينگ كرده ايم و با دستور
OPEN DATABASE N:\MASIR\MYDATA.DBC انرا باز ميكنيم در اين مورد سرعت باز كردن ديتا بايس كمي كند است N همان درايو شبكه است اما اگر از دستور OPEN DATABASE \\SERVER\MASIR\MYDATABASE.DBC
باز هم سرعت پايين است ولي كمي بهتر است لطفا راهنمايي كنيد
سلام-اگه امکانش هست بجای ip از نام server استفاده کنیدودر برنامه اصلی پوشه default رو پوشه share شده قرار بدید.البته من ابتدا در سرور یک user به پوشه share شده اختصاص میدم و در برنامه اصلی با فرمان net use به پوشه در سرور connect میشم(با username و password تعریف شده برای user )
-کلا به نظر من بهتره از sql server استفاده کنید.فقط کافیه اطلاعات خیلی کمی از sqlserver بدونی و با استفاده از remote view براحتی (تا حد زیادی مانند جداول خود فاکس)باهاش کار کنید.به هر حال اگه دوست داشتید میتونم اطلاعات کاملتری بهتون بدم.
- در مورد سرعت باید بگویم طبق امتحانی که کردم وقتی یک نفر table ی را با یک آدرس شبکه use میکند سرعت SEEK و ذخیره اطاعات تا حدود 10 برابر سریعتر است از موقعی که یک نفر دیگر هم آن TABLE را فقط USE کند.
این مسئله کاملا به WINDOWS مربوط میشود ، این را از اینجا میگویم که در HELP ویژوال فاکس پرو به هیچوجه در این مورد صحبتی نشده ، و بالعکس WINDOWS در مورد روش برخورد با کسانی که از فایل share شده در شبکه استفاده میکنند نوشته هایی دارد که این موضوع را تایید میکند.
WINDOWS که مسئول فایلهاست ، وقتی برنامه ای فایلی را از یک آدرس شبکه باز میکند ، به Windows Client اجازه میدهد که تغییرات را مرتبا بر روی دیسک SERVER ننویسد و نخواند بلکه آنها را یکبار برای همیشه روی کامپیوتر خودش CACHE کند، دقت کنید که روح آن برنامه از این موضوع خبر ندارد.
به محض اینکه برنامه دیگری از یک کامپیوتر دیگر همان فایل را خواست باز کند ، WINDOWS server به WINDOWS client که برنامه اول روی آن اجرا بود میگوید که اطلاعات را بر روی دیسک server بنویس و CACHE بازی دیگه تموم ، حالا همه باید مستقیم با دیسک SERVER کار کنند چون دیگر تنها نیستی. (این قضیه درست است چون از دید همه ، برنامه اول فایل روی SERVER را تغییر داده ، در حالی که تغییر در CACHE با تغییر فایل در دیسک SERVER متفاوت است)
همین موقع است که سرعت نفر اول کم میشود.
البته این کم شدن سرعت موقعی محسوس هست که بانکها خیلی حجیم باشد یا سرعت شبکه خیلی کم باشد چون مثلا اگر هر دستور replace ،زمان 0.0004 ثانیه طول بکشد ، و شما 100 بار این دستور را در اون پروسه ای که در حال اجرا شدن است داشته باشید کلا میشود 0.04 ثانیه که اگر این بحثی که بالا کردم 10 برابر هم سرعت را کم کند ، سرعت اجرای برنامه شما میشود 0.4 ثانیه که باز قابل حس نیست.
این موضوع را وقتی کشف کردم برایم خیلی جالب بود ، وقتی دیدم دوست دیگری به چیزی مانند این اشاره کرده ، خواستم کشف خود را اینجا بنویسم.
با سلام
منظور شما اينه كه جداول را هم با ادرس سرور باز كنيم ميشه توضيح بيشتري بدهيد و مثال بزنيد كه
1-چگونه ديتاباس را باز ميكني
2- چطور جداول را باز ميكني
3- سرور را چگونه تنظيم ميكني ايا پوشه را شرينگ ميكني يا درايوي را شرينگ ميكني
4-ايا حجم درايو شرينگ شده اگر زياد باشد در كندي سرعت نقش دارد
5-بعد ار اينها در فرمها از چه سبكي استفاده ميكني مثلا از بافر يا از دستورات SQL , ...
اگه براتون ممكنه مثال هم بزنيد با تشكر فراوان
نه ،منظور من اصلا این نیست ، من در مورد موضوعات کاملا متفاوتی صحبت کردم.
من کلا در مورد لایه های زیرین سیستم عامل Windows و موضوع CACHE شدن فایل میخواستم توضیح بدهم و منظور من از "یک نفر table ی را با یک آدرس شبکه use میکند" این بود که میخواستم CACHE شدن فایلها هنگامی که از شبکه خوانده شده اند را توضیح بدهم.(در مقابل خوانده شدن از هارد دیسک کامپیوتر )
اما در مورد سئولات شما که موضوع دیگریست ، تنظیماتی که برای نرم افزار خودمان اجرا شده است را به شما میگویم که ممکن است بهینه نباشد (این یک برنامه قدیمی است که من ننوشتم و فقط پشتیبانی آن را بر عهده دارم):
1-
OPEN DATABASE &p_prim_dir\account_store
.
.
.
Close DataBase
که "p_prim_dir="Q:\BANKS
ما برای بازکردن دیتابیس هایمان از dataenvironment استفاده نکرده ایم ، و در هر پروسه از برنامه بانکها را همان جا اول باز میکنیم و بعد میبندیم ، برنامه نویسش معتقد بود که بانکها نباید همیشه باز باشند در اینجا ممکن است انتقادی باشد که نمونه های برنامه VFP اکثرا بانکها را در dataenvironment باز میکنند تا برنامه نویسی راحتتر شود.
اما به نظرم این کاری که ما کردیم جلوی چند اشکال را میگیرد ، احتمال خراب شدن بانکها کمتر میشود و همینطور یک خوبی دیگر هم دارد که صحت اطلاعات بهتر میشود که مربوط به اون قضیه ایست که در پست قبل گفتم .
2-
USE t821100r1
3-ما یک پوشه به نام PROGRAMS را در سرور share میکنیم و از کامپیوتر های client این فولدر MAP میشود به Q:
4-فکر نمی کنم.
5-همان طور که از 1 و2 معلوم است ما از همان DBF های VFP استفاده میکنیم. و در برنامه یمان از Buffering استفاده نکردیم . چون برنامه نویسمان ، برنامه نویس FoxPro DOS بود و اصلا نمیدانستند که Buffering هم وجود دارد ، اما بالاخره برنامه امان با اشکالاتی کار میکند . من خودم از SELECT SQL جدیدا به وفور استفاده کرده ام ولی قبل از من کل برنامه ما حتی یک SELECT SQL هم نداشت.(از بقیه دستورات SQL استفاده نمیکنیم)
سلام به اساتید عزیز-من از برنامه زیر برای اتصال به پوشه share شده استفاده میکنم که بدون map drive
انجام میشه.البته همانطور که مشخصه نام سرور رو با استفاده از sqlserver میگیرم.که هم با فرمانهای
net use خود windows ميشه گرفت(فرمانش یادم نیست تو help هست)وهم اینکه نام رو تو بر نامه وارد کنیم.