PDA

View Full Version : چند سوال در مورد دیتا ریپورت



unforgiven
شنبه 02 مهر 1384, 07:20 صبح
سلام به دوستان
من چطور میتونم مسیر دیتا بیس رو به صورت دستی و کد نویسی به دیتا ریپورت بدم ؟
چطور میتونم تابع فارسی کردن تاریخ رو از داخل دیتا ریپورت صدا کنم ؟ منظورم اینه که کجا باید این کد را وارد کنم ؟
چطور میشه بر روی رکوردی که حرکت میکنی فقط رکورد کورد نظر رو چاپ کرد نه کل رکوردهای موجود در بانک رو ؟
پیشاپیش ممنونم
لطفا سورس بزارید

mRizvandi
شنبه 02 مهر 1384, 18:49 عصر
سلام

شما می تونید از خواص دیتا ریپورت با نامهای ControlSource و DataSource (اگر اشتباه نگرده باشم) استفاده کنی و رکورد ستی رو که باز کردی به اون بدی. اگر هم از DataEnvironment استفاده کردی می تونی اون رو مقدار دهی بکنی در ابتدای برنامه ات.
برای چاپ رکورد مورد نظرت هم می تونی یک رکورد ست دیگه ایجاد کنی رکوردت رو بریزی داخلش و اون رو بدی به دیتا ریپورت:چشمک:

unforgiven
یک شنبه 03 مهر 1384, 08:17 صبح
سلام دوست عزیز
این کارهایی که گفید رو من قبلا انجام دادم
منظورم این بود که چطوری و کجا به دیتا اینوایرومنت مسیر بدم
به صورت app.path
و ضمنا تابع های تاریخ فارسی رو از کجا صدا کنم به دیتا این وایرومنت و دیتا ریپورت؟
ممنونم

mRizvandi
یک شنبه 03 مهر 1384, 08:35 صبح
سلام

اگر با ADO کار کرده باشید اینطوریه که شی DataEnvironment فقط برای شما داره ایجاد ارتباط می کنه و من پیشنهاد می دم که اصلا ازش استفاده نکنید ولی اگر هم استفاده کردید می تونید در یکی از روالهای ابتدایی برنامه اون رو مقداردهی کنید. کافیه که کانکشن موجود در DataEnvironment رو باز کنید مطابق با مسیر فایل خودتون.

datEnv.Cnn.Open ...
در این مثال:
datEnv نام شی DataEnvironment
Cnn هم نام شی کانکشن در اون DataEnvrionment و متد Open برای باز کردن کانکشن
متد Open همون متد Open شی کانکشن در ADO هست:چشمک:

ehsan_ansaripoor
یک شنبه 03 مهر 1384, 17:27 عصر
دوست عزیز برای آدرسی دهی DataEnvironment به صورت App.Path فقط کافیه در زمان درست کردن Contion و آدرسی دهی آن اسم شاخه مورد نظر را به این صورت بنویسی:
مثلا اگر بانکت داخل C:\Data\File.mdb به این صورت آدرس دهی کنی Data\File.mdb
برای گذاشتن تاریخ فارسی برای گزارشت می تونی اون تابع فارسی را از داخل یک فرم دیگه یا Class یا Model لود کنی به این صورت:
ابتدا یک Label روی Header دیتا ریپورت مثلا Section4 قرار می دی و بعد آدرس دهی می کنی:
dataReport.section("section4").control("label1").caption=form1.label1

unforgiven
چهارشنبه 06 مهر 1384, 08:59 صبح
سلام آقا احسان
با راهنمایی شما و کمی تغییر در کد شما تونستم مشکل فرا خوانی تابع رو حل کنم
متشکرم
ولی در مورد مسیر دادن به دیتا اینوایرومنت هنوز مشکل دارم
لطفا کد ارتباط با اینوایرومنت رو به برای Ado بزارید
بازم ممنونم

unforgiven
چهارشنبه 06 مهر 1384, 09:26 صبح
سلام به mrizvandi
من چطور میتونم یه رکورد ست ایجاد کنم و اطلاعات رو بریزم توش و بعد بدم به دیتا ریپورت
برای چاپ رکورد مورد نظرم
ممنونم
اگه میشه یه مثال بزنید

ehsan_ansaripoor
چهارشنبه 06 مهر 1384, 17:40 عصر
دوست عزیزم من برای گزارش گیری از Ado استفاده نمی کنم و اطلاعاتم در مورد Ado محدوده شرمنده ام
و در مورد اینکه کدهام احتیاج به اصلاح داره اینه که من مستقیم کدها را می نویسم و تست نمی کنم بازم شرمنده
ولی برای اینکه از رکوردهای مورد نظرت گزارش بگیری بهترین راه اینه که یک فایل یا یک Table برای خودت بسازی و اطلاعاتت را داخل اون بریزی و ازش گزارش تهیه کنی به این صورت:
insert into table(filed1,filed2) select filed1,filed2 from Table_Main where filed1='xx'a
مزیت این کار اینه که اگر حجم اطلاعاتت زیاد بود در صورت ساختن رکوردست ممکنه سیستم حافظه کم بیاره ولی با این روش نه

unforgiven
پنج شنبه 07 مهر 1384, 09:21 صبح
سلام آقا احسان
از راهنمایی خوبتان ممنونم
یه سوال دیگه داشتم
آیا من با دیتا ریپورت میتونم محتویات فرم رو چاپ کنم البته هیچ شی به دیتا بیس ارتباط نداره ؟
فقط یه سری تکست باکس و کمبو وجود داره
اگه میشه واسه این هم راهنمایی کن و مثال بزن
یه سوال دیگه
وقتی رکوردی یه بانک اضافه میشه باید یه بار از برنامه خارج بشم تا اون رکورد در گزارش گیری دیتا ریپورت و پرینت مشاهده بشه
برای این مشکل چطور میتونی کمکم کنی
بازم ممنونم

