Форум: "Базы";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];
ВнизDBISortTable: сортировка по нескольким полям. Найти похожие ветки
← →
Nest (2002-03-12 11:10) [0]Нужно отсортировать таблицу по двум полям.
Есть:
T1
TYPE LEN DEC NULL_VALUE PK
--------------------------
int 0 0 NOT NULL PK
char 10 0 NOT NULL
char 4 0 NOT NULL PK
int 0 0 NULL
int 0 0
int 0 0 NOT NULL
Надо отсортировать так, чтоб сначала шли записи с PK, потом остальные с NOT NULL потом все остальные, т.е.
TYPE LEN DEC NULL_VALUE PK
--------------------------
char 4 0 NOT NULL PK
int 0 0 NOT NULL PK
char 10 0 NOT NULL
int 0 0 NOT NULL
int 0 0 NULL
int 0 0
Помогите пожалуйста.
← →
deleon (2002-03-12 11:24) [1]Чего-то я не понял, поля нужно упорядочить или записи ?
← →
Nest (2002-03-12 11:26) [2]2deleon (12.03.02 11:24)
Что значит упорядочить поля?
Канэчна записи отсортировать.
← →
Nest (2002-03-12 11:45) [3]Срочно нужно...
← →
Turalyon (2002-03-12 11:52) [4]А в чем проблемма?
Составляешь SQL запрос, перечисялешь список полей, в том порядке какой тебе нужен, и далее сортируешь....
Что то типа
Select MyTable.MyPK1, MyTable.MyPK2, ..... from MyTable
Order By MyTable.MyPK1
Или выбираешь все * а потом уже в самом DBGrid-е расперделяешь как у тебя будут поля идти....
← →
Nest (2002-03-12 11:57) [5]Turalyon ©
Да мне нужно физическую таблицу отсортировать, а не вернуть отсортированный НД !!!!!!!!!
Надо штоб тадлица на диске отсортировалась...
← →
Johnmen (2002-03-12 11:59) [6]Сортировать-то можно по возраст., либо по убыв.значения поля/полей...
Другого не дано...
А если хочется чего-то нестандартного - тогда извращаться...
← →
Nest (2002-03-12 12:01) [7]2Johnmen ©
Да мне это и надо, токо отсортировать не по одному полю, а по двум.
Не знаю как жэто сделать одной функцией DbiSortTable.
Подскажи.
← →
deleon (2002-03-12 12:10) [8]Почитай здесь - я уже писал пример:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1015401064&n=1
← →
Turalyon (2002-03-12 12:13) [9]>Nest ©
Извини, невнимательно прочитал заголовок
← →
Johnmen (2002-03-12 12:13) [10]С DbiSortTable не работал, не скажу, но похожие вопросы уже были - поройся в конфе...
← →
Nest (2002-03-12 12:31) [11]2deleon
2Johnmen
Да конечно я прежде чем вопрос задать, порылся в факе и в хелпе.
Там всё есть но только для сортировки по одному полю.
А как отсортировать по двум полям?
← →
deleon (2002-03-12 14:08) [12]Ну это уж слишком...
(пора брать деньги за вопросы по Bde API - буду вторым Билли :))))
(с)deleon
procedure TForm1.Button1Click(Sender: TObject);
const
SortFieldCount = 2;
var
Db: TDatabase;
SaveActive: Boolean;
CurProp: CurProps;
SortFlds: array[0..SortFieldCount-1]of Word;
CaseIns: array[0..SortFieldCount-1]of Bool;
SortOrd: array[0..SortFieldCount-1]of SORTOrder;
RecSort: Integer;
begin
try
SaveActive := Tbl.Active;
Tbl.DisableControls;
Tbl.Active := True;
SortFlds[0] := 1; {номера полей в физ. структуре (1..n)}
SortFlds[1] := 2; {номера полей в физ. структуре (1..n)}
CaseIns[0] := True; {Case insensitive for sort column (True/False)}
CaseIns[1] := True; {Case insensitive for sort column (True/False)}
SortOrd[0] := sortASCEND; { Sort Order (sortASCEND/sortDESCEND)}
SortOrd[1] := sortASCEND; { Sort Order (True/sortDESCEND)}
Check(DbiGetCursorProps(Tbl.Handle, CurProp));
Db := Tbl.Database;
Tbl.Active := False;
Check(DbiSortTable(Db.Handle,
CurProp.szName, CurProp.szTableType,
nil, nil, nil, nil,
SortFieldCount,{ кол-во полей в массиве }
@SortFlds, { массив сортируемых полей }
@CaseIns, { массив CaseIns }
@SortOrd, { массив ордеров }
nil, False, nil, RecSort));
finally
Tbl.Active := SaveActive;
Tbl.EnableControls;
end;
end;
← →
Nest (2002-03-12 14:19) [13]2deleon
Спасибо. Это и было нужно.
Снят вопрос.
← →
deleon (2002-03-12 14:35) [14]Советую чаще читать bde.hlp - очень полезная штука :-)))
← →
Anatoly Podgoretsky (2002-03-12 22:15) [15]Nest © (12.03.02 14:19)
Кстати вероятно ты просто неправильно дал исходные данные, но DbaseIII не поддерживает не первичных ключей, ни ограничений типа NOT NULL
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c