ورود

View Full Version : گزارشگيري از يك تاريخ مشخص تا تاريخ مشخص ديگر



lovelygirl
دوشنبه 18 آبان 1388, 14:22 عصر
چطوري ميتونم از يه تاريخ تا يه تاريخ ديگه گزارش بگيرم دوتا مثلا edit دارم توشون ميخوام تاريخ بنويسم تا اطلاعات مربوط به اون تاريخ رو از اكسسم بياره و تو گزارشم نشون بده گزارشمو با كوئيك ريپورت نوشتم برنامه ام هم با adoquery نوشتم مرسي

sajadvahedi
سه شنبه 19 آبان 1388, 08:59 صبح
دوست عزیز اگه منظورت جستوجو بین دو تاریخ در بانکت بود این جوابشه . اما این سوالتو باید در قسمت مربوط به خودش میزاشتی.
امیدوارم بهت کمک کنه .



ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from new WHERE ((date >='''+edit1.text+''') AND (date <=''' + Edit2.Text + '''))');
ADOQuery1.Open;

دلفــي
سه شنبه 19 آبان 1388, 09:16 صبح
چطوري ميتونم از يه تاريخ تا يه تاريخ ديگه گزارش بگيرم دوتا مثلا edit دارم توشون ميخوام تاريخ بنويسم تا اطلاعات مربوط به اون تاريخ رو از اكسسم بياره و تو گزارشم نشون بده گزارشمو با كوئيك ريپورت نوشتم برنامه ام هم با adoquery نوشتم مرسي




ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM TABLE WHERE'+
' DATEFIELD >= :TYPE1 AND DATEFIELD <= :TYPE2');
ADOQuery1.Parameters.ParamByName('TYPE1').Value := Trim(Edit1.Text);
ADOQuery1.Parameters.ParamByName('TYPE2').Value := Trim(Edit2.Text);
ADOQuery1.ExecSQL;
ADOQuery1.Active := True;

lovelygirl
پنج شنبه 28 آبان 1388, 09:31 صبح
دوست عزیز اگه منظورت جستوجو بین دو تاریخ در بانکت بود این جوابشه . اما این سوالتو باید در قسمت مربوط به خودش میزاشتی.
امیدوارم بهت کمک کنه .



ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from new WHERE ((date >='''+edit1.text+''') AND (date <=''' + Edit2.Text + '''))');
ADOQuery1.Open;

من ميخوام از بانكم گزارش بگيرم كه دكمه گزارش رو كه ميزنم كلي گزارش ميگيره اما حالا ميخوام دو تا edit بزارم كه توش تاريخ بدم كه تو رنج اون تاراخ ها برام گزارش بياره
ايني كه شما دادي رو زدم اما خطا ميده ميگه همچنين تاريخي نيست اما خوب من دارم تو جدولم همچنين تاريخي
بعدشم سوالم جاش درسته ديگه تو قسمت گزارشات سوالمو پرسيدم ديگه:افسرده:

lovelygirl
پنج شنبه 28 آبان 1388, 09:37 صبح
ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM TABLE WHERE'+
' DATEFIELD >= :TYPE1 AND DATEFIELD <= :TYPE2');
ADOQuery1.Parameters.ParamByName('TYPE1').Value := Trim(Edit1.Text);
ADOQuery1.Parameters.ParamByName('TYPE2').Value := Trim(Edit2.Text);
ADOQuery1.ExecSQL;
ADOQuery1.Active := True;

اين كد رو هم زدم اما خطا ميده من ميخوام از اون دوتا تاريخ از اطلاعاتش گزارش بگيرم شما هيچي درباره گزارش نگفتين كه

دلفــي
پنج شنبه 28 آبان 1388, 11:13 صبح
اين كد رو هم زدم اما خطا ميده من ميخوام از اون دوتا تاريخ از اطلاعاتش گزارش بگيرم شما هيچي درباره گزارش نگفتين كه

یه DataSource در فرمی که AdoQuery1 اونجا قرار داره بزارید و مقدار DataSet اون رو برابر با AdoQuery1 قرار بدید ، پس از اون صفحه QuickReport و سایر موارد لازم رو به DataSource وصل کرده و کدی که قبلا نوشتم رو اجرا کنید در این صورت گزارش شما نمایش داده میشود !

lovelygirl
شنبه 30 آبان 1388, 10:35 صبح
یه DataSource در فرمی که AdoQuery1 اونجا قرار داره بزارید و مقدار DataSet اون رو برابر با AdoQuery1 قرار بدید ، پس از اون صفحه QuickReport و سایر موارد لازم رو به DataSource وصل کرده و کدی که قبلا نوشتم رو اجرا کنید در این صورت گزارش شما نمایش داده میشود !
خوب من كه اينا رو دارم كه اگه اينا رو نميزاشتم تو گزارشم هيچي نميومد كه:ناراحت:
همه چيزم درسته گزارشم درست مياد اما فقط اين كد رو مشكل دارم

