PDA

View Full Version : آيا ميشه در دستور Select فايل ها را بر اساس نوع انتخاب كرد



سعید صابری
پنج شنبه 07 خرداد 1388, 18:49 عصر
سلام دوستان

آيا ميشه در دستور Select (اس كيو ال) فيلدها را بر اساس نوع داده انتخاب كرد.
من يك تيبل دارم كه jتعداد زياد فيلد دارد مي خوام فيلدهاي كه از نوع عددي هستند را با هم جمع كنم مي خواستم ببينم راهي هست كه فقط فيلدهاي عددي را انتخاب كنيم و مجبور نباشيم يك به يك فيلدهاي عدد تايپ كنيم

ممنون از راهنماييتون

merced
پنج شنبه 07 خرداد 1388, 23:54 عصر
يه دستور SQL بسازيد



var i : Integer ;

begin
ADOTable1.Open ;
s := 'Select ' ;
for i := 0 to ADOTable1.Fields.Count -1 do
if ADOTable1.Fields[i].DataType = ftInteger then

s:= s + ADOTable1.Fields[i].FieldName + ' ,' ;





يه دونه , آخرش اضافه مياد كه ميشه با دستور delete‌ حذفش كرد

Saeed_m_Farid
جمعه 08 خرداد 1388, 02:49 صبح
مي خوام فيلدهاي كه از نوع عددي هستند را با هم جمع كنمبا تشكر از merced، ولي چون ممكنه نوع فيلد غير از ftInteger نوع ديگه هم باشن و از طرف ديگه دوستمون جمع رو خواسته بودن من يه تابع نوشتم كه اميدوارم بدردتون بخوره :
function GetSumQuery(ds: TADODataSet; tblName: String): String;
var
idx: Integer;
sqlStr,
fldList: String;
begin
try
if not ds.Active then
ds.Open;
for idx := 0 to ds.FieldCount - 1 do begin
with ds.Fields[idx] do begin
if DataType in [ftSmallint,
ftInteger,
ftWord,
ftFloat,
ftCurrency] then begin
if sqlStr <> EmptyStr then begin
sqlStr := sqlStr + ', ';
fldList:= fldList + ',';
end;
sqlStr := sqlStr + 'SUM(' + FieldName + ') AS Sum'+FieldName;
fldList := fldList + FieldName;
end;
end;
end;

sqlStr := 'SELECT ' + sqlStr + ' FROM '
+ tblName + ' GROUP BY ' + fldList;
Result := sqlStr;
except
raise;
end;
end;
واسه استفاده هم ميتونين از ADOTable استفاده كنيد و هم از ADOQuery؛ مثلا اگه ADOTable1‌داشته باشين، نحوه استفاده ميشه اينطوري :

MySumSQLStr := GetSumQuery(TADODataSet(ADOTable1), ADOTable1.TableName)موفق باشيد