ايران ويج

نسخه‌ی کامل: لطفا كمك كنيد نياز فوري دارم
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام
یه خبر خوب Biggrin Biggrin Biggrin و یه خبر بد . :cry: :cry: :cry:
متاسفانه یکی از کندترین روشهای یادگیری ، روش سعی و خطاست .
من با همین روش بالاخره تو نستم مشکلی رو که در بالا در مورد عوض شدن مسیر دیتا بیس بود رو حل کنم و چندین بار رو دو تا سیستم و سه جور ویندوز تست کردم تا مطمئن شم .
اما روش
ببینید ما دو حالت برای ارتباط با بانک اطلاعتی در Data Environment داریم در هر حالت از یکسری کدهای مخصوصی استفاده می کنیم .
حالت اول استفاد از DAO هست که من از نسخه چهار استفاده می کنم . در این حالت می شه با هر اکسسی ارتباط بر قرار کرد . برای برقراری ارتباط من ابتدا کدها رو به صورت دستی می نویسم بعد در قسمت کد نویسی Dataenvironment این کد رو می نویسم .

کد:
Private Sub DataEnvironment_Initialize()
  path = App.path & "\data.mdb"
de.cn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & ";Persist Security Info=False"
End Sub
و بعد هنگام لود شدن گزارش این دستور باعث می شه که دیتا بیس درست انتخاب بشه . البته می شه در ابتدای اجرای برنامه یعنی در فرم رمز گیری یا فرم لود برنامه اصلی می شه یه آدرسی رو گرفت و در یک TEXT BOX قرار داد و بعد بجای اینکه در متغیر PAT مسیر جاری رو بدیم محتویات اون تکست رو بزاری . این روش کاملاٌ امکان داره و اجرا می شه . فقط باید یه چیزی رو در نظر گرفت اون هم اینکه باید بعد از اینکه دیتا ریپورت نشون داده شد وقتی فرم رو می بندیم باید اونو کلاٌ Unload کنیم . چون دفعه بعد که می خواد لود بشه اگه تو حافظه باشه و دستوراتی که گفتم اجرا بشه مشکل بوجود میاد . یعنی نمی تونه دوبار آدرس دهی کنه . برای Unload کردن Dataenvoronment هم می شه از یه کلید استفاده کرد . مثلاٌ کلیدی که باعث می شه گزارش نشون داده بشه در این قسمت ابتداCall Unload (dataenvironmext name) 1 نوشته بشه بعد دستور نمایش ریپورت رو بنویسم . یا اینکه در صفحه ای که می خواهیم از اونجا دیتا ریپورت رو نشون بدیم در خاصیت Form Load اون صفحه بیاییم و Dataenvironment رو Unload کنیم .
من در اجرای این روش در یک حالت به مشکل برخورد کردم اون هم اینکه متاسفانه رو دیتابیس هایی که پسورد دارن جواب ندارد . برای حل این مشکل هم از روش دوم استفاده کردم .


در روش دوم از OLEDB استفاده می شه . در این حالت دقیقاٌ مثل روش اول ابتدا DataEnvironment و Datareport به صورت دستی تعریف می شن و در قسمت کد نویسی Dataenvironment این کد نوشته می شه .
کد:
Private Sub DataEnvironment_Initialize()
  Dim path As String
  path = loadform.bp.Text
  dr1.cn1.Open "provider=MSDASQL.1;Password=rsgaddress;Persist Security Info=True;User ID=admin;Extended Properties=" & "DBQ=" & path & ";DefaultDir=E:\address;Driver={Driver do Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;FILEDSN=E:\address\abb.vmn.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;PWD=rsgaddress;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
End Sub
در اين قسمت مي تونين آدرس پيشرفض ديتا بيس رو كه E:\address\abb.vmn در نظر گرفتيم رو به آدرس PATH‌عوض كنين براي اين كار بجاي آدرس اينو مي شه نوشت
" & path & "
ولي اگه ننويسيم هم مشكلي نيست .
البته باید باز مثل روش اول در هنگامی که دیتا ریپورت فراخوانی می شه ابتدا بیاد دیتا انویرونمنت رو آن لود کنه بعد دیتا ریپورت رو فراخوانی کنه . یا اینکه در صفحه ای که می خواهیم از اونجا دیتا ریپورت رو نشون بدیم در خاصیت Form Load اون صفحه بیاییم و Dataenvironment رو Unload کنیم .
البته روش تنظیم Data Environment هم تقریباٌ مثل روش DAO هست که اگه نتونستین انجام بدین بفرمایین تا اینجا این روش رو هم بنویسم .

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