دلفــي
شنبه 30 آبان 1388, 15:52 عصر
خوب من كه اينا رو دارم كه اگه اينا رو نميزاشتم تو گزارشم هيچي نميومد كه:ناراحت:
همه چيزم درسته گزارشم درست مياد اما فقط اين كد رو مشكل دارم

Unit مورد نظر رو آپلود کنید !

lovelygirl
یک شنبه 01 آذر 1388, 09:32 صبح
Unit مورد نظر رو آپلود کنید !
من يونيتم را آپلود ميكنم ببينيد درست گذاشتم يا نه
البته من دستوراتشو يه كم تغيير دادم
دستورات بايد روي button2 نوشته بشه فقط اينو در نظر بگيريد

دلفــي
یک شنبه 01 آذر 1388, 12:18 عصر
من يونيتم را آپلود ميكنم ببينيد درست گذاشتم يا نه
البته من دستوراتشو يه كم تغيير دادم
دستورات بايد روي button2 نوشته بشه فقط اينو در نظر بگيريد

لطفا به موادی که من یا سایر دوستان توضیح دادن خوب توجه کنید !

شما کد زیر رو در دستور جستجو قرار دادید که اصلا به راهنمایی هایی که ما انجام دادیم ربطی نداره !!!!!!!!!!!!



ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from tel where date = ' +QuotedStr(edit1.Text )and (edit5.Text));
ADOQuery1.Active := true;


این بار با دقت بیشتری عمل کنید ، کد زیر رو جایگزین کنید !



ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from tel where date >= ' +
QuotedStr(edit1.Text )+' and date <= ' +(edit5.Text));
ADOQuery1.Active := true;


البته من یادم نیست شما تاریخ رو به چه صورتی ذخیره می کردید :
اگر به صورت کامل مثل (01/02/1388) در این صورت نتیجه لازم را نخواهید گرفت !

برای دستیابی به محدوده تاریخ در جستجو سعی کنید تاریخ را به صورت عددی مثل (13880201) ذخیره کنید .

lovelygirl
دوشنبه 02 آذر 1388, 09:09 صبح
لطفا به موادی که من یا سایر دوستان توضیح دادن خوب توجه کنید !

شما کد زیر رو در دستور جستجو قرار دادید که اصلا به راهنمایی هایی که ما انجام دادیم ربطی نداره !!!!!!!!!!!!



ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from tel where date = ' +QuotedStr(edit1.Text )and (edit5.Text));
ADOQuery1.Active := true;


این بار با دقت بیشتری عمل کنید ، کد زیر رو جایگزین کنید !



ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from tel where date >= ' +
QuotedStr(edit1.Text )+' and date <= ' +(edit5.Text));
ADOQuery1.Active := true;


البته من یادم نیست شما تاریخ رو به چه صورتی ذخیره می کردید :
اگر به صورت کامل مثل (01/02/1388) در این صورت نتیجه لازم را نخواهید گرفت !

برای دستیابی به محدوده تاریخ در جستجو سعی کنید تاریخ را به صورت عددی مثل (13880201) ذخیره کنید .
خوب من كه به شما گفتم عوض كردم كدها رو
كدهاي شما و دوستان رو امتحان كردم نشد
اين كد ها رو خودم نوشتم قبلش براي شما دو ستان را زده بودم تو جه ميكنم به حرفاتون:ناراحت:
خوب من تاريخم رو همينطوري (01/02/1388) وارد ميكنم يعني فرمت تاريخم را عوض كنم؟

lovelygirl
دوشنبه 02 آذر 1388, 09:11 صبح
خوب من فرمت تاريخم رو چطوري عوض كنم؟از اكسس كه نميشه چون نوع فيلدم text از خود ويندوز هم بخوام عوض كنم كه همچين فرمتي نداره كه:افسرده:

دلفــي
دوشنبه 02 آذر 1388, 17:54 عصر
خوب من فرمت تاريخم رو چطوري عوض كنم؟از اكسس كه نميشه چون نوع فيلدم text از خود ويندوز هم بخوام عوض كنم كه همچين فرمتي نداره كه:افسرده:

شما می تونید قبل از ذخیره اطلاعات با استفاده از تابع زیر به راحتی فرمت تاریخ خود رو به عدد 8 رقمی تبدیل کنید ، فقط توجه داشته باشید که فیلد مربوط به تاریخ رو در جدولتون از فرمت text به number تغییر بدید !




