View Full Version : سوال: باز کردن بانک اطلاعاتی با دستور Use
Mostafa Tabeshkar
جمعه 26 مهر 1387, 18:59 عصر
با سلام خدمت تمامی استادان گرامی ، یه مشکل برخوردم که راه حلی واسش پیدا نمی کنم ، یک بانک اطلاعاتی تحت فاکس پرو دارم که می خوام با دستور Use فعال کنم و به اطلاعات دسترسی پیدا کنم ، متاسفانه با پیغام Not Database File مواجه می شم ، این در حالی است که همین بانک در برنامه ای که بهش مربوط می شه استفاده می شه و مشکلی هم نداره ، از دوستان اگر کسی می تونه راهنماییم کنه که باید چیکار کنم ممنون می شم .
binyaz2003
جمعه 26 مهر 1387, 21:01 عصر
اگر برنامه شما تحت ويندوز است بايد به همراه آن يک ديتابيس هم باشد که شايد شما فايل رو کپي ميکنيد و بعد ميخواهيد آن را باز کنيد.آن فايل را در همان پوشه اي که در آن قرار دارد باز کنيد.شايد هم اصلا ديتابيس آن مال فاکس نباشد و براي رد گم کردن پسوند آن را dbf گزاشته اند.
Mostafa Tabeshkar
شنبه 27 مهر 1387, 19:09 عصر
ضمن تشکر ، فاکس تحت داس هست و فایل هم مطمئن هستم که DBF هست
سعید حمیدیانفر
یک شنبه 28 مهر 1387, 08:55 صبح
ممكنه فايل شما كد شده باشه
كه تو داس معمولا در قسمت header اينكار رو ميكردن تا فايل باز نشه . مخلص كلام اينكه اگه حدس من درست باشه بايد هدر فايل دستكاري بشه . اگه براتون مقدوره فايل رو اينجا بزاريد تا با كمك اساتيد ببينيم چه ميشه كرد .
ابی بنی حسینی
یک شنبه 28 مهر 1387, 14:54 عصر
سه تا فرمان زیر رو صادر کن ببین درست میشه یا نه؟ چون بعضی از برنامه نویسها موقع خروج از برنامه اولین بایت از بانک اطلاعاتی رو عوض میکنن و فاکس دیگه اونو بعنوان یه بانک اطلاعات نمیشناسه.
a= fopen('filenamdbf',2) - = fwri(a,chr(3) ) - clos all
binyaz2003
یک شنبه 28 مهر 1387, 17:32 عصر
سه تا فرمان زیر رو صادر کن ببین درست میشه یا نه؟ چون بعضی از برنامه نویسها موقع خروج از برنامه اولین بایت از بانک اطلاعاتی رو عوض میکنن و فاکس دیگه اونو بعنوان یه بانک اطلاعات نمیشناسه.
a= fopen('filenamdbf',2) - = fwri(a,chr(3) ) - clos all
البته فراموش نکنيد که حتما يک فايل کپي از اون داشته باشيد اما راه بهتر اينه که اگر ريفاکس داريد با اون بازش کنيد(اگر مسئله هدر باشه اون بازش ميکنه) و ميتونيد بنام يک فايل ديگه ذخيره اش کنيد.
Parmida48
پنج شنبه 25 تیر 1388, 20:48 عصر
فکر کنم NU ابزارهائی برای کمک به شما داشته باشه
arashkhaan2002
شنبه 27 تیر 1388, 14:25 عصر
اگه فایل رو واسم بفرستید واستون درستش میکنم . sepand_data_development@yahoo.com
new_day
چهارشنبه 01 مهر 1388, 13:35 عصر
با سلام تاپيك نزديكتر به موضوع غير از اين تاپيك پيدا نكردم
بهترين روش براي باز كردن جداول يك بانك كدام روش است؟
برنامه اي دارم كه 34 جدول تحت يك بانك و در محيط شبكه با 10 كاربر ميباشد بهترين روش باز كردن جداول براي جلوگيري از ترافيك شبكه چيست
ايا جدولها را در ناحيه كاري باز كنم
يا با data enver..
mehran_337
چهارشنبه 01 مهر 1388, 15:05 عصر
من در چنین برنامه ای بجای باز کردن بانک از دستورات اسکیوال استفاده می کنم
new_day
چهارشنبه 01 مهر 1388, 15:36 عصر
با سلام ، اگه ممكنه توضيح كاملي بدهيد
new_day
پنج شنبه 02 مهر 1388, 08:45 صبح
با سلام بازم سوالم را تكرار كردم شايد كسي راهنمايي كنه؟
بهترين روش براي باز كردن جداول يك بانك كدام روش است؟
برنامه اي دارم كه 34 جدول تحت يك بانك و در محيط شبكه با 10 كاربر ميباشد بهترين روش باز كردن جداول براي جلوگيري از ترافيك شبكه چيست
ايا جدولها را در ناحيه كاري باز كنم
يا با data enver..
وقتي از DATA ENVER استفاده ميكنم سرعت باز كردن فرمها كند ميشه
اگه از ناحيه كاري استفاده كنم بعضي از فرمها كه با ويزارد نوشته شده ايراد پيدا ميكنه
mehran_337
شنبه 04 مهر 1388, 08:21 صبح
اینها روشهای شخصی است و ممکنه منتقدینی هم داشته باشه :
اگر برنامه ای تحت شبکه نباشد در DataEnvironment جداول را اضافه می کنم که مدیریت باز و بسته کردن با خود فاکس است و در این فرم از use استفاده نخواهم کرد (لزومی ندارد) در چنین برنامه هایی به دلیل امکان خراب شدن جداول در هنگام قطع برق در ابتدای برنامه لودینگی طراحی می کنم که چک کردن جداول را انجام می دهد.
اگر برنامه های تحت شبکه باشد بهتر است از mysql یا sqlserver استفاده شود. اگر نمی خواهید اینکار را بکنید بهتر است بجای اینکه جدولی را باز کنید از آن جدول کوئری گرفته و اطلاعاتش را درون کرسر بریزید (با دستور select) و اگر رکوردی اضافه کنید بجای append از دستور insert استفاده کنید و ...
new_day
شنبه 04 مهر 1388, 11:16 صبح
با سلام
اطلاعات كافي براي استفاده از mysql یا sqlserver ندارم بنظر شما با عجله اي كه من دارم ميشه ازش استفاده كرد
new_day
شنبه 04 مهر 1388, 11:26 صبح
ضمنا توضيحي در رابطه با برنامه مورد نظر بدم شايد بتونيد بيشتر راهنماييم بكنيد
اين برنامه قبلا تحت فاكس 2.6 در ويندوز 98 كار ميكرد با توجه به مادربردهاي جديد كه 98 را قبول نميكنند و مشكلات ديگه با VF9 دوبار نوشتم
بانك اطلاعاتي و جداول را در شاخه اي در درايوي از سرور قرار داده و اون درايو را شرينگ كرده ام مثل قبلا در 2.6
اما اكثر فرمها 4 تا 9 جدول داره كه از طريق DATA ENVER باز و بسته ميشه وقتي از WIZARD استفاده ميكنم
سرعت كم و اگر چند تا گرايد در فرم باشه و از ويزارد هم استفاده نشه بازم سرعت كمه
در فرمهايي كه از ويزارد و گرايد استفاده نشده و از دستور SCATTER memvar براي نمايش استفاده ميكنم
سرعت بهتره اگه جداول را در 34 ناحيه كاري باز كنم برخي از ويزارد ها هنگام اضافه كردن يا انصراف از اضافه كردن خطاي بافر ميگيره
ضمنا اكثر سيستم ها را هم جديد كردم CPU 5200 دوال كر هست اما برخي هنوز قديمي يعتي CPU 2500+ , ..
new_day
شنبه 04 مهر 1388, 12:12 عصر
بجای اینکه جدولی را باز کنید از آن جدول کوئری گرفته و اطلاعاتش را درون کرسر بریزید (با دستور select) و اگر رکوردی اضافه کنید بجای append از دستور insert استفاده کنید و ...
منظورتون اينه كه براي نمايش چند جدول از كوئري هاي مركب استفاده بشه يا اينكه فرمها را طوري طراحي كنم كه اطلاعات اصلي هميشه در حال نمايش باشه و در صورت نياز بقيه اطلاعات را ببينيم
اكثر فرمها داراي جداول متعدد است
مثلا حسابهاي اشخاص كه مشخصات از يك جدول و گردش بدهكار و بستانكار از جدول ديگه و چكهاي داده شده از جدول ديگه و ...
mehran_337
شنبه 04 مهر 1388, 14:38 عصر
منظور من این هست که بجای اینکه هر جدولی را use بکنید از همان جدول به تنهایی کوئری بگیرید تا درون کرسر ریخته شود مهم اینه که توی کرسر باشه (بافر)
و اما ..
من فکر می کنم شما ویژوال را با روش داس انجام می دهید این روش را اکثر کسانی که از داس به ویندوز شروع می کنند در ابتدای راه دارند یعنی درون ویندوز از روش های داس استفاده می کنند.
نیاز به زمان و تمرین دارید که روشتان را اصلاح کنید
new_day
یک شنبه 05 مهر 1388, 17:33 عصر
با سلام
استاد به اين روش
SELECT * FROM mydata-"\data13"+sal+".dbc!table1" INTO CURSOR cursor1
عمل كردم
البته اين كد را در dataenver-beforeopentableقرار دادم
ايا نظر بهتري داريد؟
mehran_337
یک شنبه 05 مهر 1388, 18:00 عصر
در init فرم هم می شود قرار داد البته باید ببینید الگوریتم برنامه شما چطوره .
مثلا در این حالت تا زمانیکه کاربر فرم را نبندد اطلاعات جدید را نخواهد دید پس ممکن است در حالیکه کاربر فرمش باز است کاربر دیگری اطلاعاتی را تغییر یا اضافه کند اما کاربر اول نخواهد دید پس فکری هم باید به حال رفرش کردن اطلاعات کنید مثلا دکمه ای قرار دهید یا بر اساس نیاز بعنوان مثال در اکتیو فرم قرار دهد و از این قبیل ..
new_day
یک شنبه 05 مهر 1388, 20:53 عصر
با تشكر فراوان
برايم خيلي جالبه يعني بدون اينكه جدول در ناحيه كاري يا غيره باز بمونه كوئري از اون گرفته ميشه و از اون استفاده ميكنيم درسته؟
اما يك مطلب ديگه
اگه اشتباه نكنم در كتاب ويژوال 3 خونده بودم كه استفاده از use و باز كردن جدوال در ناحيه هاي كاري بهتر از
اينه كه مداوم توي شبكه بخواهي جداول را باز و بسته كني ودر اين حالت مقدار كمي حافظه صرف نگهداري هندل فايلها ميشود
اما فكر ميكنم روش شما حتي بهتر از روش فوق باشه !
mehran_337
دوشنبه 06 مهر 1388, 07:38 صبح
هیچوقت نمی شه گفت روشی را برای همه برنامه ها یکسان استفاده کرد بلکه بر اساس استراتژی هر برنامه روشهای مختلفی را بکار می گیریم . اگر قرار باشد همه برنامه ها یک روش داشته باشند پس من و شما برنامه نویس نیستیم بلکه مونتاژ کار دستورات هستیم بدون هیچ ابتکاری.
من کلی عرض کردم و گرنه در برنامه ای دیگر از روش use استفاده کردم و در برنامه ای دیگر از mysql.
البته مطلب بالا امروزه زیاد هم درست نیست چون زمان ویژوال فاکس 3 پردازنده ها چه سرعتی داشتند و الان چه سرعتی دارند؟
فاکس با همه فرق می کنه از زمان داس که اسم دیتابیس روی جداولش بود و تا حالا کاربرای فاکس باید مفهوم دیتابیس و جدول رو تفکیک کنند در صورتیکه در زبانهای دیگه این مسائل انقدر گیرپاژ نداره چون بحث use table مفهومی نداره و این مختص فاکسه
new_day
سه شنبه 07 مهر 1388, 11:19 صبح
با سلام
اگه ممكنه يك مثال با فرم در اين قسمت بزاريد البته با عرض معذرت و تشكر فراوان
من موفق شدم اما خيلي دوست دارم روش شما را در اين مورد كامل ياد بگيرم
دوستان ديگه هم اگه راههايي دارند لطف كنند و توضيح بدهند
mehran_337
چهارشنبه 08 مهر 1388, 07:53 صبح
جدا کردن یک فرم از درون برنامه ای که ده ها جدول دارد کار زمان گیری است و فعلا برایم مقدور نیست اما بطور خلاصه :
1 - ثبت کدینگ (فرمهایی که فقط با یک جدول ارتباط دارند مانند ثبت مشخصات افراد) :
در این فرمها controlsource هر شی را به فیلد جدول متصل می کنم البته جداول در این حالت بافرینگ است (به دستور tableupdate مراجعه شود)
2 - ثبت عملیاتی همچون فاکتور و حقوق و ...
در اینگونه فرمها می بایست بین جداول ارتباط باشد . بنده بجای ارتباط مستقیم با فیلدها از متغیر استفاده می کنم و بافرینگ هم استفاده نمی کنم (اینطوری راحت ترم:چشمک: )
در این حالات در ابتدای برنامه حتما سلامت جداول را چک می کنم (لودینگ را قبلا تشریح کردم)
3 - اگر هم از mysql استفاده کنم با کوئری و دستوراتی که قبلا گفتم استفاده می کنم
امید وارم مفید بوده باشد
new_day
یک شنبه 12 اردیبهشت 1389, 17:02 عصر
با سلام
وقتي از جداول كوئري ميگيريم بصورت اتوماتيك جدول در ناحيه كاري خالي باز ميشه ؟درسته؟ چون پس از باز كردن ديتابايس وگرفتن كوئري ناحيه هاي كاري را چك كردم ديدم كه جداول مربوط به اون كوئري باز شده
1- آيا نياز هست اين جداول را ببنديم يا خير
2- آيا اگه فرم ديگه اي را باز كنيم و كوئري اي داشته باشيم كه از جدولهاي فرم قبلي بخواهد استفاده كنه آيا
دوباره اونا در ناحيه جديد از نو باز ميكنه يا اول چك ميكنه اگه باز باشه از همون ناحيه استفاده ميكنه؟
3 آيا باز كردن جداول بدين روش مثل دستور use هست يا خير وايا چون بصورت مستقيم روي اطلاعات نيستيم
اسيب پذيري جدول در صورت قطع برق كمتر است ؟
mehran_337
دوشنبه 13 اردیبهشت 1389, 08:11 صبح
کلا هر کوئری (چنانچه خروجی اش را کرسر تعریف کنید ) یک کرسر ایجاد می کند یعنی فایل موقت در مسیر temp ویندوز.
مدیریت ناحیه های کاری را خود برنامه انجام می دهد و نیازی نیست شما کاری انجام دهید . ناحیه خالی را پیدا کرده و باز می کند و شما نگران هیچ مسئله ای نباشید تا زمانیکه آن فایل باز باشد مثال
Select * from tblname into cursor tblname
...
دستورات
...
select tblname
use
خب مسلم است وقتی دستور بالا را اجرا کنید بسته می شود اما اگر دستور بالا را دهها بار اجرا کنید دهها ناحیه کاری باز می شود.
نکته آخر اینکه یادتان نرود که اگر اطلاعاتتان آپدیت شد کوئری را دوباره اجرا نمایید تا اطلاعات جدید نیز نمایش داده شود باز هم نگران ناحیه کاری نباشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.