PDA

نسخه کامل مشاهده نسخه کامل : نوشتن گزارش وقتی تعداد ستون ها متغیره



amir zm
30-04-2006, 20:11
سلام

زبان برنامه :VB6
پروایدر : ADO با Microsoft Jet 4
دیتابیس : Access 2000

'گزارش هایی با دستورTRANSFORM PIVOT نوشتم که تعداد ستون ها در اون متغیره.
نمی دونم چه جوری می تونم فرم این گزارش ها رو با Crystal Report ایجاد کنم. (اگه روش دیگری غیر از Crystal Report سراغ دارید استفبال می کنم.)

Crystal Report 10 Advanced Developer و Crystal Report 8.5 Developer رو دارم
متشکرم

این هم نمونه ریپورتم هست:



strsqlsef = "SELECT custumer,code,sum(quantity) as sef,'sef' FROM sefareshat,shsefareshat" & _
" WHERE sefareshat.sn=shsefareshat.sn" & _
strdate & strmamoor & " group by code,custumer"

strsqlexit = "SELECT sharh.to as custumer,code,-sum(quantity) as kh,'kh' FROM data,sharh" & _
" WHERE data.ID=sharh.ID AND k=4 " _
& strdate & strmamoor & " group by code,sharh.to"

strsqlbar = "SELECT sharh.from as custumer,code,sum(quantity) as bar,'bar' FROM data,sharh" & _
" WHERE data.ID=sharh.ID AND k=0 " _
& strdate & strmamoor & " group by code,sharh.from"

strsql = strsqlsef & " UNION " & strsqlexit & " UNION " & strsqlbar
strsql = "Select custumer,code,sum(sef) as re from (" & strsql & ") Group BY code,custumer Having sum(sef)<>0"
strsql = "SELECT custumer,nam,code,re from (" & strsql & "),kala WHERE code=kalacode"

strsql = "TRANSFORM SUM(re) SELECT custumer from (" & strsql & ") Group BY custumer PIVOT nam"

hoseinquest
30-04-2006, 22:34
سلام . اولا از این استفاده کن
SELECT * FROM TABLES
بعد هم میتونی از دستور while و همچنین for each برای چاپ مقدیر تمام ستون ها استفاده کنی

amir zm
02-05-2006, 17:50
سلام
ممنون میشم بیشتر توضیح بدین که منظورتون از For Each برای چاپ چیه.
یعنی از دستوری مشابه ایه:
Dim ctlfield As ADODB.Field
For Each ctlfield In AdoResult

Next
و با دستور Printer.print کار کنم؟
احتمالا این کار باعث میشه که هر ستون رو به پرینتر بفرسته و در این صورت شما نی تونید در هر صفحه سر برگ و تایتل ستون ها رو چاپ کنید.
در ضمن با من می خواهم به کابرانم امکان تغییر تنظیمات چاپ از قبیل تغییر عرض ستون ها رو بدم.

در ضمن در مورد SELECT * FROM TABLES هم منظورتون چی بود؟ (البته بحث من در مورد دستور Select نیست.)

اگه منظورتون TABLES هست: (یعنی چند جدول از یک دیتابیس)
اگر دقت کرده باشید در این دیتابیس اعداد 2 فیلد از 2 جدول ShSefareshat و Sharh وجود داره و بر اساس Custumer های یکسان جمع زده شوند تا میزان باقیمانده از سفارش اون مشتری مشخص بشه.
اگر این 2 فیلد از این 2 جدول با دستور Select انتخاب بشوند در کنار هم قرار می گیرند که طبیعتا جمع زدن اون ها بر اساس فیلد Custumer با امکان Group کردن وجود نداره.
لذا در 2 دستور انتخاب شده اند و با دستور Union در یک جدول قرار گرفته اند تا بتوان بر اساس فیلد Custumer جمع زده شوند.

در ضمن باید بعضی از رکورد که در ستون Quantity در جدول Sharh وجود دارن به خاطر نوعشان (K) باید از جمع کم شوند (خروجی ها و ...) لذا باز هم در 2 دستور انتخاب شده اند و با دستور Union در یک جدول قرار گرفته اند.

اگه منظورتون * است:
این جداول اطلاعات خیلی بیشتری دارند که در این Query احتیاجی به اون ها نیست. لذا فقط این فیلد ها انتخاب شده اند و برای فیلتر شدن این فیلد ها بر اساس سایر فیلد های آن جداول با STRDATE , STRMamoor انجام شده است.

متشکرم.