PDA

View Full Version : آموزش: یک نمونه تقریبا حرفه ای Back End & Front End



Rasool-GH
سه شنبه 01 مهر 1393, 12:52 عصر
سلام

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


اخرین نسخه پیوست شد : ورژن 3


برای راهنمایی دوستان در زمینه استفاده از فایل موارد زیر لازم به نظر میرسه .

الزامات :

1. نام فایل ServerDB و فرمهای سه گانه موجود در فایل UI را تغییر ندهید .
2. فرم FirstForm به عنوان فرم استارت اپ تعیین شده است . این تنظیم را تغییر ندهید .
3. از فرمی با نام frmMain به عنوان فرم اصلی یا فرم استارت اپ استفاده کنید و فرم خودتون رو جایگزین فرم موجود کنید .

روش انتقال برنامه خودتون به این فایل (روش 1) :

1 . جداول برنامه رو در فایل ServerDB ایجاد کنید یا جداول موجود را با استفاده از ایپورت تیبل به این فایل انتقال دهید .
2. فرمها ماکروها و کوئریها و ماژولهای مورد نظر را در فایل UI ایجاد کنید یا از فایل موجود با استفاده از منوی ایپورت به این فایل انتقال دهید .

135633

3. در فایل UI با ستفاده از ایمپورت لینک تیبل جداول موجود در فایل ServerDB را به شکل جدول لینک به فایل UI وارد کنید .

135634

4. کار تمومه . میتونید با باز کردن فایل UI از برنامه خودتون استفاده کنید . (در اولین اجرا فایل اقدام به شناسایی مسیر فایل ServerDB میکنه و ادرس جداول لینک شده رو اصلاح میکنه )

روش 2 :

1. جداول و فرمها رو در فایل خودتون از هم جدا کنید .
2. جداول رو به صورت لینک وارد فایل اصلی (فایلی که فرمها و کوئری ها داخل اون هستند ) کنید .
3. ماژول و فرمهای موجود در فایل UI را به فایل خودتون انتقال بدید .
4. اسم فایلی که جداول در اون هستند رو ServerDB بزارین.

Rasool-GH
پنج شنبه 03 مهر 1393, 12:05 عصر
سلام خدمت دوستان
این نسخه اصلاح شده همون مورد قبلی هست که تغییر کوچکی داخلش دادم تا در صورتی که فایل دیتابیس کنار فایل اصلی باشه اولویت برقراری ارتباط رو به اون بده .

ضمنا یک مورد که فراموش کردم ذکر کنم اینه که وجود جدول Assets برای عملکرد صحیح الزامیه

m.elmi
پنج شنبه 03 مهر 1393, 14:05 عصر
برنامة خوبيه. ولي براي اينكه كمي هم از اين تميزتر بشه (!)‌ بايد جدول Assets حذف بشه چون ظاهرا ارتباطي به كاركرد برنامه نداره.

Rasool-GH
پنج شنبه 03 مهر 1393, 20:11 عصر
سلام در پست قبلی ذکر کردم که وجودش الزامیه . البته من هم هرچی در کدها جستجو کردم ارتباطش رو پیدا نکردم . اگه بین دوستان کسی متوجه ارتباطش شد ممنون میشم که همینجا عنوان کنه .
این برنامه رو از یک برنامه خارجی استخراج کردم و تا جای ممکن تمیزش کردم . البته در کد نویسی مهارت ندارم . در صورتی که برای دوستان امکان داره دو ماژول برنامه رو یکی کنن . چون از قواعد برنامه نویشی در VBA اطلاعات کافی ندارم نتونستم همه توابع رو در یک ماژول وارد کنم . مخصوصا پارامتر های موجود در ماژول Global احتمالا موارد زاید داشته باشه

m.elmi
یک شنبه 06 مهر 1393, 19:24 عصر
رسول جدول Assets رو برداشتم. البته بنظرم كد اون يه باگ داشت ظاهرا تهيه كننده عجله بخرج داده بود آخرش بايد يه اصلاح مي كرد كه نكرده بود (يعني تصورم اينه!). تغييراتي كه من توي كد دادم مشخص شده. البته اين كار جالب و لازميه، خيلي وقتا ما مي خواييم با يه ديتاي آزمايشي نتيجة كار رو چك كنيم و لازمه كه Back End رو مرتب شيفت كنيم.

Rasool-GH
دوشنبه 07 مهر 1393, 09:59 صبح
ممنون از زحمتی که کشیدی . در مورد نوشتن کدها توی یک ماژول میشه کاری کرد ؟
کدوم قسمت کدها انحصاریه که اجازه نمیده همه کدها رو توی یک ماژول قرار داد ؟

