۳۰-بهمن-۱۳۸۳, ۱۵:۳۲:۵۰
سلام
یه خبر خوب و یه خبر بد . :cry: :cry: :cry:
متاسفانه یکی از کندترین روشهای یادگیری ، روش سعی و خطاست .
من با همین روش بالاخره تو نستم مشکلی رو که در بالا در مورد عوض شدن مسیر دیتا بیس بود رو حل کنم و چندین بار رو دو تا سیستم و سه جور ویندوز تست کردم تا مطمئن شم .
اما روش
ببینید ما دو حالت برای ارتباط با بانک اطلاعتی در Data Environment داریم در هر حالت از یکسری کدهای مخصوصی استفاده می کنیم .
حالت اول استفاد از DAO هست که من از نسخه چهار استفاده می کنم . در این حالت می شه با هر اکسسی ارتباط بر قرار کرد . برای برقراری ارتباط من ابتدا کدها رو به صورت دستی می نویسم بعد در قسمت کد نویسی Dataenvironment این کد رو می نویسم .
و بعد هنگام لود شدن گزارش این دستور باعث می شه که دیتا بیس درست انتخاب بشه . البته می شه در ابتدای اجرای برنامه یعنی در فرم رمز گیری یا فرم لود برنامه اصلی می شه یه آدرسی رو گرفت و در یک TEXT BOX قرار داد و بعد بجای اینکه در متغیر PAT مسیر جاری رو بدیم محتویات اون تکست رو بزاری . این روش کاملاٌ امکان داره و اجرا می شه . فقط باید یه چیزی رو در نظر گرفت اون هم اینکه باید بعد از اینکه دیتا ریپورت نشون داده شد وقتی فرم رو می بندیم باید اونو کلاٌ Unload کنیم . چون دفعه بعد که می خواد لود بشه اگه تو حافظه باشه و دستوراتی که گفتم اجرا بشه مشکل بوجود میاد . یعنی نمی تونه دوبار آدرس دهی کنه . برای Unload کردن Dataenvoronment هم می شه از یه کلید استفاده کرد . مثلاٌ کلیدی که باعث می شه گزارش نشون داده بشه در این قسمت ابتداCall Unload (dataenvironmext name) 1 نوشته بشه بعد دستور نمایش ریپورت رو بنویسم . یا اینکه در صفحه ای که می خواهیم از اونجا دیتا ریپورت رو نشون بدیم در خاصیت Form Load اون صفحه بیاییم و Dataenvironment رو Unload کنیم .
من در اجرای این روش در یک حالت به مشکل برخورد کردم اون هم اینکه متاسفانه رو دیتابیس هایی که پسورد دارن جواب ندارد . برای حل این مشکل هم از روش دوم استفاده کردم .
در روش دوم از OLEDB استفاده می شه . در این حالت دقیقاٌ مثل روش اول ابتدا DataEnvironment و Datareport به صورت دستی تعریف می شن و در قسمت کد نویسی Dataenvironment این کد نوشته می شه .
در اين قسمت مي تونين آدرس پيشرفض ديتا بيس رو كه E:\address\abb.vmn در نظر گرفتيم رو به آدرس PATHعوض كنين براي اين كار بجاي آدرس اينو مي شه نوشت
" & path & "
ولي اگه ننويسيم هم مشكلي نيست .
البته باید باز مثل روش اول در هنگامی که دیتا ریپورت فراخوانی می شه ابتدا بیاد دیتا انویرونمنت رو آن لود کنه بعد دیتا ریپورت رو فراخوانی کنه . یا اینکه در صفحه ای که می خواهیم از اونجا دیتا ریپورت رو نشون بدیم در خاصیت Form Load اون صفحه بیاییم و Dataenvironment رو Unload کنیم .
البته روش تنظیم Data Environment هم تقریباٌ مثل روش DAO هست که اگه نتونستین انجام بدین بفرمایین تا اینجا این روش رو هم بنویسم .
خلاصه در نهایت من با این روش تو نستم مشکل محل دیتا بیس رو حل کنم و یه برنامه نمونه هم اگه وقت شد می زارم تو سایت تا دقیقاٌ کدها در اختیارتون باشه .
اما یه مشکل دیگه . این یکی خیلی خیلی سخته . با این روشها ما مقدار تمامی رکوردهایی که فیلد اون رو در دیتا ریپورت قرار دادیم نشون داده می شه . مثلاٌ وقتی فیلدNAME رو قرار می دیم تمامی اسامی نشون داده می شه . حالا چطور می شه کاری کردی که یکسری از فیلدهای خاص مثلاٌ با یک شرط مثل اینکه تمامی اسامی توش الف باشه نشون داده بشه . یعنی یه حالت گزارشگیری از داده ها ؟
رو اینم کار می کنم و نتیجه رو می گم
با تشکر - مشمولی
یه خبر خوب و یه خبر بد . :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
من در اجرای این روش در یک حالت به مشکل برخورد کردم اون هم اینکه متاسفانه رو دیتابیس هایی که پسورد دارن جواب ندارد . برای حل این مشکل هم از روش دوم استفاده کردم .
در روش دوم از 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
" & path & "
ولي اگه ننويسيم هم مشكلي نيست .
البته باید باز مثل روش اول در هنگامی که دیتا ریپورت فراخوانی می شه ابتدا بیاد دیتا انویرونمنت رو آن لود کنه بعد دیتا ریپورت رو فراخوانی کنه . یا اینکه در صفحه ای که می خواهیم از اونجا دیتا ریپورت رو نشون بدیم در خاصیت Form Load اون صفحه بیاییم و Dataenvironment رو Unload کنیم .
البته روش تنظیم Data Environment هم تقریباٌ مثل روش DAO هست که اگه نتونستین انجام بدین بفرمایین تا اینجا این روش رو هم بنویسم .
خلاصه در نهایت من با این روش تو نستم مشکل محل دیتا بیس رو حل کنم و یه برنامه نمونه هم اگه وقت شد می زارم تو سایت تا دقیقاٌ کدها در اختیارتون باشه .
اما یه مشکل دیگه . این یکی خیلی خیلی سخته . با این روشها ما مقدار تمامی رکوردهایی که فیلد اون رو در دیتا ریپورت قرار دادیم نشون داده می شه . مثلاٌ وقتی فیلدNAME رو قرار می دیم تمامی اسامی نشون داده می شه . حالا چطور می شه کاری کردی که یکسری از فیلدهای خاص مثلاٌ با یک شرط مثل اینکه تمامی اسامی توش الف باشه نشون داده بشه . یعنی یه حالت گزارشگیری از داده ها ؟
رو اینم کار می کنم و نتیجه رو می گم
با تشکر - مشمولی