imho.ws |
![]() |
![]() |
![]() |
# 21 |
Full Member
Регистрация: 30.07.2004
Адрес: Санкт-Петербург
Пол: Male
Сообщения: 544
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Я решил не заморачиваться с файлами и загнал все данные в базу данных. Так, возможно, и работать быстрее будет. А информация насчёт путей всё равно полезная. Тем более, что в интернете по этому вопросу практически ничего нет.
|
![]() |
![]() |
# 22 |
Full Member
Регистрация: 30.07.2004
Адрес: Санкт-Петербург
Пол: Male
Сообщения: 544
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Вроде бы всё работает, разве что напрягает, что данные записываются в конец базы данных ("Append();"). Чтобы данные записывались сразу по сортировке хотел написать следующий код:
Код:
Table1->First(); while (!Table1->Eof) {if (Table1->Fields->FieldByName("Author")->AsString<author2) {Table1->Cancel(); Table1->Next();} else {Table1->Insert(); Table1->FieldByName("Author")->AsString=author1; Table1->Post(); return;} } |
![]() |
![]() |
# 23 |
Advanced Member
Регистрация: 12.05.2004
Пол: Male
Сообщения: 482
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
сравнение должно работать со строками (как я понимаю тут AnsiString)
к сожалению, из приведенного куска кода не ясно что такое author1 и author2, но предполагаю, что в сравнении и присвоении все же должна быть одна и та же переменная ![]() проверь это, может все и дело в том что не с той переменной сравниваешь?
__________________
Этот мир для таких, как мы, Этот мир обречен на нас, Но реальность не изменить, И живем мы в ней здесь и сейчас. (C) С.Маврин |
![]() |
![]() |
# 27 |
::VIP::
Регистрация: 19.03.2004
Сообщения: 1 329
![]() ![]() ![]() ![]() |
Вообще какое-то странное занятие пытаться писать данные в БД в порядке сортировки. Никогда нельзя быть уверенным как БД физически сохранит запись. Нужно пользоваться сортировкой при выборке данных, или задавать ее уже в визуальных компонентах.
|
![]() |
![]() |
# 28 | ||||
Full Member
Регистрация: 30.07.2004
Адрес: Санкт-Петербург
Пол: Male
Сообщения: 544
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
![]() Цитата:
![]() Во всяком случае на данный момент сортированность данных не нарушается, и это для меня самое главное. Единственное, что мне сейчас не нравится - что при данном написании кода "Толстой" (с большой буквы) записывается в базу перед "достоевским" (с маленькой буквы). Т.е. при сравнении строк идёт проверка в следующем порядке: сначала идут заглавные латинские буквы "A-Z", затем прописные латинские буквы "a-z", затем идут заглавные русские буквы "А-Я" и уже в конце идут прописные русские буквы "а-я". Мне же хотелось, чтобы заглавные и прописные буквы расценивались одинаково. Т.е. на данный момент записи хранятся в следующем виде: Цитата:
Цитата:
|
||||
![]() |
![]() |
# 29 |
::VIP::
Регистрация: 19.03.2004
Сообщения: 1 329
![]() ![]() ![]() ![]() |
Emelman, нельзя обсуждать эти вопросы не зная конкретную используемую СУБД. Тут надо думать не на уровне программы, а на уровне СУБД.
Если это какая-то элементарная файловая БД типа .dbf, то вполне возможно что ее драйвер позволяет физически втиснуть новую запись между двумя старыми, при этом, что естественно, ему придется физически перечитать и перезаписать со сдвигом на диск всю часть файла-БД после этой новой записи, что несет большие накладные расходы. В серьезных же СУБД, типа MS SQL Server / Oracle такого не происходит. Единственный язык, который они понимают - это SQL, который для записи новых данных использует только одну команду - INSERT, без всякого указания места, куда эту запись вставить. Только сервер решает куда она физически будет записана, и это вполне может оказаться вообще другой диск, если так сконфигурирована база. Соответственно при следующей выборке данных трудно говорить о порядке и полагаться на что-то. Для достижения нужного результата лучше самому указывать сортировку по некому признаку. Что касается сортировки по умолчанию и сравнения строчных и прописных букв - это опять же настройки collation конкретного драйвера/СУБД, хотя указывая сортировку в SQL-запросе всегда можно задать и свои условия, что-то типа ORDER BY UPPER(Name). |
![]() |
![]() |
# 30 | |
Full Member
Регистрация: 30.07.2004
Адрес: Санкт-Петербург
Пол: Male
Сообщения: 544
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Я писал данную программу с вашей помощью и помощью нескольких книг типа "C++ Builder для начинающих". Как в книгах было написано про простую базу данных, так я её и создал. А именно: Запустил "BDE Administrator" и создал в нём базу данных с характеристиками:
Цитата:
![]() |
|
![]() |