PDA

View Full Version : چطور maximum یک ستون را بدست بیاوریم؟



ali_abbasi22145
پنج شنبه 21 تیر 1386, 11:35 صبح
سلام
ببخشید شاید این سوال ساده باشد که چطور maximum یک ستون (عدد موجود در ستون)را بدست بیاوریم؟
و آیا روشی که شما ارائه می کنید برای 5000 تا 10000 رکورد سریع است؟ بانک من SQL Sever 2000 و دلفی 7 دارم با یک فیلد عکس به حجم تقریبی 60KB.

Hamid.Kad
پنج شنبه 21 تیر 1386, 12:05 عصر
Select Max(FieldName) From TableName
بله - این روش به اندازه کافی سریع هست( یعنی در واقع سریعترین روش است)

ali_abbasi22145
پنج شنبه 21 تیر 1386, 12:12 عصر
Select Max(FieldName) From TableName
بله - این روش به اندازه کافی سریع هست( یعنی در واقع سریعترین روش است)

سلام
این روش استفاده از query است آیا دستور بدون استفاده از query وجود دارد؟

Hamid.Kad
پنج شنبه 21 تیر 1386, 12:21 عصر
شما از هر روشی که استفاده کنید بالاخره مجبورید از یک Query بهره ببرید
یه روش غیر مستقیم اینه که از Cursor استفاده کنید و با دستورات TSql ماکزیمم رو خودتون حساب کنید!
توی دلفی هم میتونید از ابتدا تا انتهای جدول راه برید و ماکزیمم رو خودتون حساب کنید که البته سرعت این دو روش به مراتب کمتر از روش اوله.
دلیل خاصی داره که نمی خواهید از روش اول استفاده کنید ؟

ali_abbasi22145
پنج شنبه 21 تیر 1386, 12:35 عصر
شما از هر روشی که استفاده کنید بالاخره مجبورید از یک Query بهره ببرید
یه روش غیر مستقیم اینه که از Cursor استفاده کنید و با دستورات TSql ماکزیمم رو خودتون حساب کنید!
توی دلفی هم میتونید از ابتدا تا انتهای جدول راه برید و ماکزیمم رو خودتون حساب کنید که البته سرعت این دو روش به مراتب کمتر از روش اوله.
دلیل خاصی داره که نمی خواهید از روش اول استفاده کنید ؟

سلام
قبل از اینکه شما دستور با query را بگویید من آن query را ایجاد کرده بودم و تست کردم و آن query را به یک DBْGrid وصل کردم و دیدم که ماکزیمم را هم می دهد ولی حال می خواهم ماکزیمم را مثلا در یک Edit نشان دهم نمی توانم اگر ممکن است لطف کنید یک مثال اینجا آپلود کنید تا کاملا متوجه شوم.

jirjirakk
پنج شنبه 21 تیر 1386, 12:47 عصر
دستور Max همون طور که دوست عزیز Hamid.Kad عنوان کردن اونقدر سریع هست که سریع جوابتون رو بهتون بر گردونه،
1000 تا رکورد هم زیاد نیستن زیاد نگران سرعت نباش :)

ali_abbasi22145
پنج شنبه 21 تیر 1386, 12:59 عصر
دستور Max همون طور که دوست عزیز Hamid.Kad عنوان کردن اونقدر سریع هست که سریع جوابتون رو بهتون بر گردونه،
1000 تا رکورد هم زیاد نیستن زیاد نگران سرعت نباش :)

سلام
یک مثال لطفا اینجا آپلود کنید.

Hamid.Kad
پنج شنبه 21 تیر 1386, 13:41 عصر
AdoQuery1.Close
AdoQuery1.Sql.text:='Select Max(FieldName) as MaxField From TableName'
AdoQuery1.Open
Edit1.Text := AdoQuer1.FieldByName('MaxField').asString


اگر هم خواستید توی DBEdit نشون بدید dataField اون را برابر با MaxField قرار بدید.

jirjirakk
پنج شنبه 21 تیر 1386, 14:46 عصر
...
var
iMAX : Integer;
...
With Query do begin
SQL.Text := 'Select Max(Column_Name) as MAX_ID From Table_Name';
Open;
iMAX := FieldByName('MAX_ID').AsInteger;
end;
...

ali_abbasi22145
شنبه 23 تیر 1386, 11:11 صبح
...
var
iMAX : Integer;
...
With Query do begin
SQL.Text := 'Select Max(Column_Name) as MAX_ID From Table_Name';
Open;
iMAX := FieldByName('MAX_ID').AsInteger;
end;
...

سلام
من فیلد بانک را bigint گرفتم و بزرگترین را پیدا می کند و بیشتر اوقات به جای بزرگترین عدد مقدار خالی برمی گرداند!
من خواهم هر برای رکورد جدیدکه وارد می کنم برای فیلد employee_number بزرگترین عدد همین employee_number را بگیرد به اضافه یک نماید.(در رویداد beforepost آن را نوشتم)
این هم کدش:
procedure TMainForm.ADOTable1BeforePost(DataSet: TDataSet);
var
iMAX : Integer;
begin
MainForm.ADOTable1.Edit;
With MainForm.MaxADOQuery do
begin
Close;
SQL.Text := 'Select Max(employee_number) as MAX_ID From CardTable';
Open;
iMAX := FieldByName('MAX_ID').AsInteger;
end;
MainForm.ADOTable1employee_number.AsInteger:= iMAX+1;
end;

ali_abbasi22145
دوشنبه 25 تیر 1386, 08:31 صبح
سلام
مشکل من فیلد بانک را bigint گرفتم و بزرگترین را پیدا می کند و بیشتر اوقات به جای بزرگترین عدد مقدار خالی برمی گرداند!

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

Batman
دوشنبه 25 تیر 1386, 19:02 عصر
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('select sum(columnname) from tablename');
adoquery1.open;
edit1.text:=adoquery1.fields[0].value;

SYNDROME
دوشنبه 25 تیر 1386, 21:26 عصر
با سلام

adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('select sum(columnname) from tablename');
adoquery1.open;
edit1.text:=adoquery1.fields[0].value;
کاربر عزیز دوستمان بزرگترین عدد را می خواهد نه جمع اعداد یک ستون را.
موفق باشی.

Batman
سه شنبه 26 تیر 1386, 06:43 صبح
خیلی ببخشید
اصلا متوجه نشدم آقای syndrome عزیز
پس به جای sum از max استفاده کنید

ali_abbasi22145
سه شنبه 26 تیر 1386, 15:18 عصر
مرسی حل شد