Function Date2Int(S:String):String;
begin
S:= S[1]+S[2]+S[3]+S[4]+S[6]+S[7]+S[9]+S[10];
Date2Int := Pchar(Trim(S));
end;

pezhvakco
دوشنبه 02 آذر 1388, 20:44 عصر
سلام :
آقا این مشکل تاریخ که میگین برای جستوی بین دو بازه تاریخ هست، برای چیه و کیه !
وقتی می گی از 880102 تا 881012 نتیجه بده نباید مشکل داشته چون سیستم جستجوی sql برای جستجوی مقادیر متنی حرف به حرف از ابتدا شروع میکنه و اگر نوع فیلد تاریخ را nvchar تعیین کرده باشی اشتباه نداره .
اگر nvchar باشه چون مقادیر احتمالی خالی ابتدا و انتهای فیلد را حذف می کنه ، اشتباه نداره ،
اگه اشتباه کنه در سایر جستجوی متنی دیگر برای مثلا فامیل و پیدا کردن فامیل هایی که با چند حرف خاص شروع میشه، نیز باید اشتباه کنه که این امکان نداره چون ساختار کار خود sql این جوری طراحی شده .
تشکر از صبر ...

lovelygirl
یک شنبه 08 آذر 1388, 10:24 صبح
شما می تونید قبل از ذخیره اطلاعات با استفاده از تابع زیر به راحتی فرمت تاریخ خود رو به عدد 8 رقمی تبدیل کنید ، فقط توجه داشته باشید که فیلد مربوط به تاریخ رو در جدولتون از فرمت text به number تغییر بدید !




Function Date2Int(S:String):String;
begin
S:= S[1]+S[2]+S[3]+S[4]+S[6]+S[7]+S[9]+S[10];
Date2Int := Pchar(Trim(S));
end;

ببخشيدا اين كد رو روي چي بنويسم؟يعني رو فرمي بنويسم؟رو كليدي چيزي بنويسم؟

benyaminrahimi
یک شنبه 08 آذر 1388, 10:43 صبح
:گیج:وای سرم داره گیج میره :گیج:

همه به نوعی درست نوشتن

خانم محترم لازم نیست اگه تاریخ رو رشته ذخیره می کنی اسلش هاشو برداری

شما می خوایین ابروشو درست کنید پاشو قطع کردین

بدون اینکه اسلشارو بردارین کار می کنه


کد خودتونم درست شدش تو ضمائم هست

راستی بهتون بر نخوره یک چرخی تو دلفی بزن دلفی فقط برگه standard ,ado نیست




اینکه فرمانت اجرا نمی شه دلیلش انه که وقتی تو ado query می خوای یک رشته رو پس کنی بدون استفاده از پارامتر باید هر سمت 4 سینگل کت بذاری

