Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.049 c
1-9519
Tsatur Soft
2002-03-22 22:48
2002.04.04
Чтение с дискеты


1-9585
MARcoDEN
2002-03-24 08:20
2002.04.04
Запуск программы


4-9669
sanjok
2002-02-02 21:23
2002.04.04
Как запустить внешнее приложение из своей программы


1-9559
olookin
2002-03-24 15:23
2002.04.04
И для математиков


1-9542
igorr
2002-03-24 07:11
2002.04.04
Удаление файлов.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский