-
نقل قول: برنامه نویسی شبکه
اما توضيح البته ممكنه راه مناسبي نباشه اما به هر حال خودش يك روشه
سطر اول كه مشخصه از مولتي لوك استفاده ميكنيم تا بتونيم ركوردهاي متعددي را قفل كنيم
اگه فرض كنيم ما فايلي داريم كه شامل شماره حسابها و نام اشخاص باشه و فايلهاي متعدد ديگه كه شامل فايل سند و يا دفاتر معين و تفضيل و كل و ..
ابتدا بايدبراي ثبت سند هر حسابي اون ركورد را در اختيار بگيريم نه فايل را چون تغييري نميخواهيم در اين فايل
انجام بديم فرض كنيم عمليات بانكي باشه بر اساس مانده فعلي عمليات برداشت انجام ميشه
پس ركورد شماره حساب خاص را بررسي و در صورتي كه قفل نيست قفل و در صورت قفل بودن به كاربر پيام ميديم و زمان بررسي قفل را هم به يك يا دوثانيه كاهش ميديم
اما اگه ركورد قفل نبود و توسط ما قفل شد پس از هر مدت زمان لازم كه اطلاعات سند را كامل كرديم و دستور ثبت را صادر كرديم چون در اين حالت با توجه به نوع دستورات براي اضافه كردن اطلاعات و يا تغييرات در فايلهاي ديگر ممكنه فايل هاي ديگر كاملا قفل بشه دستور بررسي قفلهاي فايل را روي اتوماتيك مي گذاريم
و در نهايت همين فايل اولي را unlock ميكنيم
اگه اشتباه نكنم زمان اتوماتيك بررسي قفل فايل حدود 100 ثانيه است كه اين هم زمان زيادي براي ثبت در فايلها و ما كمتر از يك ثانيه نياز داريم
بعد كاربر بعدي وقتي به اون حساب دسترسي داره كه مانده تغيير كرده
اميدوارم منظورم را رسونده باشم اگه مفهوم نيست بگيد تا توضيح بدم
-
نقل قول: برنامه نویسی شبکه
البته راه حل بهتري هم هست كه از دستور BEGIN TRANSACTION استفاده كني
و البته از نوع تو در تو كه بصورت منطقي شرايط فايلها و قفل اونها را بررسي و در كمترين زمان بصورت فيزيكي بروز اوري ميشه
دستورات sql معمولا بصورت اتوماتيك ركورد يا فايل را قفل ميكنند كه در help توضيحاتش هست
-
نقل قول: برنامه نویسی شبکه
سلام دوستان
اکثر اوقات اطلاعات داخل حافظه کلاینت (مثلا در ناحیه 2 یک dbf یوز شده) حتی من دستور set refresh to 1,1 هم گذاشتم به لحظه نیست و اگر کسی روی یک کلاینت سندی بزنه گاها اتفاق میوفته که کلاینت های دیگه اونو نمیبینن یا بدتر از اون با همون شماره (چون نمیبیننش) سند ثبت میکنن و سندها قاطی یا سند اولیه حذف میشه !
این مشکل وقتی از دستور select Max(field_name) from '\\server\sds\sanad.dbf برای پیدا کردن بزرگترین شماره سند استفاده میکنی کمتر بروز میکنه چون میره از روی خود سرور میخونه البته سرعت کار پائینه ولی دیروز من به جای این دستور ، چون رو فیلد شماره سند cdx داشتم ، از دو دستورselect 2, سپس go botom واسه پیدا کردن بزرگترین شماره سند و اضافه کردن عدد 1 برای ایجاد شماره سند جدید استفاده کردم به جای دستور select max(field_name اغلب سیستمها به مشکل خوردن و شماره های پرت و پلا و چند شماره قبل از آخرین شماره رو به عنوان بزرگترین شماره بعد از دستور go bottom بر گردونده!!! جالبش اینجاست که در بعضی قسمتها فقط یک سیستم داشته سند میزده!!!!!!
خلاصه حسابی آبروم رفته نمیدونم علت چیه.
ضمنا هنگام ثبت اطلاعات ابتدا flock میکنم با Insert اطلاعات رو ثبت و بعدش هم flush force کردهunlock میکنم.
لطفا هرکس میتونه کمک کنه.
ممنون
-
نقل قول: برنامه نویسی شبکه
برای کار در شبکه سعی کنید از قدرت و سهولت فاکس و برتری sql server کمک بگیرید
یعنی برنامه نویسی با فاکس و بانک اطلاعاتیش sql server
این موضوع باعث میشه قدرت این دو را با هم جمع کنید و راحت تر به هدفتون برسید
-
نقل قول: برنامه نویسی شبکه
Sql serverیا mysql? کدوم ورزنش؟
-
نقل قول: برنامه نویسی شبکه
یعنی از طریق vfp odbc driver از بانکهای sql تو فاکس view بسازمو باهاش کار کنم دیگه؟
-
نقل قول: برنامه نویسی شبکه
sql server منابع زیادی در اینترنت داره که میتونید از طریق oledb یا odbc باهاش ارتباط برقرار کنید.وقتی یک رکورد ست از اطلاعاتتون ساختید و خواستید دوباره کانکشن رو فعال کنید و اطلاعاتتون رو با تغییراتی که توش دادید دوباره در دیتابیس ذخیره کنید اگر کاربر دیگه ای هم همون موقع بخواد تغییراتی بده میشه کانفلیکت بوجود آمده رو مدیریت کرد
در مورد mysql هم باید بگم که خوش دسته ولی منابع کمی داره.یه کتاب برای کار با فاکس و mysql هست که من تا الان نتونستم نسخه ای از اونو توی نت برای دانلود پیدا کنم.خریدشم که با شرایطی که ما داریم ............
-
نقل قول: برنامه نویسی شبکه
من sql server 2000 رو نصب کردم و برای آزمایش یکی از dbf هامو توی دیتابیسش import کردم ، بعد دیتابیس sql-server رو به odbc اضافه کردم.
بعد داخل پروژه ویژوال فاکس یک دیتابیس ایجاد کردم و یک کانکشن به دیتابیس sql درون odbc زدم و از اون بانک مورد نظر(همون بانک dbf که داخل sql server بردم و import کرده بودم) یک remote view گرفتم.
حالا این view رو در یک ناحیه کاری use میکنم و عین یک بانک عادی باهاش کار میکنم . هر وقت چیزی رو بهش اضافه یا ویرایش میکنم بعدش دستور tableupdate() رو میزنم تو بانک sql server هم اون تغییرات لحاظ میشه.
ولی اگه یه چیزی رو تو بانک sql تغیییر بدم (مثلا کاربر دیگری این تغییر رو داده) ، تا زمانی که view رو در ناحیه کاریش نبندم و دوباره use نکنم view تغییرات انجام شده روی sql-server در view ما update نمیشه !؟
اگرم از دستور refresh() استفاده کنم پیغام میده که key field ، بانک uniqe نیست !
برای حل این مشکل باید چکارکرد که وقتی کاربر دیگه ای بانک sql server رو تغییر میده روی viewما update بشه؟
-
نقل قول: برنامه نویسی شبکه
این به خاطر اینه که شما ارتباط یک طرفه با sql برقرار کردی و تغییرات از سمت شما در sql اعمال میشه ولی از اون طرف این اتفاق نمی افته
من منظورم اینه که شما باید بطور کلی از دستورات ado استفاده کنید تا این مشکل هارو نداشته باشید
-
نقل قول: برنامه نویسی شبکه
چطوری؟ ado رو از کجا نصب کنم و دستوراتش خاصه؟ کلا روش کار چیه؟
-
نقل قول: برنامه نویسی شبکه
امیدوارم با مطالعه فایلها و مثالهای این ضمیمه مشکلتون حل بشه.متاسفانه چون حجمش یکم زیاد بود مجبور شدم بزارمش توی سایت 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 استفاده کنه تا این رمز و ندونه نمی تونه بازش کنه
ولی برای کار با برنامه های تحت شبکه بزرگ که فکر کنم برنامه ات جزو اونها باشه بهتره اسکیوال رو ادامه بدی مسلما در ابتدای راه این مشکلات و خواهی داشت.
موفق باشید
-
نقل قول: برنامه نویسی شبکه
-
نقل قول: برنامه نویسی شبکه
دوستان عزیز و آقا مهران گل سلام
از وقتی free table هامو بردم داخل یک دیتابیس و ازشون استفاده میکنم ، امنیت بالاتر رفته و دیگه به اون مشکلات قبلی بر نخوردم ولی چون از دیتا بافرینگ استفاده نمیکنم بدلیل ترس از بروز نبودن حتی لحظه ای اطلاعات ، سیستم روی شبکه سرعتش کمتر شده . این مسئله به وضوح هنگام browse کردن مشهوده و کاربرا رو شاکی کرده ، موقعی که از free table استفاده میکردم سرعت به مراتب بالاتر بود .
اگه توصیه ای دارین بفرمائین . ضمنا اول برنامه set refresh to 1,0.001 گذاشتم.
-
نقل قول: برنامه نویسی شبکه
نقل قول:
نوشته شده توسط
arashkhaan2002
دوستان عزیز و آقا مهران گل سلام
از وقتی free table هامو بردم داخل یک دیتابیس و ازشون استفاده میکنم ، امنیت بالاتر رفته و دیگه به اون مشکلات قبلی بر نخوردم ولی چون از دیتا بافرینگ استفاده نمیکنم بدلیل ترس از بروز نبودن حتی لحظه ای اطلاعات ، سیستم روی شبکه سرعتش کمتر شده . این مسئله به وضوح هنگام browse کردن مشهوده و کاربرا رو شاکی کرده ، موقعی که از free table استفاده میکردم سرعت به مراتب بالاتر بود .
اگه توصیه ای دارین بفرمائین . ضمنا اول برنامه set refresh to 1,0.001 گذاشتم.
سلام
عذر ميخوام منظورتون از browse كردن چيه ؟!
اگر نمايش در گريد هستش ، مگر شما از sql استفاده نميكنين ؟. منظورم اس كيو ال خود فاكسه ؟
-
نقل قول: برنامه نویسی شبکه
دیتابیس شدن جز اینکه یک سری امکانات بیشتری بده فکر نمی کنم تاثیری توی سرعت داشته باشه .
بافرینگ را روی یک رکورد تنظیم کنید نباید نگران رفرش شدن باشید چون فقط رکوردی که در حال تغییر هست بافرینگ می شه.
در هر صورت اگر کندی به دلیل حجم بالای اطلاعات شماست بازهم می گم مای اسکیوال که راحت تر از اسکیوال سرور هم هست
-
نقل قول: برنامه نویسی شبکه
Browse را وقتی که کاربر میخواد جستجو کنه روی کدها میگذارم .
set refresh ru gozashtam rye 0,5 سرعت بهتر شد.
-
نقل قول: برنامه نویسی شبکه
سلام دوستان
اگه منبعی در رابطه با برنامه نویسی شبکه با #c و sql دارید معرفی کنید
-
نقل قول: برنامه نویسی شبکه
شما باید برای دریافت پاسخ به بخش C# مراجعه کنید.در بخش open source ، من یه مثال خوب و جامع گذاشتم
-
نقل قول: برنامه نویسی شبکه
اين واقعا يك سوال جديده ؟!! آخه تاريخ ارسالش مربوط به شنبه 02 اسفند 1382, 01:01 صبح است ولي آخرين پست اين تاپيكه ؟!!
-
نقل قول: برنامه نویسی شبکه
نقل قول:
نوشته شده توسط
mehran_337
مسلما تاثیر می زاره . حالا اگه کاربرات زیاد باهوش نیستند (البته من در هیچ برنامه ای کاربرارو دست کم نمی گیرم) می تونی کارهای امنیتی هم تا حدی پیش ببری.
مثلا توی محثی دیتابیس قرار بگیر و راست کلیک و پروپرتیز بزن می بینی که دیتابیس هم واسه خودش متدهایی داره مثلا وقتی باز می شه یا وقتی تیبلی مشاهد می شه حذف می شه و ...
می تونی پروسیجری بنویسی مثلا در active دیتابیس بنویس
if a <> 123
return .f.
endif
حالا توی برنامه ات یه متغیر عمومی a با مقدار 123 تعریف کن بعد دیتابیس و باز کن. اگه کاربر یه کم بلد باشه از use استفاده کنه تا این رمز و ندونه نمی تونه بازش کنه
ولی برای کار با برنامه های تحت شبکه بزرگ که فکر کنم برنامه ات جزو اونها باشه بهتره اسکیوال رو ادامه بدی مسلما در ابتدای راه این مشکلات و خواهی داشت.
موفق باشید
با سلام .
مهران جان به فرمایش شما در active دیتابیسم ، پروسیجر شما را نوشتم ولی بدون وجود متغیر A هم بانک اطلاعاتی من باز شد و هم جدولم با دستور Use فعال شد .
حالا اگر بخواهم روی بانک اطلاعاتی و یا جدولم پسوورد بگذارم باید چه کنم ؟
با سپاس .
-
نقل قول: برنامه نویسی شبکه
در وقايع زير کدتون رو اضافه کنيد :
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
-
1 ضمیمه
نقل قول: برنامه نویسی شبکه
با سلام .
جناب بی نیاز عزیز ، مدیر محترم
در وقایع مربوطه کد مذکور را اضافه کردم ولی نشد .
به پیوست فایلها را ارسال میکنم ، تا در صورت صلاحدید بررسی بفرمایید .
با تشکر
-
نقل قول: برنامه نویسی شبکه
علاوه بر نوشتن کدها بايد روي ديتابيس در طراح ديتابيس کليک راست کنيد و گزينه 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 استفاده كنيم