View Full Version : ساخت شمارشگر براي محتويات برنامه
hentjanson
جمعه 07 تیر 1387, 19:42 عصر
سلام دوستان من يك برنامه ساختم كه يكسري اطلاعات ثبت ميكنه .
در اين حين يك combobox هم هست كه شامل ايتم هاي حروفچيني . ليتوگرافي . چاپ جلد
هستش حالا مي خوام بدونم در برنامه چند تا كلمه حروفچيني . چند تا ليتوگرافي و چند تا چاپ جلد هستش برنامه رو ضميمه ميكنم
ميشه يك نگاهي اساتيد بهش بكنند .
SYNDROME
جمعه 07 تیر 1387, 19:50 عصر
سلام دوستان من يك برنامه ساختم كه يكسري اطلاعات ثبت ميكنه .
در اين حين يك combobox هم هست كه شامل ايتم هاي حروفچيني . ليتوگرافي . چاپ جلد
هستش حالا مي خوام بدونم در برنامه چند تا كلمه حروفچيني . چند تا ليتوگرافي و چند تا چاپ جلد هستش برنامه رو ضميمه ميكنم
ميشه يك نگاهي اساتيد بهش بكنند .
بهتر است یک مثال بزنی تا دوستان کاملا متوجه مشکل شما بشوند.
البته برای جستجوی حروف می توانی از دستور Like استفاده کنی که تعداد رکوردهایی را که مقادیر فوق را دارند بر می گرداند.
Select *
From Tbl_Test
Where Field1 Like'%Value%'
موفق باشید
babak_delphi
جمعه 07 تیر 1387, 19:52 عصر
خب یک Query بگیر
hentjanson
جمعه 07 تیر 1387, 20:03 عصر
يعني براي هر كدام يك ado query ايجادكنم ؟ چون سه تا مقدار مي خوام ؟
babak_delphi
جمعه 07 تیر 1387, 20:03 عصر
Select count * as cnt from table1 where ...
hentjanson
جمعه 07 تیر 1387, 20:05 عصر
سلام دوست من .
ميشه بگيد از اين كد چطور بايد استفاده كرد ؟
Select *
From Tbl_Test
Where Field1 Like'%Value%'
اينطوري كه نياز به 3 تا adoquery دارم كه براي هر كدام اينو بنويسم
babak_delphi
جمعه 07 تیر 1387, 20:16 عصر
نه
با همون یک query هم میشه
select count field1 as cnt1 , count field2 as cnt2 , count field3 as cnt3 from table1 where ...
به جای field1 اسم فیلد مورد نظر رو بنویس
Hsimple11
جمعه 07 تیر 1387, 20:22 عصر
دوست عزیز تاپیکتان بسیار گنگ است. و برنامه تان هم اشکالات زیادی دارد :
1- در پست قبلتان هم برنامه خود را گذاشته بودید، دکمه های افزودن و انصراف هیچ عملی را انجام نمیدهند. دکمه افزودن فقط focus را set میکند. همین.
2- چرا با هربار باز کردن ComboBox یک آیتم به آن اضافه میشود؟؟؟
3- فیلتر کردن یعنی فیلتر بر اساس یک شرط. یعنی یک شرط یک گزینه داشته باشید و بر اساس اون داده ها تون، رکوردهاتون رو فیلتر کنید، این گزینه فیلتر در برنامه شما بر اساس چه شرطی کار میکند؟ چی را فیلتر میکند؟
4-
حالا مي خوام بدونم در برنامه چند تا كلمه حروفچيني . چند تا ليتوگرافي و چند تا چاپ جلد هستش.
یعنی چی در برنامه؟ در سورس؟ در بانک؟ چند تا کلمه حروفچینی... یعنی چی؟ منظورتان چندتا رکورد است که در فیلدی که در DBGrid هم آنرا نمایش نداده اید برابر با این کلمات هستند؟
در مورد شمارش رکوردها هم مفصلا در تاپیک قبلیتان صحبت شده.
موفق باشید....
hentjanson
جمعه 07 تیر 1387, 20:26 عصر
ببين من يك فيلد به اسم cell دارم كه توسط يك combobox پر ميشه كه combobox شامل مقادير زير هستش (حروفچيني ، ليتوگرافي ،چاپ جلد ) فقط يك فيلد دارم . ولي مي خوام بدونم تو اين فيد چند تا كلمه حروف چيني چند تا ليتوگرافي و چند تا چاپ جلد هستش و هر مقدار را در يك label جدا گانه صدا بزنم
hentjanson
جمعه 07 تیر 1387, 20:30 عصر
دوست عزيز ميدونم شما مهندسي منم اين قدر وقت ندارم يك برنامه كامل رو مثال يزنم . يك برنامه ساده درست ميكنم محض نمايش شما .
من اين مشكل رو يك بار حل كردم دنبال يك روش بهترم اخه تازه شروع به كار به دلفي كردم
مي خوام ببينم با يك query هم ميشه يا نه چون من با 3 query اين كارو كردم شما هم نمي خواد خودتو زحمت بدي چون من فقط يك برنامه ساده ساختم نخواستم رفع اشكال برنامه كني
Hsimple11
جمعه 07 تیر 1387, 21:06 عصر
منم اين قدر وقت ندارم يك برنامه كامل رو مثال يزنم . يك برنامه ساده درست ميكنم محض نمايش شما .
نیاز نیست یک برنامه کامل را مثال بزنید. ولی وقتی برنامه تان اشکالات اساسی دارد و سوالتان هم مبهم است کسی نمیتواند کمکتان کند و ناچارید در چند پست منظورتان را توضیح دهید. بعلاوه در چندین تاپیک قبلتان هم برنامه تان این اشکالات را داشت.
مي خوام ببينم با يك query هم ميشه يا نه چون من با 3 query اين كارو كردم
بله میشه.
اخه تازه شروع به كار به دلفي كردم
چرا در هر تاپیک این مسئله رو ذکر می کنید؟
من قصدم فقط کمک بود.
دوست عزیز از اینکه کسی اشکال ما رو بگیره هیچ وقت ناراحت نشین. برعکس....
موفق باشید...
hentjanson
جمعه 07 تیر 1387, 21:49 عصر
تشكر از شما .
قابل توجه اساتيد من از اين كد استفاده كردم كه دوستمون گفتند :
Select *
From table1
Where cell Like'%ÍÑæÝíäí%'
و اينطور صداش زدم
procedure TForm1.FormCreate(Sender: TObject);
begin
label1.Caption:=IntToStr(ADOquery1.RecordCount);
end;
end.
البته برداشت من اين بود تا الان . ولي من مي خوام بشه در ان واحد از اين كوئري چند تا خروجي گرفت . مثلا من الان كلمات (حروفچيني) رو شمردم نميشه در ان واحد كلمات ديگه اي رو هم شمرد ميشه در اين مورد راهنمايي كنيد
Hsimple11
شنبه 08 تیر 1387, 00:48 صبح
اینکه میگم سوالتان اساسا مبهم است دلیل دارد. شما تعداد رکوردها را میخواهید چه نیازی به فیلتر دارید؟! دوستان هم طبیعتا منظور شما رو به درستی متوجه نشدند. همینطور که شنیدید باید از تابع Count استفاده کنید. در ضمن دستور Like به منظور تعمیم کلمات بکار میرود و اگر از %MyString% استفاده کنید جهت تعمیم کلمه مورد نیاز به هر محلی است. در حالیکه شما فقط عبارت "حروف چینی" و غیره را نیاز دارید پس استفاده از این تگ کاملا بیمورد است.
موفق باشید...
hentjanson
شنبه 08 تیر 1387, 07:36 صبح
شما روش بهتري داريد بگيد بهتره خارج از انتقاد بگيد روشي در ابن رابطه ميدونيد ارائه بديد ؟
براي اينكه توضيحي هم بدم اسم فيلد cell هستش . خوب حالا بگيد چطور اين كارو انجام بدم
hentjanson
شنبه 08 تیر 1387, 15:42 عصر
بعضي ها فقط ياد دارند حرف بزنند بجاي اينكه رفع اشكال كنند و پاسخگو سوال باشند .......
از اساتيد ميشه يك توشيح جامعي در اين زابطه به من بدهيد ؟
Hsimple11
شنبه 08 تیر 1387, 16:03 عصر
لطفا پست های قبلی دوستان را با دقت بخوانید. جواب شما چندبار داده شده است. اگر از SQL استفاده میکنید از تابع Count برای شمارش رکوردها استفاده کنید :
Select Count(MyField) [As AliasName] From <MyTable> Where Myfield=''
که MyField را برابر با نام فیلد مورد نظر و Aliasname عنوان نمایش نتایج تابع میباشد.
میتوان توابع اینچنینی را برای چند فیلد نیز بکار برد :
Select Count(MyField1) [As AliasName1], Count(MyField2)
[As AliasName2],... From <MyTable> Where....
حالا میتوانید محتوای نتیجه تابع را در label بریزید.
در ضمن در مورد روش قبلی که نوشته بودید هم نیازی به 3 Query نداشتید. میتوانید برای شمارش هر گزینه یکبار فیلتر کنید بعد تعداد رکوردها را بشمارید و دوباره فیلتر را False کرده و برای مورد بعد اینکارها را تکرار کنید که اساسا نیازی به این کارها ندارید.
دوست عزیز قرار نیست کسی برنامه شمارا کامل بنویسد و در اختیار شما قرار دهد. همین که راهنمایی را میبینیم باید خودمان با جستجو بقیه مسیر را کامل کنیم. جواب شما چندین بار داده شده ولی شما "دقیقا" کدی را میخواهید که در برنامه تان کپی و Paste کنید. پستها را با دقت بخوانید.
موفق باشید....
hentjanson
یک شنبه 09 تیر 1387, 12:52 عصر
اين كد رو چطور پر كنم به نظرت :
Select Count(MyField) [As AliasName] From <MyTable> Where Myfield=''
اره اينطوري خوبه
Select Count(MyField) [As AliasName] From <MyTable> Where cell='iran'
جايي ديگه رو هم بايد تغييربدم ؟
babak_delphi
یک شنبه 16 تیر 1387, 23:07 عصر
با فرض اینکه فیلد شما شامل 3 نوع داده است :
with AdoQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT COUNT (Field_Name) as cnt , Field_Name From Table_Name Group by Field_Name');
Open;
end;
Label1.Caption := ADOQuery1.FieldByName('Field_Name').AsString+' '+ IntToStr(ADOQuery1.FieldByName('cnt').AsInteger);
ADOQuery1.Next;
Label2.Caption := ADOQuery1.FieldByName('Field_Name').AsString+' '+ IntToStr(ADOQuery1.FieldByName('cnt').AsInteger);
ADOQuery1.Next;
Label3.Caption := ADOQuery1.FieldByName('Field_Name').AsString+' '+ IntToStr(ADOQuery1.FieldByName('cnt').AsInteger);
این کد مورد نیاز شماست
من اینرو برای حالتی که از قبل میدونید سه نوع داده در فیلد وجود داره نوشته ام
خودتون می تونید اونرو بسط بدین
موفق باشید.
hentjanson
چهارشنبه 19 تیر 1387, 22:10 عصر
سلام من اينو اينطوري بايد يعني بنويسم ميشه توضيه بدي كجا و چطور بايد از اين استفاده كرد ؟
1 :اينو بايد در form show بنويسم اره ؟
2: به جاي field _name يا cnt چي بنويسم
babak_delphi
چهارشنبه 19 تیر 1387, 23:30 عصر
به جای Field_Name اسم فیلد رو بنویسید
به جای cnt لازم نیست چیزی بنویسید ، cnt یک متغیره که به همون نام استفاده شده
ایها را هم هر جا که می خواهید عمل مورد نظر انجام بشه بنویسید (مثلا OnShow)
hentjanson
پنج شنبه 20 تیر 1387, 16:36 عصر
سلام ببين نشد من اينطور نوشتم كد رو ؟
with AdoQuery7 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT COUNT (vazeyat) as cnt , vazeyat From Table1 Group by vazeyat');
Open;
end;
Label1.Caption := ADOQuery7.FieldByName('vazeyat').AsString+' '+ IntToStr(ADOQuery7.FieldByName('cnt').AsInteger);
ADOQuery7.Next;
Label2.Caption := ADOQuery7.FieldByName('vazeyat').AsString+' '+ IntToStr(ADOQuery7.FieldByName('cnt').AsInteger);
ADOQuery7.Next;
Label3.Caption := ADOQuery7.FieldByName('vazeyat').AsString+' '+ IntToStr(ADOQuery7.FieldByName('cnt').AsInteger);
راستي براي sql - ado query چيزي بايد نوشت تا همين حد كافيه ؟
select * from table1
babak_delphi
جمعه 21 تیر 1387, 15:16 عصر
... Select Count (Vaziat) as cnt رو در SQL از ADOQuery نوشتیم دیگه
البته موقع اجرا
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.