Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];

Вниз

Как программно отсортировать базу данных   Найти похожие ветки 

 
Bill   (2002-03-06 10:51) [0]

Помогите пожайлуста советом, как отсортировать базу данных программным образом, например по ДАТЕ.


 
deleon   (2002-03-06 10:56) [1]

Для этого есть BDE API function
DbiSortTable


 
Val   (2002-03-06 11:01) [2]

TTable:создать индекс по нужному полю и указать его в соотв. свойствах
TQuery: select * from mytable order by myfield


 
Bill   (2002-03-06 11:23) [3]

А в каком модуле она находится?


 
Jim   (2002-03-06 11:37) [4]

BDE


 
Bill   (2002-03-06 12:13) [5]

Запутался с этой функцией окончательно.
Помогите наисать эту функцию для сортировки базы данных Table1 по полю Date.


 
Val   (2002-03-06 12:34) [6]

зачем ее писать?


 
Bill   (2002-03-06 12:52) [7]

Как зачем писать? Мне просто это необходимо.
Я с этими параметрами запутался.
Я написал её. Но она кречит, что номер переполнен.
Вот я и хочу проверить.


 
Bill   (2002-03-06 12:53) [8]

Как зачем писать? Мне просто это необходимо.
Я с этими параметрами запутался.
Я написал её. Но она кречит, что номер переполнен.
Вот я и хочу проверить.

Я нехочу просто использовать индексы.


 
Val   (2002-03-06 12:57) [9]

>Bill (06.03.02 12:53)
Я нехочу просто использовать индексы.
А что значит непросто?
Как вы думаете, с помощью чего происходит сортировка?


 
Bill   (2002-03-06 13:03) [10]

В Database Desktop есть такая фича, как отсортировать базу данных по какомуто полю. Т.е. эти данные записиваються в базу данных. Уже отсортированные. Я примерно хочу такую уштуку.


 
deleon   (2002-03-06 13:03) [11]

Если у тебя в таблице есть автоинкрементное поле и оно в ключе, то отсортировать таблицу этой функцией не удастся, только с выводом в другую таблицу!


 
Bill   (2002-03-06 13:06) [12]

Да нет! Полей автоинкрементных нету.


 
roottim   (2002-03-06 13:35) [13]

Val © (06.03.02 11:01)
TTable:создать индекс по нужному полю и указать его в соотв. свойствах
TQuery: select * from mytable order by myfield


если под словами БД понимается таблица БД.. то чем тебе не нравится совет VAl


 
Bill   (2002-03-06 15:13) [14]

Мне все нравится. Но!
Мне это надо сделать на физическом уровне. Т.э. чтобы на диске была уже отсортированна база по полю.


 
roottim   (2002-03-06 15:20) [15]

Я конешно не берусь оценивать глубину ваших познаний в области БД...
может и действительно НАДО!!!!...
но если нет! то никто и никогда не сортирует "базу" на диске!... это маразм!


 
deleon   (2002-03-06 15:25) [16]

Все на самом деле очень просто:
(с)deleon

procedure TForm1.Button1Click(Sender: TObject);
var
Db: TDatabase;
SaveActive: Boolean;
CurProp: CurProps;
SortFlds: array[0..0]of Word;
CaseIns: Bool;
RecSort: Integer;
begin
try
SaveActive := Tbl.Active;
Tbl.DisableControls;
Tbl.Active := True;
SortFlds[0] := 1;
CaseIns := True;
Check(DbiGetCursorProps(Tbl.Handle, CurProp));
Db := Tbl.Database;
Tbl.Active := False;
Check(DbiSortTable(Db.Handle,
CurProp.szName, CurProp.szTableType,
nil, nil, nil, nil,
1,{ кол-во полей в массиве }
@SortFlds, { массив сортируемых полей }
@CaseIns, { ascending/descending sort }
nil, nil, False, nil, RecSort));
finally
Tbl.Active := SaveActive;
Tbl.EnableControls;
end;
end;


 
deleon   (2002-03-06 15:28) [17]

Если-бы это был маразм Borland не писал-бы для этого функций!


 
Val   (2002-03-06 15:41) [18]

>deleon (06.03.02 15:28)
Может вы объясните смысл сортировки таблицы с помощью физического перемещения записей в ней? А то - "..главный же приказал.." :)


 
deleon   (2002-03-06 15:45) [19]

Например: раз в месяц производить такую сортировку с большими базами данных для обеспечения наиболее эффективного доступа к данным, т.к. реорганизация индексов будет происходить быстрее и индексная сортировка в т.ч. т.е. советую почитать серьезную литературу по базам данных, а не Delphi за 21 день :)))


 
Val   (2002-03-06 16:02) [20]

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


 
deleon   (2002-03-06 16:09) [21]

Нет, я имел ввиду именно сортировку, т.к. построить индекс намного быстрее если эти поля уже упорядочены хотя-бы частично


 
Delirium   (2002-03-06 16:11) [22]

Хм, использование порядка расположения записей на физическом уровне в качестве ускорения доступа к данным, это нарушение логики SQL. Однако раз речь идёт о Paradox, то я думаю такое возможно, но сомневаюсь что сие сколько-нибудь быстрее индексированой сортировки.


 
MAxiMum   (2002-03-06 16:11) [23]

Меня мучает тот же вопрос. Мне необходимо отсортировать таблицу (DBGrid) по любому из полей. Фишка заключается в том, что полно полей LookUp.


 
deleon   (2002-03-06 16:11) [24]

Не собираюсь доказывать прописные истины, но физическая сортировка внекоторых случаях дает прекрасную оптимизацию доступа к данным!


 
deleon   (2002-03-06 16:16) [25]

Естественно, что построить индекс намного быстрее чем физически отсортировать записи в таблице, но речь ведь шла о редком упорядочивании. Да и упорядочивание записей имеет смысл только в таблицах не имеющим ключа, т.е. локальным.


 
Val   (2002-03-06 16:24) [26]

Таблицы, не имеющие ключа(речь ведь о primary?), врядли могут соответствовать современным представлениям о БД и работе с ними. А также почему такие таблицы называются вами локальными?


 
deleon   (2002-03-06 16:28) [27]

Вот именно по тому, что в таблицах основанных на технологии клиент-сервер отсутствие ключа - отход от правила идентификации записи.


 
deleon   (2002-03-06 16:29) [28]

Закрывайте тему, я просто попытался помочь автору, а не влезать в бесполезную полемику.


 
Anatoly Podgoretsky   (2002-03-06 20:57) [29]

А если речь идет о редком упорядочивании, то не стоит и голову ломать, уже все написано, достаточно запустить DBD - эта программа ничем не хуже своей и я пожозреваю, что даже лучше - надежнее.


 
sniknik   (2002-03-07 08:56) [30]

Не по теме.
Не буду пытатся помочь автору но тема упорядочивания записей меня задела. Т.к. сам этим занимался и могу это логически обосновать. Для тех кто не понимает зачем это нужно.
Задача. Нужно слить файлы логи с разных машин (касс) в один для того чтобы получить общую статистику. Записи строго упорядочены по дате - времени. Программа (старая но с ней еще работают) работающая с этими файлами только так их и воспринимает (если внести записи с поздним временем в начало то все что идет после будет проигнорировано до момента когда время не будет опять больше). Чтобы подсунуть ей общий файл логов он должен быть строго (физически) упорядочен - касса - дата - время. Индексов нет вообще если создаеш то ругается на неверный.
На SQL задача похоже решения не имеет только на BDE или чемто дающим прямой доступ к записи. У меня реализовано через BDE.

roottim (06.03.02 15:20)
Я конешно не берусь оценивать глубину ваших познаний в области БД...
может и действительно НАДО!!!!...
но если нет! то никто и никогда не сортирует "базу" на диске!... это маразм!

roottim зайдите в любой супермаркет и посмотрите в каком режиме работают кассовые апараты (если это POS) скорей всего в Dos-е. Это действительно маразм. Но они именно так и работают. И сортируют базы на диске. А системщики в них точно маразматики потому что им приходится работать с устаревшими форматами и подстраиваться под устаревшие программы. И еще если человек задает вопрос то ему это действительно надо, не критикуй а отвечай если уж взялся.


 
roottim   (2002-03-07 09:12) [31]

sniknik © упрек в свою сторону принимаю!...

но все же я сделал поправку НАДО!!!!!...
это НАДО очень плохо озвучено у автора!... может ему совсем
и ненадо физически... почему то он конечно молчит!... может уже правда уже все для себя решил

зрим в корень!
>Помогите пожайлуста советом, как отсортировать базу данных >программным образом, например по ДАТЕ
коректности в этом вопросе мало...

не спорю! что старые системы ( типа кассовых аппаратов ) выдвигают такие требования... и спорить не собираюсь!...
и это действительно маразматично!... но что делать... кому сейчас легко :)


 
Tolyan   (2002-03-07 10:14) [32]

Для себя когда-то сделал процедуру физической сортировки заданной таблицы по заданному полю через SQL может поможет. Так же нельзя было использовать индексы.( Создается временный файл.)
procedure SortTable( TB : TTable; fname : string);
const fn = "temp.dbf";
VAR flag : boolean;
st0 : string;
begin
flag:=TB.Active;
if flag then TB.Close;
st0:=fn;
CopyFile(PChar(TB.TableName),PChar(st0),true);
DM1.Qu1.SQL.Clear;
DM1.Qu1.SQL.Add("SELECT * FROM "+st0+" ORDER By "+ fname);
DM1.Qu1.Open;
TB.Exclusive:=True;
TB.EmptyTable;
TB.BatchMove(DM1.Qu1,batAppend);
TB.Active:=flag;
DM1.Qu1.SQL.Clear;
DM1.Qu1.Close;
DeleteFile(st0);
end;



Страницы: 1 вся ветка

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

Наверх





Память: 0.66 MB
Время: 0.035 c
14-283
valler
2002-02-17 00:22
2002.04.01
У кого есть файл Proxies.pas?


4-342
kiber
2002-01-31 01:17
2002.04.01
win api


3-1
volodya_
2002-03-05 09:17
2002.04.01
Как в Qreport-е посчитать сумму значений по каждой странице?


14-306
Виктор Щербаков
2002-02-19 09:40
2002.04.01
Площадь многоугольника


7-334
netter
2001-12-29 17:26
2002.04.01
getusername





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский