PDA

View Full Version : سوال: ارسال محتویات تکست باکس Multiline به کریستال ریپورت



ramzdar
یک شنبه 13 شهریور 1390, 20:15 عصر
این سوالو توی یه پست تو بخش گزارشگیری پرسیدم ولی انگار کسی اونجا نمیره. اینجا طرفداراش بیشتره.

و اما سوال:

من تو CrystalReport یه Formula Field به اسم MainText ایجاد کردم.
حالا میخوام متن تکست باکس روی فرمم که خاصیت Multilineش فعاله رو بریزم تو اون و نمایش بدم اما ارور میده:

The matching ' for this string is missing.
کدی هم که گذاشتم تو برنامه اینه:
Dim crApp As New CRAXDRT.Application
Dim crRept As New CRAXDRT.Report
Dim crDBTap As CRAXDRT.DatabaseTable

Private Sub Command1_Click()
MainTxt = "به نام خدا" & vbCrLf & "سلام" 'in matne TextBox hast.
Set crRept = crApp.OpenReport("C:\Data1.rpt")
crRept.FormulaFields.GetItemByName("MainText").Tex t = "'" & MainText & "'"
CrystalReport.ReportSource = crRept
CrystalReport.ViewReport
crRept.DiscardSavedData


چکار کنم؟ وقتی مولتی لاین نباشه درسته ولی اگه چندخطه بشه این ارور رو میده و گزارش نشون داده نمیشه.
تو رو خدا کمک کنید.

محسن واژدی
یک شنبه 13 شهریور 1390, 20:50 عصر
سلام علیکم
متاسفانه به کریستال ریپورت دسترسی ندارم

این ممکنه بخاطر vbCrLf که در متن استفاده شده باشد،
یا شاید فیلد از متن های چند خطی پشتیبانی نمیکند
میتوانید این موضوع رو با حذف vbCrLf بررسی کنید، که اگر خطا روی نداد میتواند مربوط به vbCrLf باشد

ramzdar
یک شنبه 13 شهریور 1390, 21:03 عصر
لطفاً یه روشی برای اینکه بشه این کار رو انجام داد ارائه کنید

محسن واژدی
یک شنبه 13 شهریور 1390, 21:11 عصر
کاراکتر Chr(13) را تست کنید، دستور replace را در خط دستوری FormulaField برای تغییر vbCrLf به کاراکتر 13 جایگزین کردم:

crRept.FormulaFields.GetItemByName("MainText").Tex t = "'" & Replace(MainText, vbCrLf, Chr(13)) & "'"

تست کنین، انشاء الله درسته

ramzdar
دوشنبه 14 شهریور 1390, 00:45 صبح
متأسفانه بازم همون ارور رو میده

vbhamed
دوشنبه 14 شهریور 1390, 02:27 صبح
سلام

كاش نمونه فايل گزارش رو هم ميزاشتين
اما تو خط اول شما نوشتيد MainTxt در صورتيكه موقع استفاده يه e اضافه گذاشتيد يعني MainText

ramzdar
دوشنبه 14 شهریور 1390, 10:34 صبح
اون مهم نیست.
فقط میخواستم بگم که متن تکست باکس اینه. MainText همون تکست باکسه و MainTxt هم یه متغیره که متنش همونه
فایل گزارش رو ضمیمه کردم
شما توی یه پروژه جدید یه تکست باکس مولتی لاین بذار بعد یه متن دو خطی بهش بده. همون اروری که گفتم میده. کد جناب mohsenvj هم جواب نداد

vbhamed
دوشنبه 14 شهریور 1390, 17:48 عصر
سلام

لطفا يك پروژه درست كه اين كار توش انجام شده رو بزاريد كه با يك خطش كار كنه تا بررسي بشه

ramzdar
دوشنبه 14 شهریور 1390, 21:58 عصر
اینم نمونه سورس.
اگه تو TextBox متن یک خطی بنویسیم، اروری ایجاد نمیشه ولی اگر بیشتر از یک خط بشه، ارور میده.(با Enter بریم خط بعد)

vbhamed
سه شنبه 15 شهریور 1390, 02:55 صبح
سلام

فيلد شما فرمولي هست و بايد توش فرمول بنويسيد نه اينكه مستقيما عبارت دلخواه رو وارد كنيد
اين تابع رو به شكل زير اصلاح كنيد

Private Sub Command1_Click()

Dim s() As String, t$

Text1 = Replace(Text1, Chr$(34), "")
Text1 = Replace(Text1, Chr$(34), "")
Text1 = Replace(Text1, "'", "")
Text1 = Replace(Text1, "'", "")
s = Split(Text1, vbCrLf)

For i = 0 To UBound(s)
t = t & " & Chr(13) & " & Chr$(34) & s(i) & Chr$(34)
Next

t = Trim(t)
If Left$(t, 12) = "& Chr(13) & " Then t = Mid$(t, 13)
crRept.FormulaFields.GetItemByName("MainText").Text = t

CrystalReport.ViewReport
CrystalReport.Zoom 1
crRept.DiscardSavedData

End Sub

ramzdar
سه شنبه 15 شهریور 1390, 11:54 صبح
ممنون از کدی که گذاشتین. به راحتی کار میکنه.
اما میشه یه توضیح در مورد کدی که گذاشتین بدین؟
لطفاً دقیقاً توضیح بدین چکار میکنه. (توضیح خط به خط) من هیچی ازش نفهمیدم.
و اینکه کار تابع UBound چیه؟

ramzdar
سه شنبه 15 شهریور 1390, 14:10 عصر
همینطور لطفاً بگین چجوری میشه فونتش رو در حین کار با برنامه تغییر داد؟
نوع فونت،اندازه فونت،ضخامت فونت

ramzdar
چهارشنبه 16 شهریور 1390, 13:46 عصر
کسی نیست؟
آقا فوریه.

vbhamed
چهارشنبه 16 شهریور 1390, 19:30 عصر
سلام

عبارتي كه Enter داره بايد به صورت زير وارد بشه
"Lien1" & VbCrLf & "Line2"

برنامه مياد خطوط TextBox رو با استفاده از تابع Split از هم جدا مي كنه، بعد ابتدا و انتهاي هر خط " ميزاره و بين خطوط هم عبارت & vbCrLf & يعني در اصل فرمول رو مي‌سازه
تابع UBound هم بعد بالاي يك آرايه رو برمي‌گردونه كه در مثال ما ميشه تعداد خطوط

ramzdar
چهارشنبه 16 شهریور 1390, 21:34 عصر
همینطور لطفاً بگین چجوری میشه فونتش رو در حین کار با برنامه تغییر داد؟
نوع فونت،اندازه فونت،ضخامت فونت
این سوال رو نمیخواین جواب بدین؟

vbhamed
پنج شنبه 17 شهریور 1390, 13:09 عصر
سلام

اين تيكه رو به برنامه اضافه كنيد
"D" منظور قسمت Details هست و Item(1) همون آيتم مورد نظر شماست كه اگر چيزي ديگه اضافه كردين بايد شمارش رو پيدا كنيد

crRept.FormulaFields.GetItemByName("MainText").Text = t

'اين جا يك Break Point بزاريد
With crRept.Sections("D").ReportObjects.Item(1)
.Font.Name = "Tahoma"
.Font.Charset = 178
.Font.Size = 30
.Font.Bold = True
.TextColor = vbRed
.BackColor = vbYellow
.BorderColor = vbBlue
.Height = 400
.HorAlignment = crHorCenterAlign
.Width = 10000
.CanGrow = True
End With

CrystalReport.ViewReport


تو كد بالا اونجايي كه توضيح داده شده يك نقطه توقف بزاريد و بعد كل عبارت جلوي With (بدون خود With) رو انتخاب كنيد و از منوي Debug گزينه AddWatch رو بزنيد و Ok تا بتونيد بقيه خاصيتهايي كه ميشه تغيير داد هم ببينيد
ضمنا وقتي عبارت بالا به ديباگ اضافه ميشه يك + كنارش هست كه اون رو كليك كنيد تا ليستش باز بشه

75037

ramzdar
پنج شنبه 17 شهریور 1390, 15:12 عصر
ممنون
یه نکته بزرگ بهم یاد دادی
نتونستم به یه تشکر بسنده کنم.
فقط میشه بگین Charset یعنی چی و کارش چیه؟
احتمال دادم یعنی فقط اون تعداد کاراکتر بگیره. درسته؟

kimprog
پنج شنبه 17 شهریور 1390, 15:47 عصر
با اجازه از جناب:vbhamed (http://barnamenevis.org/member.php?10624-vbhamed)
charset نوع Script فونت را تعيين ميكند كه 178 براي زبان فارسي و عربي است.