Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.016 c
3-9428            archer                2002-03-06 10:30  2002.04.04  
Ошибка при работе с Oracle через ADO


14-9636           Evgueni               2002-02-20 22:42  2002.04.04  
Посоветуйте прокси хороший...


1-9460            BDRON                 2002-03-24 22:10  2002.04.04  
CheckListBox


1-9568            Beginner              2002-03-24 21:41  2002.04.04  
SaveDialog


1-9513            Rammst                2002-03-23 06:42  2002.04.04  
Скины