اما یه مشکل دیگه . این یکی خیلی خیلی سخته . با این روشها ما مقدار تمامی رکوردهایی که فیلد اون رو در دیتا ریپورت قرار دادیم نشون داده می شه . مثلاٌ وقتی فیلدNAME رو قرار می دیم تمامی اسامی نشون داده می شه . حالا چطور می شه کاری کردی که یکسری از فیلدهای خاص مثلاٌ با یک شرط مثل اینکه تمامی اسامی توش الف باشه نشون داده بشه . یعنی یه حالت گزارشگیری از داده ها ؟

رو اینم کار می کنم و نتیجه رو می گم

با تشکر - مشمولی
چرا اینطوری شد . عرض فرم چرا اینقدر زیاد شد . :?: :?:
سلام
مشمولي عزيز از توضيحات خوبيت ممنونم . روي روشت كار ميكنم حتما ...


در مورد عرض فرم هم من ميدونم چرا ..!
وقتي كه بين كلمات space بخوره . كلمات تو يه خط چيده ميشه تا زماني كه خط جا نداشته باشه اون وقت در جايي كه آخرين space وجود داره اينتر ميخوره . اما در كدي كه قرار دادي كلمه اصلا فاصله نداره . پس نميتونه اونو بشكونه و بره سر خط ! پس تنها راهش اينه كه عرض table رو افزايش بده ...مثه صفحه اول سايت كه به خاطر Parameters.CreateParameter عرض تيبل نمايش پستهاي آخر زياد شده !!!

البته ميدونم كه ميدونستي و ما رو سر كار گذاشتي Amaze
حالا عوضش تو بهم ياد بده چطوري بك گراند ويندوز رو عوض كنم :wink:
سلام

اولاً نوشته قبلي يكسري ايراد داشت كه درستش كردم

ثانياً اگه من بلدم كسي رو سر كار بزارم اول خودمو استخدام مي كنم . Amaze

ثالثاً مي گن براي عوض كردن بك گراند بايد روي دسك تاپ كليك راست كني و يكسري كارهاي ديگه . البته من همشو مي دونم ولي رو دو تا موضوع گير كردم و اولاً اين دسك تاپ كه مي گن كجاست و كليك راست يعني چي ؟ :?: :?: :?: Amaze Amaze Amaze

بهر حال اگه فرصت شد امشب يكسري مطالب آموزشي و يه برنامه نمونه مي زارم تو سايت
سلام دوستان
اول در مورد مسير بانك بگم كه من خودم هميشه در برنامه هام از روش زير استفاده مي كنم و مشكلي هم نداشتم
کد:
Path = App.Path & "\Database.mdb"
DataEnvironment1.Connection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Path & ";Persist Security Info=False"

در مورد سوال مشمولي عزيز هم بگم كه با استفاده از دستورات sql مي تونيم هر جور كه بخواهيم گزارش بگيريم يه روش با استفاده از كدنويسي داخل برنامه هست يه روش ساده تر هم اينكه در داخل DataEnvironment روي Command اي كه فيلد هاي اون به ديتا ريپورت متصل شده كليك راست بعد properties و در قسمت Sql Statment هر دستوريSql رو كه خواستي بنويس و اون دستوري كه نوشتي روي ديتا ريپورت اعمال ميشه
مثلا همون مثالي كه خودت گفتي
'Select * From TabelName Where Name Like '%A
حالا اگه ديتا ريپورت رو Show كني ميبيني كه فقط نام كسايي هست كه اول اسم اونا A باشه.
سلام
روش استفاده از دستورات SQL بهترین و استاندارد ترین روشی هست که می شه انجام داد .
اما یه روش دیگه هم اینکه بیاییم و اطلاعاتی رو که می خواهیم از بانک جدول بگیریم و در یه جدول دیگه قرار بدیم . برای اینکار می تونیم فایلهایی ایجاد کنیم که وقتی برنامه اجرا می شه ایجاد بشن و وقتی از برنامه خارج می شیم از پاک بشن و یا در داخل خود بانک اطلاعاتی جدول ها رو بسازیم و بعد از اون جداول ریپورت بگیریم . البته این روش محدودیتهای بسیاری داره و فقط در شرایط خاصی جواب می ده .
بهر حال همون SQL بهتره .

خوب وقتشه که یه مقاله خوب در این مورد به همراه یکسری سورس تو سایت گذاشته بشه . اگه دوستانی که بلدن وقت داشته باشن لطف کنن که یاد گرفتن با سعی و خطا خیلی زحمت می خواد > دیگه بقیه دوستان زیاد مشکل نباشه و بتونن راحت یاد بگیرن .


با تشکر _ مشمولی
صفحه‌ها: 1 2