m.elmi
دوشنبه 07 مهر 1393, 17:35 عصر
ديشب كه اون ماژول Global رو چك مي كردم بنظرم اومد كم و بيش پروسيجرهاش لازم اند. توي اون يكي ماژول استفاده شده ن. براي يكي كردن نبايد مشكلي وجود داشته باشه چك مي كنم.

m.elmi
دوشنبه 07 مهر 1393, 17:50 عصر
مشكلي نداشت اين هم فايل:

Rasool-GH
یک شنبه 20 مهر 1393, 08:17 صبح
سلام
ممنون بابت زمانی که صرف کردین .من چک کردم و متوجه شدم ایرادی که قبلا با اون مواجه بودم مربوط به کد دیگه ای بوده که در Global code وجود داشته . به هر صورت زحمت کشیدین

ضمنا چه تغییری در برنامه دادین که جدول Assets رو پاک کردین

m.elmi
یک شنبه 20 مهر 1393, 13:37 عصر
سلام
جدول Assets رو نمي شد برداشت چون بخاطر حرف اولش 'A' لازم بود كه باشه:
براي اينكه بتونه آدرس لينك جداول فعلي رو شناسايي كنه، بترتيب كه توي لوپ For Each جدول هاي موجود رو صدا مي زد بعد از Assets مي رسيد به جداول سيستمي (كه با MSys شروع مي شدند) و چون جداول سيستمي لينك نيستند يا قابل لينك نيستند به خطا بر مي خورد و به جداولي كه شما قرار دادي و با 't' شروع مي شدند اصلا نمي رسيد. (يعني اگه اسم جداول شما بر حسب اتفاق با چيزي قبل از 'M' شروع مي شد مي شد Assets رو برداشت - ولي البته اينكار اصولي نبود)
به همين خاطر من توي اون لوپ For Each جداول سيستمي اكسس رو استثنا كردم كه هميشه قابل اجرا باشه.

m.elmi
یک شنبه 20 مهر 1393, 13:52 عصر
يه مقدار كه دقيق تر نگاه كنيم بهتره اون لوپ فقط يه بار اجرا بشه (يعني اولين جدول غير سيستمي كه پيدا كرد متوقف بشه) - قبلا برنامه نويسش از 'Exit For' براي اين منظور استفاده كرده بود و من اونو غير فعال كردم ولي ميشه با يه تغيير كوچيك بَرِش گردوند.
در هر حال اگه لوپ چند بار هم استفاده بشه مشكلي ايجاد نمي كنه.

اما... اگه ما تركيبي از جداول لينك و غير لينك (جدول بومي فايل) رو داشته باشيم احتمالا خطا ايجاد مي كنه كه براي اين منظور بايد كدها رو دقيق تر كرد. براي شناسايي جدول لينك از غير لينك بايد راهي وجود داشته باشه در غير اينصورت ميشه با هدايت خطا جلوي مشكل رو گرفت.

در هر حال فايل Back و Front فعلي، جايي كه همة جداول موجود لينك باشند خطا نخواهد داد.

Rasool-GH
سه شنبه 22 مهر 1393, 12:05 عصر
سلام ممنون که توضیح دادین . من کد رو دیده بودم ولی متوجه این موضوع نبودم که ارتباط رو به ترتیب نامگذاری جداول چک میکنه . با توضیحاتی که دادین در صورتی که جدول بومی با حرفی قبل از جداول لینک شده وجود داشته باشه مشکل دوباره بروز میکنه . یک مقدار جست و جو میکنم ببینم چه راهی برای حل این مشکل میشه پیدا کرد .

Rasool-GH
سه شنبه 22 مهر 1393, 19:45 عصر
سلام
لطفا توضیح بدین که موارد زیر هر کدوم چه کاربردی در ماژول دارم
Option Compare Database

Option Explicit

و تابع Declare Function چه نوع تابعی هست ؟

Rasool-GH
جمعه 25 مهر 1393, 11:47 صبح
سلام .
جناب علمی با بررسی بیشتر به این نتیجه رسیدم که جداول محلی ادرسی رو در تابع fgetlink برگشت نمیدن ولی جداول لینک شده ادرس دارن . به همین دلیل یک شرط بررسی نتیجه قرار دادم و حلقه بررسی رو تا اخرین جدول ادامه دادم .
به نظرم دیگه باید مشکل به طور کلی حل شده باشه . دوستان نظر بدن لطفا

m.elmi
جمعه 25 مهر 1393, 21:44 عصر
سلام،

Option Compare Database یادمه که در گذشته وقتی لازم بود که سیستم sorting مطابق زبان معرفی شده به دیتابیس باشه استفاده داشت. قبل از Unicode - و یادمه که بطور مثال اگه سیستم عربی معرفی نمی شد (اون موقع فارسی نبود) اکسس 2.0 یا اکسس 95 نمی تونست sorting فارسی رو در دیتابیس تشخیص و انجام بده. به همین خاطر این Option اضافه می شد که sorting مطابق زبان معرفی شده انجام بشه. الان قاعدتا این مشکل دیگه وجود نداره. اما اگه الان حذف بشه حالت default باید Option Compare Binary باشه که در این صورت مقایسه ها در حروف به مشکل بر می خورند چون در این حالت دیگه بطور مثال "a" برابر با "A" نیست.