اگه فیلد تاریخت t1,t2 و نام تیبل یا ویو tbl باشه کد زیر مشکل رو حل می کنه
adoquery1.active:=false;f
adoquery1.sql.clear;f
adoquery1.sql.add('select * from tbl where t1>='+''''+edit1.text+''''+' and t2<='+''''+edit2.text+'''')f
adoquery1.active:=true;f

در مورد ریپورت هم اگه دیتا ست دیتا عوض بشه یعنی query دیتا سورس و گزارشی که بهش وصل هم عوض می شن

موفق باشین

lovelygirl
دوشنبه 09 آذر 1388, 13:35 عصر
:گیج:وای سرم داره گیج میره :گیج:

همه به نوعی درست نوشتن

خانم محترم لازم نیست اگه تاریخ رو رشته ذخیره می کنی اسلش هاشو برداری

شما می خوایین ابروشو درست کنید پاشو قطع کردین

بدون اینکه اسلشارو بردارین کار می کنه


کد خودتونم درست شدش تو ضمائم هست

راستی بهتون بر نخوره یک چرخی تو دلفی بزن دلفی فقط برگه standard ,ado نیست




اینکه فرمانت اجرا نمی شه دلیلش انه که وقتی تو ado query می خوای یک رشته رو پس کنی بدون استفاده از پارامتر باید هر سمت 4 سینگل کت بذاری

اگه فیلد تاریخت t1,t2 و نام تیبل یا ویو tbl باشه کد زیر مشکل رو حل می کنه
adoquery1.active:=false;f
adoquery1.sql.clear;f
adoquery1.sql.add('select * from tbl where t1>='+''''+edit1.text+''''+' and t2<='+''''+edit2.text+'''')f
adoquery1.active:=true;f

در مورد ریپورت هم اگه دیتا ست دیتا عوض بشه یعنی query دیتا سورس و گزارشی که بهش وصل هم عوض می شن

موفق باشین

كد شما هم اجرا نميشه بعدشم من هرچي لازم باشه انجام ميدهم خوب وقتي ado لازم دارم كه نمي تونم از چيزهاي ديگه استفاده كنم
بعدشم من كد شما رو استفاده كردم پيغام ميده كه همچنين table وجود ندارد درحاليكه جدول ما ساخته شده و درست كار ميكنه نميدونم مشكل چيه:عصبانی++:

benyaminrahimi
سه شنبه 10 آذر 1388, 13:07 عصر
دوست عزیز

کدی که رو عکس نوشتم ببین
گویا شما نتونستی خودت رو با مثال من هماهنگ کنی عکس رو ببین
رو تیبل خودت نوشتم


منظورم از یک دوری بزن اینه که خیلی از کد نویسیاتون مثل کد نویسی برنامه های تحت داس که تو turbo paskal می نوشتیم

تو کداتون دیدم برای در ج رکورد جدید از edit استفاده کردی

یک سری هم به برگه data controls بزن مثل dbedit

البتته این نظر شخصی امید وارم بر نخورده باشه

چون اگه با این روشا بخوای یک پروژه حسابداری کوچیک بنویسی چن سالی طول می کشه
و پشتیبانیشم دیوانه کنندشت

lovelygirl
سه شنبه 10 آذر 1388, 16:28 عصر
دوست عزیز

کدی که رو عکس نوشتم ببین
گویا شما نتونستی خودت رو با مثال من هماهنگ کنی عکس رو ببین
رو تیبل خودت نوشتم


منظورم از یک دوری بزن اینه که خیلی از کد نویسیاتون مثل کد نویسی برنامه های تحت داس که تو turbo paskal می نوشتیم

تو کداتون دیدم برای در ج رکورد جدید از edit استفاده کردی

یک سری هم به برگه data controls بزن مثل dbedit

البتته این نظر شخصی امید وارم بر نخورده باشه

چون اگه با این روشا بخوای یک پروژه حسابداری کوچیک بنویسی چن سالی طول می کشه
و پشتیبانیشم دیوانه کنندشت
ميدونم خودم رفيق منم اسم جدولم رو درست نوشتم اما نميدونم از چي ايراد ميگيره
بعدشم من از اولش با db ها كار كرده بودم اما به دلايلي همه رو حذف كردم و اينطوري نوشتم البته با كمك دوستان:لبخندساده:

benyaminrahimi
سه شنبه 10 آذر 1388, 17:37 عصر
شاید اصلا دستورت اشتباست اگه بانکت sql server می تونی با برنامه profiler دستور رو رو بگیری بعد تو query analyzer اجراش کنی ببینی مشکل چیه

می تونی هم سورستو بریزی تو یک نوت بوک تو مجمع عمومی بعدی نشون بدی

---------------------------------
نمی دونم کی بهت گفته اینطوری کار کنی ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

هر کی گفته لطفا بیاید دلایلشو بیان کنه
چون دلیل این طور کد نویسی عدم آشنایی با امکانات دلفی

lovelygirl
دوشنبه 16 آذر 1388, 08:36 صبح
شاید اصلا دستورت اشتباست اگه بانکت sql server می تونی با برنامه profiler دستور رو رو بگیری بعد تو query analyzer اجراش کنی ببینی مشکل چیه

می تونی هم سورستو بریزی تو یک نوت بوک تو مجمع عمومی بعدی نشون بدی

---------------------------------
نمی دونم کی بهت گفته اینطوری کار کنی ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

هر کی گفته لطفا بیاید دلایلشو بیان کنه
چون دلیل این طور کد نویسی عدم آشنایی با امکانات دلفی
مشكلم با جدولم حل شد الان خطا نميده اما وقتي تاريخ ميزنم كله اطلاعاتم رو نشون ميده يعني به تاريخ توجه نميكنه اما خيلي جالبه وقتي تاريخ رو اشتباه ميزنم يعني تاريخي ميزنم كه تو جدولم نيست گزارش نمياره اما اگه تاريخي بزنم كه تو جدولم باشه همه گزارشامو مياره يعني مشكلم كجاست؟:عصبانی++:

دلفــي
شنبه 21 آذر 1388, 15:39 عصر
مشكل شما در اين بود كه شما صفحه گزارش خودتون رو به يه كوئري وصل كرده بوديد كه جستجو رو با اون انجام نمي داديد و جستجوي شما انجام مي گرفت ولي نمايش داده نمي شد !

به هر حال من چند تغيير در روند گزارشگيري برنامه شما انجام دادم، الان قسمت گزارشگيري كار مي كنه و مي توني از فايل ضميمه دانلودش كني .