PDA

View Full Version : گزارش از رکوردهای دلخواه یک dbgrid



parisa2002
سه شنبه 23 اسفند 1384, 07:23 صبح
با سلام
من یک query دارم که جواب آن را در یک dbgrid نمایش می دهم حال می خواهم رکوردهای خاصی را که کاربر انتخاب می کند پرینت نماید در ضمن من از quickreport استفاده می کنم اگر ممکن است مرا راهنمایی کنید که چگونه این کار را انجام دهم
با تشکر

soroush_vs
سه شنبه 23 اسفند 1384, 23:01 عصر
خوب میتونی Query رو فیلتر کنی یا از WHERE در SQL استفاده کنی

parisa2002
چهارشنبه 24 اسفند 1384, 09:06 صبح
جواب query در dbgrid نشان داده شده حالا کاربر با استفاده از ctrl می تواند رکوردهای دلخواه را انتخاب کند (گزینه multiselect را فعال کرده ام) سپس باید آن رکوردهای انتخاب شده توسط کاربر ( نه جواب کامل query) چاپ شود . چیزی که شما گفتید اصلا ربطی به کار من نداشت
با تشکر

دنیای دلفی
چهارشنبه 24 اسفند 1384, 09:45 صبح
استفاده از کامپوننت Ehlib Grid که یکی از قابلیتهای آن چاپ محتوای DBgrid است خواستی PM بده

parisa2002
پنج شنبه 25 اسفند 1384, 07:51 صبح
ممنون از جوابت
ولی من نمی خواهم محتوای dbgrid را چاپ کنم بلکه می خواهم رکوردهایی که کاربر انتخاب کرده را چاپ کنم

mzjahromi
پنج شنبه 25 اسفند 1384, 08:10 صبح
کاری که من کردم این بود(البته با ClientDataSet)
یک فیلد با نام Selected اضافه کردم.
با هر بار کلیک روی یک رکورد این فیلد True میشد.
هنگام چاپ این شرط رو تو فیلتر میذاشتم Selected=True

parisa2002
پنج شنبه 25 اسفند 1384, 10:12 صبح
ممنون از جوابت
ولی من از یک query استفاده می کنم و جواب آن در dbgrid نمایش داده می شود بنابراین نمی توانم یک فیلد به داده هایم اضافه کنم

mzjahromi
پنج شنبه 25 اسفند 1384, 10:15 صبح
Query رو به ClientDataSet وصل کن و یک فیلد ثابت به Query اضافه کن. توی ClinentDataSet میتونی عوضش کنی.



Select Field1,Field2,Field3,...,' ' As FieldN

Mahmood_M
جمعه 26 اسفند 1384, 00:39 صبح
یه راه دیگه هم هست :
می تونید یک فرم جداگانه با یک بانک اطلاعاتی ( مثلا ClientDataSet ) درست کنید، بعد در فرمی که جدول اصلی قرار داره یک دکمه بزاری که فرم دوم رو نشون بده و بعد در زمان نشون دادن اون فرم ClientDataSet رو به حالت ویرایش ببرید بعد مشخصات درون فیلدهای جدول فرم اصلی رو توی بانک ClientDataSet ثبت کنید ...
و بعد از بانک همون فرم دوم گزارش بگیریید ...
البته با این کار فقط یکی از رکوردها رو می تونید گزارش بگیرید.
برای گزارش گیری از چند تا رکورد باید در زمان نشون دادن فرم ( یا هر موقعی که می خواید اطلاعات ثبت بشن ) ClientDataSet رو به حالت Insert ببرید و بعد به تعداد رکوردها توش ثبت کنید که فکر کنم کار سختی باشه ...
امیدوارم به دردتون خورده باشه ...

parisa2002
شنبه 27 اسفند 1384, 07:24 صبح
ممنون از جوابهایتان
ولی باید راه بهتر و ساده تری هم وجود داشته باشه
راه حلهای شما(با عرض معذرت) خیلی اصولی و عملی نیست
با نشکر

MNosouhi
شنبه 27 اسفند 1384, 08:24 صبح
راه حلهای شما(با عرض معذرت) خیلی اصولی و عملی نیست
راه حل آقای جهرمی بهترین و اصولی ترین راه هستش. فکر نمی کنم ساده تر از اون پیدا کنید.

ali_md110
چهارشنبه 02 فروردین 1385, 22:40 عصر
با سلام من گزارش گیری دینامیک در وی بی 6 را دارم اگر خواستی ندا بده البته با ADO

reza4257
پنج شنبه 21 شهریور 1387, 09:25 صبح
این راه حل رو امتحان کن
var
i, j: Integer;
s: string;
begin
if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.DataSource.DataSet do
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
for j := 0 to FieldCount-1 do
begin

if (j>0) then s:=s+', ';
s:=s+Fields[j].AsString;
end;
Listbox1.Items.Add(s);
s:= '';
end;

در این مثال رکوردهای انتخابی در یک لیست اضافه میشوند,شما میتونی هر تصمیمی داری به جای اون بگیری

Atlas_softWare
پنج شنبه 28 شهریور 1387, 12:49 عصر
می تونی از DBAdvGrid مربوط به Tms ها استفاده کنی که یک ستون از نوع Check Box میشه بهش اضافه کرد، demo زیر را نگاه کن

ariobarzan
شنبه 30 شهریور 1387, 09:10 صبح
با تشكر
شما از چه نسخه Tms استفاده ميكنيد ؟
من از نسخه
TMS.Component.Pack.Pro.v3.3
استفاده مي كنم ظاهرا چيزي كه شما استفاده كرديد را كم داره .

ali_abbasi22145
شنبه 30 شهریور 1387, 10:18 صبح
کاری که من کردم این بود(البته با ClientDataSet)
یک فیلد با نام Selected اضافه کردم.
با هر بار کلیک روی یک رکورد این فیلد True میشد.
هنگام چاپ این شرط رو تو فیلتر میذاشتم Selected=True

سلام
ببخشيد شايد اين سوال ساده باشد:اگر كاربر هر وقت كه روي سطر كليك ماوس كرد كدش چه مي شود؟
كاربر Sapacebar روي سطر بزند اين كد را نوشتم:

if(key = VK_SPACE)then
if (MainForm.ADOTable1.FieldByName('tag').AsString= '1')then
begin
MainForm.ADOTable1.Edit;
MainForm.ADOTable1.FieldByName('selected').AsStrin g:= '';
MainForm.ADOTable1.Post;
end
else
begin
MainForm.ADOTable1.Edit;
MainForm.ADOTable1.FieldByName('selected').AsStrin g:= '1';
MainForm.ADOTable1.Post;
end;

Atlas_softWare
شنبه 30 شهریور 1387, 17:00 عصر
از این نسخه استفاده می کنم:(TMS VCL Component Pack 4.0 (for Delphi and C++ Builder

amin_sos
شنبه 30 شهریور 1387, 18:37 عصر
اول تمام فیلد های مورد نظرت رو تو یه table جدید ذخیره کن به صورت temorary و موقتی بعد مثل فیلد های جدول با هاش رفتار کن گزارش بگیر و . . .

mehazizi@yahoo.com
چهارشنبه 13 آذر 1387, 10:36 صبح
بهترين راه براي پرينت يك محدوده خاض اينه



procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Table1 .Filtered :=True ;
frxReport1 .ShowReport ;
end;


:متفکر: با كمك fast report فرم را آماده كنيد واز دستور بالا استفاده كنيد مشكلتون حل ميشه ...