Option Explicit برای اینه که متغیر ها در پروسیجر ها حتما معرفی بشند والا خطا تولید می کنند. حالت default اینه که شما هر جا خواستید بدون معرفی (بدون استفاده از Dim) متغیر رو استفاده کنین. اکسس خودش نوع متغیر رو تشخیص می ده و تثبیت می کنه.

توابع نوع Declare هم برای کار با API ویندوز هست (Application Programming Interface). بطور مثال شما قصد دارین کارایی رو تو ویندوز انجام بدین مثلا کامپیوتر رو خاموش کنین، کاربر فعال رو تشخیص بدین، زبان کیبرد رو تغییر بدین و غیره.

m.elmi
جمعه 25 مهر 1393, 21:47 عصر
بابت اصلاح توی فایل، ممنونم از شما - حالا سر فرصت نگاه می کنم نظر می دم.

Rasool-GH
جمعه 10 مهر 1394, 12:50 عصر
سلام

دوستان نواقص برنامه برطرف شد و توضیحاتی هم در بین کدها اضافه شد .

برای راهنمایی دوستان در زمینه استفاده از فایل موارد زیر لازم به نظر میرسه .

الزامات :

1. نام فایل ServerDB و فرمهای سه گانه موجود در فایل UI را تغییر ندهید .
2. فرم FirstForm به عنوان فرم استارت اپ تعیین شده است . این تنظیم را تغییر ندهید .
3. از فرمی با نام frmMain به عنوان فرم اصلی یا فرم استارت اپ استفاده کنید و فرم خودتون رو جایگزین فرم موجود کنید .

روش انتقال برنامه با این فایل :

1 . جداول برنامه رو در فایل ServerDB ایجاد کنید یا جداول موجود را با استفاده از ایپورت تیبل به این فایل انتقال دهید .
2. فرمها ماکروها و کوئریها و ماژولهای مورد نظر را در فایل UI ایجاد کنید یا از فایل موجود با استفاده از منوی ایپورت به این فایل انتقال دهید .

135633

3. در فایل UI با ستفاده از ایمپورت لینک تیبل جداول موجود در فایل ServerDB را به شکل جدول لینک به فایل UI وارد کنید .

135634

4. کار تمومه . میتونید با باز کردن فایل UI از برنامه خودتون استفاده کنید . (در اولین اجرا فایل اقدام به شناسایی مسیر فایل ServerDB میکنه و ادرس جداول لینک شده رو اصلاح میکنه )

mahmooddavoodi
شنبه 11 مهر 1394, 10:29 صبح
سلام من وقتی جدول هامو میخوام به جدول UI ایمپورت کنم ارور میده
135648

Rasool-GH
شنبه 11 مهر 1394, 12:53 عصر
سلام بنظر میرسه جدول رو به شکل لینک دارید وارد فایل Server میکنید . مورد بعد اینکه شاید این نسخه فایل با افیس شما که 2003 هست سازگاری نداره . یک نسخه 2003 هم براتون قرار میدم

Rasool-GH
شنبه 11 مهر 1394, 16:54 عصر
نمونه 2003 هم در پست اول ضمیمه شد

karimi_mahdi65m
پنج شنبه 27 مهر 1396, 14:45 عصر
سلام دوستان من از نمونه های فوق استفاده کردم عالی بود، می خواستم بدونم توی اون قسمتی که مسیر فایل رو مشخص می کنه چطور باید تغییر بدم تا به تونم به جای فایل ، پوشه را انتخاب کنم؟
ممنون میشم که پاسخ بدید

hosseinwww
جمعه 24 آذر 1396, 18:18 عصر
سلام همه راهها رو رفتم فقط موقع بازکردن برنامه این ارورو میده یعنی در محیط برنامه نویسی مشخص میکنه که اینجا اشکال داره Declare function adh _accofficegetfilename lib "msaccssess.exe"
مال چیه؟

amirzazadeh
یک شنبه 26 آذر 1396, 18:32 عصر
سلام همه راهها رو رفتم فقط موقع بازکردن برنامه این ارورو میده یعنی در محیط برنامه نویسی مشخص میکنه که اینجا اشکال داره Declare function adh _accofficegetfilename lib "msaccssess.exe"
مال چیه؟
سلام احتمالا افيس 64 بيتي رو سيستم شما نصب شده. كد رو به اين شكل اصلاح كنيد.


Declare ptrsafe function adh _accofficegetfilename lib "msaccssess.exe"