Форум: "Базы";
Текущий архив: 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.52 MB
Время: 0.005 c