dr_g
پنج شنبه 07 مهر 1384, 12:00 عصر
با سلام
دوست عزیز در مورد سوال اول از همون روشی که دوستمون گفتن می توونی استفاده کنی یعنی
dataReport.section("section4").control("label1").caption=form1.text1.text
dataReport.section("section4").control("label2").caption=form1.text2.text
و.........
در مورد سوال دوم بعد از هر بار اضفه کردن رکورد باید دیتا بیس رو دوباره به DataReport ربط بدی مثلا اگه از دستور
set datereport.datasource=ado استفاده می کنی باید مثل همین دستور رو بعد از اضافه کردن رکورد استفاده کنی و باید DataReport رو refresh کنی(البته اگه این خاصیت رو داشته باشه)

ehsan_ansaripoor
پنج شنبه 07 مهر 1384, 21:52 عصر
دوست عزیز در مورد سوال اول نمی دونم بشه یا نه ولی در مورد سوال دوم این کد را داخل رویداد DataReport_QueryClose بنویس:
Unload DataEnvironment
DataReport.Refresh

mRizvandi
یک شنبه 10 مهر 1384, 12:02 عصر
سلام

برای DataEnvironment این رو استفاده کن:


Private Sub MDIForm_Load()
dteMAinReport.Connection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & App.Path & IIf(Len(App.Path) = 3, "Request.mdb", "\Request.mdb")
End Sub


برای تغییر و دادن یک رکوردست ایجاد شده این رو استفاده کن:


...
On Error Resume Next
dteMAinReport.rsCommand1.Close
dteMAinReport.rsCommand1.Open "SELECT * FROM tblRequest WHERE SerialNo=" & txtNo.Text, dteMAinReport.Connection1, adOpenKeyset, adLockOptimistic, adCmdText
rptRequest.PrintReport


اول رکورد ست رو ایجاد کن مثلا با یک SQL یا هر روش دیگه ای بعد دستورات رو بکار ببر
:چشمک:

unforgiven
پنج شنبه 14 مهر 1384, 09:21 صبح
سلام دوستان
لطفا بگید من چطوری با استفاده از دیتا ریپورت میتونم از تکست باکسها و کمبوهای موجود روی فورم بدون اینکه این اشیا با دیتا بیس اتصال داشته باشند .
ظمنا من نمیخوام از دستور
Printer.print
استفاده کنم
لطفا یه مثال بزارید
با سپاس

unforgiven
شنبه 16 مهر 1384, 09:04 صبح
سلام دوستان
لطفا بگید من چطوری با استفاده از دیتا ریپورت میتونم از تکست باکسها و کمبوهای موجود روی فورم بدون اینکه این اشیا با دیتا بیس اتصال داشته باشند .
ظمنا من نمیخوام از دستور
Printer.print
استفاده کنم
لطفا یه مثال بزارید
با سپاس
لطفا کمک کنید من خیلی بهش نیاز دارم

unforgiven
یک شنبه 17 مهر 1384, 09:00 صبح
سلام
یعنی راهی وجود نداره
حداقل بگید اصلا میشه این کارو با دیتا ریپورت کرد یا نه؟
من حتما باید از دستور زیر استفاده کنم
printer.print "نام"
از form1.print هم نمیخوام استفاده کنم چون کل صفحه رو پرینت میگیره
متشکرم

mRizvandi
یک شنبه 17 مهر 1384, 18:03 عصر
سلام

بله میشه این کار رو انجام داد ولی یه ذره پیچیدگی داره:
اول: شما باید یک رکوردست بسازی
دوم: این رکوردست رو بصورت Disconnected تنظیم می کنی
سوم: فیلدهای مورد نظرت رو به اون Add می کنی
چهارم: داده های رکورد رو در اون می ریزی
پنجم: رکوردست رو می دی به دیتاریپورت والی آخر
موفق باشی ;-) (-;

unforgiven
دوشنبه 18 مهر 1384, 05:40 صبح
سلام
آقای mrizvandi
من عرض کردم رکوردی بر روی فرم ندارم و اصلا چیزی به بانک متصل نیست فقط تعدادی تکست باکس و کمبو باکس وجود داره
به هر حال ممنون

mRizvandi
دوشنبه 18 مهر 1384, 12:01 عصر
سلام

من هم نگفتم که به بانکی متصل شو بلکه عرض کردم یک رکوردست Disconnected ایجاد کن و ادامه ماجرا ...
;-)

unforgiven
سه شنبه 19 مهر 1384, 08:52 صبح
سلام
لطفا اگر ممکنه مراحل رو توضیح بدید یا مثال بزارید
ممنون میشم
من خیلی بهش نیاز دارم
ژیشاژیش ممنونم

mRizvandi
چهارشنبه 20 مهر 1384, 08:50 صبح
سلام

برای ساخت رکورد DisConnected از این کد استفاده کن


Dim a As ADODB.Recordset

Set a = New ADODB.Recordset
a.LockType = adLockOptimistic
a.CursorLocation = adUseServer
a.Fields.Append "Name", adInteger
a.Fields.Append "Family", adBSTR
a.Open
a.AddNew
a!Name = 123
a!Family = "Ali"
MsgBox a!Name


مابقی ماجرا هم که در پستهای قبلی توضیح دادم:چشمک: