Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2009, 00:51   #1
pnv152
Новичок
Джуниор
 
Регистрация: 11.01.2009
Сообщений: 2
По умолчанию BDE + сортировка на дельфи

Всем доброго времени суток! Кто может подскажет (как бывает у студентов - все в последний момент... 2 ночи не спал... писал прогу и уперся в последней функции). Смысел проги следующий - есть список студентов... у них считается рейтинг. Все это работает, но нужно в последнем столбце им выставлять место в зависимости от рейтинга... т.е. чем выше рейтинг - тем выше место... я пошел через сортировку по рейтингу, но теперь никак не соображу как в столбце выставить во-первых, последовательность строк, а, во-вторых, если рейтинг совпал у кого-нить соответственно места у них одинаковые.
Начал я так:

Maintbl.First;
While not maintbl.eof do
begin
ВОТ ЗДЕСЬ ЧТО DO???
end;
maintbl.Next;

Компоненты использовал TTable и TDatasource. База в парадоксе без элиаса.
Заранее ОЧЕНЬ СИЛЬНО БЛАГОДАРЕН!!!!!!!!!!!
pnv152 вне форума Ответить с цитированием
Старый 11.01.2009, 02:26   #2
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

А вообще сделай через цикл FOR перебери все свои записи, внутри цикла присваивай значению столбца с местом значение I.

Через SQL пойдет решение? Есть ли первичный ключ? Уникальный столбец?
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 21.01.2009, 12:18   #3
pnv152
Новичок
Джуниор
 
Регистрация: 11.01.2009
Сообщений: 2
По умолчанию

Можно и через SQL... вот сделал в том, в чем понимаю - StringGrid... в нем все работает... а как это реализовать через BDE - не знаю:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;    //счётчик
    num: integer;   //номер строки базы с текущим значением рейтинга
    place: integer;  //место препода в турнирной таблице
    curreit: real;  //текущий рейтинг препода (перебираем по убыванию)
    minreit: real;  //минимальный рейтинг из всех преподов (для выхода из цикла)
    diff: real;    //разность рейтингов - для поиска следующего по убыванию
begin
//ищем минимальный рейтинг
minreit:=RoundTo(StrToFloat(sg.cells[1,1]),-10);
i:=1;
while i<=sg.RowCount-1 do begin
 if RoundTo(StrToFloat(sg.cells[1,i]),-10)<minreit then minreit:=RoundTo(StrToFloat(sg.cells[1,i]),-10);
 i:=i+1;
 end;
place:=1;
//ищем максимальный рейтинг и делаем его текущим значением рейтинга (curreit)
curreit:=RoundTo(StrToFloat(sg.cells[1,1]),-10);
num:=1;
i:=2;
while i<=sg.RowCount-1 do begin
 if curreit<RoundTo(StrToFloat(sg.cells[1,i]),-10) then
  begin
   curreit:=RoundTo(StrToFloat(sg.cells[1,i]),-10);
   num:=i;
  end;
 i:=i+1; 
 end;  
//
sg.Cells[2,num]:=IntToStr(place);
if num<sg.RowCount-1 then
 for i:=num+1 to sg.RowCount-1 do
  if curreit=RoundTo(StrToFloat(sg.cells[1,i]),-10) then sg.Cells[2,i]:=IntToStr(place);

if curreit=minreit then exit;

repeat
place:=place+1;
diff:=curreit;
for i:=1 to sg.RowCount-1 do
 if ((diff>curreit-RoundTo(StrToFloat(sg.cells[1,i]),-10)) and (curreit-RoundTo(StrToFloat(sg.cells[1,i]),-10)>0)) then
  begin
   diff:=curreit-RoundTo(StrToFloat(sg.cells[1,i]),-10);
   num:=i;
  end;
 curreit:=RoundTo(StrToFloat(sg.cells[1,num]),-10);
 sg.Cells[2,num]:=IntToStr(place);
 if num<sg.RowCount-1 then
  for i:=num+1 to sg.RowCount-1 do
   if curreit=RoundTo(StrToFloat(sg.cells[1,i]),-10) then sg.Cells[2,i]:=IntToStr(place);
until curreit=minreit;

end;
pnv152 вне форума Ответить с цитированием
Старый 21.01.2009, 12:48   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а как это реализовать через BDE - не знаю
Для начала создай базу, скажем в Парадоксе через DatabaseDesctop
Потом уж можно и SQL лепить

P.S. Кста сортировки для СтрингГрида выложены на Delphi World
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.01.2009, 15:31   #5
NOOB
Пользователь
 
Аватар для NOOB
 
Регистрация: 01.11.2007
Сообщений: 45
По умолчанию

А зачем сортировать на Delphi, а скрипом в SQL сразу нельзя делать выборку данных уже отсортированных?

а вообще можешь работать с выбранными данными в памяти компьютера, не изменяя их в БД:

поставь Table1.CachedUpdates:=True;

и создай пустой обработчик события OnUpdateRecord:
procedure TForm1.Table1UpdateRecord(DataSet: TDataSet;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin
//
end;

теперь работай с компанентом Table1 посредством методов Insert, Delete, Edit, Post, данные будут у тебя висеть в памяти компьютера, в БД изминений происходить не будет.
NOOB вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движок BDE Македонский БД в Delphi 10 17.09.2008 19:31
Пароль в BDE sander БД в Delphi 4 28.10.2007 11:16
BDE Arsgun БД в Delphi 4 29.05.2007 22:24
BDE Administrator Prisian БД в Delphi 0 29.05.2007 17:49