# Native Code > برنامه نویسی در 6 VB > ابزارهای گزارشگیری در VB6 > مبتدی: گزارشگیری بر اساس یک فیلد در fast report

## sldvhlds

سلام دوستان عزیز

یه راهنمائی درموردFastReport توی vb6 میخوام 
من توی محیط خود برنامه یه  گزارش طراحی کردم وقتی هم که پیش نمایش میگیرم مشکلی نداره

یه دیتا بیس دارم شامل چند تا رکورد که هررکورد از چند تا فیلد مثلا کد ملی اسم فامیل و... تشکیل میشه می خوام  گزارش طوری باشه که کاربر روی یه دکمه کلیک کنه بعد برنامه مقداریه فیلد  مثلا کد ملی رو بگیره و اطلاعات رکورد مربوط به اون فیلد رو نشون بده یه کوئری توی خود گزارش نوشتم به این صورت   SELECT * FROM Table1 Where Codmeli=999999999  ولی این کوئیری فقط رکورد مربوط به کدملی 9999999 رو برمیگردونه من میخوام کوئری طوری باشه که یک input box قبل از اجرای گزارش باز بشه وکد ملی رو بگیره و رکورد مربوطه رو نشون بده اگه براتون ممکنه یه توضیح کامل همراه با کد(من برنامه نویس یه مرحله قبل از مبتدی هستم :خجالت: )  در این مورد برام بفرستید من از خود مثالهای برنامه چیزی سردر نیاوردم

----------


## vbhamed

سلام

تو این دو تاپیک نمونه هست برای این کار

https://barnamenevis.org/showthread.p...=1#post2197896

https://barnamenevis.org/showthread.p...=1#post1959527

----------


## isaac23

خودت جواب خودتو دادی 

اگه این Input box باشه:
Dim a As String
a = InputBox("ÔãÇÑå ãáí", "ÔãÇÑå ãáí ÑÇ æÇÑÏ ˜äíÏ")
Label1.Caption = a



نتیجه اون اینپوت رو برابر با Select قرار بده .

پیس میشه این :
 q.Query = "Select * from table1 where family = a "



تست نکردم اما باید همین باشه

----------


## sldvhlds

سلام دوست عزیز توی کوئری که با خود fast report ساختیم چی اونم همین کد باید باشه یا کلا باید خالی باشه 
من کدی رو که شما گفتین توی خود برنامه توی قسمت Form_Load نوشتم ولی هروقت که گزارش میگیرم به ازای هر مقدار کد ملی فقط یه نتیجه ثابت رو برمیگردونه حتی اگه اون کد ملی توی بانک نباشه ممنون میشم راهنمائی بفرمائید

----------


## isaac23

توی خود فست ریپورت هم کد کوئری رو کامل پاک کن نیازی بهش نیست

----------


## isaac23

در اصل شما باید داخل فست ریپورت هم قسمت کانکشن و هم قسمت کوئوری رو باید کامل پاک کنید تا زمانی که برنامه شما روی سیستم کاربر نصب میشه به آدرس گیر نده .

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

موفق باشید.

----------


## sldvhlds

> توی خود فست ریپورت هم کد کوئری رو کامل پاک کن نیازی بهش نیست


سلام کد کوئری رو که پاک کنی این خطا رو میده

Untitled.png

----------


## isaac23

اگه ممکنه از دستوراتی که نوشتی یا در صورت ممکن خود پروژه رو قرار بدید.

----------


## sldvhlds

> اگه ممکنه از دستوراتی که نوشتی یا در صورت ممکن خود پروژه رو قرار بدید.


سلام یه نمونه از پروژه رو براتون گذاشتم البته همون نیست ولی مشابه پروژه خودمه فقط دیتابیس و گزارش فرق میکنه :بامزه:

----------


## vbhamed

سلام
نمونه مثالی که گذاشتم رو ندیدید ؟

Dim frp As New FastReport.TfrxReport

Private Sub Form_Load()

    frp.EngineOptions.SilentMode = simMessageBoxes
    frp.LoadReportFromFile App.Path & "\Test.fr3"
    
    Dim Ado As New TfrxADODatabase
    Dim q As New TfrxADOQuery

    Set Ado = frp.FindDatabase("Ado")
    Set q = frp.FindDatabase("qry")

    '------------------------------------------------------------------
    q.Query = "Select * from table1 where family = 'Rezaey'"
    '------------------------------------------------------------------
    
    Ado.Connected = False
    Ado.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Password='';  User ID=Admin;Data Source=Test.mdb;Mode=Share Deny None;Extended Properties='';Jet OLEDB:System database='';Jet OLEDB:Registry Path='';Jet OLEDB:Database Password='';Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password='';Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"
    Ado.LoginPrompt = False
    Ado.Connected = True
    frp.PreviewOptions.RTLPreview = True
    frp.PrepareReport True

    frv.Report = frp
    frv.Unlock

    '------------------------------------------------------------------
    'frp.SaveReportToFile App.Path & "\Test.fr3"
    '------------------------------------------------------------------

End Sub

Private Sub Form_Unload(Cancel As Integer)

    Set frp = Nothing

End Sub

----------


## sldvhlds

سلام حامد جان
q.Query = "Select * from table1 where family = 'Rezaey'"
مشکل دقیقا همینجاست من نمیخوام از قبل به کوئری مقدار داده بشه می خوام کاربر قبل از اجرای گزارش مقدار مورد نظرشو توی یه input box  وارد کنه وبرنامه 
دنبال اون بگرده ونشون بده پست شماره 3 رو هم که دوستمون گفتم انجام دادم کوئری داخل گزارش رو هم پاک کردم ولی جواب نمیده یا ارورپست 7 رو میده یا همیشه وبه ازای هر مقداری یه گزارش ثابت رو برمیگردونه امیدوارم تونسته باشم منظورمو برسونم

----------


## isaac23

سلام فایل رو تغییر دادم و برات فرستادم

یکی توی مسیر دهی دیتا بیس بود و دیگری هم همون کوئوری نگاه بندازی ممتوجه میشی دلیلش چی بوده .

----------


## vbhamed

> سلام حامد جان
> q.Query = "Select * from table1 where family = 'Rezaey'"
> مشکل دقیقا همینجاست من نمیخوام از قبل به کوئری مقدار داده بشه می خوام کاربر قبل از اجرای گزارش مقدار مورد نظرشو توی یه input box  وارد کنه وبرنامه 
> دنبال اون بگرده ونشون بده پست شماره 3 رو هم که دوستمون گفتم انجام دادم کوئری داخل گزارش رو هم پاک کردم ولی جواب نمیده یا ارورپست 7 رو میده یا همیشه وبه ازای هر مقداری یه گزارش ثابت رو برمیگردونه امیدوارم تونسته باشم منظورمو برسونم


سلام
خب این که مثاله دیگه، شما خودتون به جای Rezaey از یک متغیر مثل x استفاده کنید
q.Query = "Select * from table1 where family = '" & x & "'"

----------


## isaac23

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

----------


## vbhamed

سلام
اول تو خود FastReport از منوی Report گزینه Option برای گزارشت پسورد میزاری بعدش تو برنامت موقع فراخوانی به شکل زیر عمل می‌کنی

        Dim frx As FastReport.TfrxReport
        .
        .
        .
        frx.ReportOptions.HiddenPassword = "123"
        frx.LoadReportFromFile "c:\test.fr3"

----------

