|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
|
RAD XE3+ Где лучше хранить большую текстовую базу?09.09.2023, 10:35. Показов 6344. Ответов 86
Здравствуйте!
Столкнулся с проблемой. У меня есть база в Memo1 -занимает 100 000 строк. Ищет в случае обращения поиском по данному мемо если всё хранить в нёпочемуто долго, а если рядом созраняю с прогой текстовый файл и ищу по нему то тоже долго, есть ли какойто быстрый вариант для работы с бальшими базами данных именно в Delphi? Спасибо за ответ(ы). С уважением, Денис.
0
|
|
| 09.09.2023, 10:35 | |
|
Ответы с готовыми решениями:
86
Где лучше хранить данные
Где лучше всего хранить базу данных больших размеров ? |
|
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
|
||||||
| 19.09.2023, 19:53 | ||||||
|
В общем с этим файлом конечно беда, но после доработки напильником все же получилось. Прикрепляю допиленный файл и скрипт который его в SqLite импортирует. Импортирует кстати очень быстро.
TIR.rar
1
|
||||||
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
||
| 20.09.2023, 02:59 [ТС] | ||
|
1. Итак база tir.db3 создана; Остались 2 пункта: 2. Как добавить её в Delphi? 3. Какой командой произвести поиск строки, которая содержит например слово Москва и взять эту строку в текстовую переменную (дальше понятно)? п.с. у меня ощущение что это будет намного быстрее чем работа с 80 000 строками из мемо ) Господи хоть бы всё получилось! С уважением, Денис.
0
|
||
|
Модератор
|
|||||||||||||||||||
| 20.09.2023, 07:46 | |||||||||||||||||||
0
|
|||||||||||||||||||
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,658
|
|
| 20.09.2023, 11:50 | |
|
С БД невозможно работать не зная принципов организации БД. Ну конкретно в нашем случае реляционных БД. Т. е. ключи, индексы, отношения (хотя понять их формальные определения в той же Вики без бутылки невозможно), хотя бы базовые операторы SQL (про Transact SQL не говорю, для встраиваемых в ПО SQL-запросов его можно обойти средствами работы со строками самого ЯП, хотя SQL-пуристы скажут, что я нубас и ничего не понимаю), транзакции, механизмы обслуживания используемой СУБД.
0
|
|
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
||
| 22.09.2023, 15:16 [ТС] | ||
Так как воз и ныне там, обращаюсь к Вам друзья! 1. tir.db3 создана, надо ли заливать наш файл в программу или работать с ним отдельно-лежащим? 2. Какие компоненты добавить на форму? По использованию запросов SQL разобрался. Но чтобы делать запросы SQL я совсем запутался, надо же подтянуть рядом лежащий файл базы или добавить его в программу в таблицу чтбы уже к ней обращаться с запросами, и вот тут я завис если чесно... Подскажите пожалуйста как базу именно *.db3 добавить в прогу? С уважением, Денис.
0
|
||
|
|
|
| 22.09.2023, 16:51 | |
|
ничего не понял. все на видео которые я присылал вроде есть?
бд лежит в файле. при старте программы компонент FDConnection настраивается на файл БД и подключается к ней. остальные компоненты подключаются к FDConnection в том числе запросы FDQuery если надо что-то запросить из базы, составляем запрос, при работе программы задаем в нем условия и открываем. Датасет (в данном случае например FDQuery) закачивает выбранные данные из БД в программу. Эти данные можно посмотреть например подключив к нему Datasource и далее DBGrid или любые другие DB-компоненты. Или просто в программе бегать по датасету и брать данные из полей датасета. Вот еще одно видео, на русском. С середины где-то Совцов подробненько кидает компоненты на форму и запускает запрос. https://www.youtube.com/watch?v=Scljb5TtR4k
1
|
|
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,658
|
|
| 22.09.2023, 17:31 | |
|
Вообще любая работа с БД начинается с загрузки в компонент соединения настроечных параметров для подключения. В случае FireDAC - это обычный TStrings с параметрами, что туда прописывается при настройке в редакторе можно посмотреть. Могут быть необязательные параметры, например, язык. Т. к. в зависимости от языковых настроек форматы даты\времени, десятичной точки в запросах могут быть разными. Я, например, всегда использую с MS SQL Server формат времени yyyy.MM.dd.
БД может быть файлом, может быть сервером с адресом, именем базы, возможно, методами аутентификации, логином, паролем. Под каждый тип базы это надо прописывать отдельно, посмотрев, как настроено в редакторе. Компонент соединения при запуске программы должен быть отключен. В противном случае он после запуска полезет по настройкам, которые вы указали на свою отладочную базу. И не найдет ее, прога зависнет, пока не будет таймаута, или найдет, но это еще хуже, т. к. ошибку сразу не видно. При этом любые операции с визуальными компонентами, требующие подключения к БД, например, запрос списка полей, или проверка правильности запроса, автоматически включают соединение. Я для борьбы с этим просто сразу при создании дата-модуля проверяю на активность соединения, и если включено, то прога сразу завершается с сообщением "Закрой соединение". После настройки соединения уже можно делать соединению Connected:=True и открывать необходимые датасеты, желательно, в правильном порядке. Хотя если у вас есть связь по lookup-полям, то lookup-датасет откроется автоматом. Так же в FireDAC по умолчанию соединение возвращает только 50 записей, если это неудобно, т. к. TFDQuery.RecordCount показывает фуфло, то можно переключить FetchMode в fmAll. Добавлено через 18 минут Вообще принципы работы, что FireDAC, что ADO (категория компонентов dbGo), что IBExpress схожи. У вас есть компонент соединения к которому подключаются компоненты наборов данных, к этbм компонентfv подключается прокладка в виде компонента DataSource, и к ней подключаются визуальные компоненты, например DBGrid, или DBLookupComboBox, последний настраивается на 2 Datasource, если пишет данные и на один если нужно только показывать список. В этом плане можно почитать даже старые книги, вышедшие еще до FireDAC. Если показывать не нужно, или показывать нестандартным способом, то делается проход по датасету методами First, Next и т. п. Правда еще есть закладки, метод Locate, фильтры на датасете, индексы датасета. В общем у датасета есть курсор, показывающий активную запись в нем. Ее можно редактировать, удалять, вставлять новую запись с переходом курсора на нее.
1
|
|
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
|
| 23.09.2023, 01:58 [ТС] | |
|
Благословенного вечера!
Сделал: 1. бд лежит в файле. при старте программы компонент FDConnection настраивается на файл БД и подключается к ней. 2. остальные компоненты подключаются к FDConnection в том числе запросы FDQuery 3. Несколько раз пересмотрел видео, подсмотрел код, проанализировал, многое стало понятно. Запускаю ни в DBGrid, NextDBGrid, StringGrid нигде немогу отобразить бузу из списка. Ладно думаю зачем мне визуально её видеть можно же просто взаимодействовать, ну а пытаясь взаимодействовать вобще завал. Ругайте, обзывайте если Вам это приносит удовольствие, но помогите понять остальную последовательность: 1. Есть файл базы test.db3 2. Добавил путь к нему в FDConnection1 3. Все компоненты попереподключал междусобой (тут вопрос, в моём случае какие компоненты нужны чтобы лишние не бросать на форму?) 4. Правильными командами/запросами SQL вооружился 5. ... и дальше я зависаю, это нужно увидеть хотябы один раз или понять .Подтолкните пожалуйста, что делать дальше? Напишите пожалуйста коротко, сделай 1,2,3 .. С уважением, Денис.
0
|
|
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,658
|
|
| 23.09.2023, 08:37 | |
|
Если у тебя в дизайнере подключилось без ошибок, то после того, как включишь FDQuery.Active с правильным запросом у тебя в привязанном к нему DBGrid'е должно отобразиться его содержимое. Стандартная первая проверка на то, что настройка на тестовую базу и связей м/у компонентами.
Могу пустой шаблон для FireDAC дать, на котором сам, обычно, начинаю работать. Правда, там линки на несколько моих юнитов. FormReports просто удали из проекта и все обращения к нему, он пустышка.
0
|
|
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,658
|
|
| 23.09.2023, 08:40 | |
|
В нем грид настроен на QMain, остальные 2 FDQuery пустые. Ну и еще там есть ключ для XOR шифровки пароля. Так се защита, конечно, на 10 минут, умеющему в отладчик, ну какая есть. Обычно, я его в новом проекте перебиваю, а потом просто заново ввожу в форме подключения пароль.
0
|
|
|
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
|
|
| 23.09.2023, 11:04 | |
|
Для отладки приложения с SQLite в Delphi, вам надо изменить свойство подключения LockingMode на Normal
Если этого не сделать, то при запуске приложения из IDE, вы получите ошибку подключения к БД.
0
|
|
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
||
| 23.09.2023, 22:06 [ТС] | ||
|
Запустил біло несколько ошибок какието поборол но єти две остались ... юнитов таких файлов, может пару файлов гдет у Вас остались или мне добавить чтото.. погуглил пишут что єто чтото от старой версии ФаерДака у меня видимо новая последняя версия плюс делфи 11.3...
С остальным работаю только с работы пришел а тут инфы новой столько. Сейчас попробую реализовать вот этот фрагмент рекеомендации:
0
|
||
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
|
| 23.09.2023, 22:10 [ТС] | |
|
А еще, какой минимум компонентов должен быть чтобы всё работало?
я уверен что вот столько ненужно ..
0
|
|
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,658
|
|
| 23.09.2023, 22:37 | |
|
Версия не имеет особого значения. Можно просто конвертнуть на месте. FireDAC вообще появилась довольно поздно, в XE4, кажется.
Минимум компонентов: TFDConnection, TFDQuery, TFDGUIxWaitCursor, (эта штука просто бросается в проект, она нужна для предотвращения зависаний) TDataSource, если есть линки к визуальным компонентам. TAvgClassifierForm - это моя стандартная форма для таблиц справочников, обеспечивающая минимальный интерфейс, редактирование в сетке, редактирование в форме, если таковая назначена, поиск в столбцах, переключение между таблицами, для FireDAC сортировка на датасете, если определены нужные индексы. Avg мой личный префикс имен библиотек и компонентов, сокращение от Avenger, в честь юнита, лазерной зенитки из C&C Generals Zero Hour.
0
|
|
|
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
|
||
| 23.09.2023, 22:46 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
||||||
| 23.09.2023, 22:52 [ТС] | ||||||
|
----------------------------------------
Создал проэкт. Ребята, ну вот что не так смотрите: 1. Есть файл test.db3; 2. Подключил путь к файлу в FDConnection1; 3. Добавил компоненты: FDConnection1, FDQuery1, FDLocalSQL1, DataSet1, FDUpdateSQL1 (незнаю надо ли все добавлять или чтото ненужно или чегото нехватает); 4. Добавил на форму DBGrid и подключил к нему DataSet1; 5. Добавил кнопку и в неё прописал:
Попробовал поставить галочку активейт на FDConnection начал пароль требовать которого и нет у меня нигде: ************************ Я получил от Вас друзья большой пакет знаний, но наверное пока сам не увидешь как оно должно выглядеть на самом деле, не поймёшь всех тонкостей, я тогла вникну во все настройки, проанализирую. А сейчас у Нас как на поле чудес викторина, вот куча подсказок, угадай как оно должно быть на самом деле ) Ребята, извините ради Б*га, но может ли кто-нибудь создать образец, с минимальным колличеством компонентов для отображения приложеной ниже таблицы/базы городов (tir.db3) и кнопкой по нажатию на которую найдётся строка с например городом "Москва" с занесением этой строки в переменную типа string? С уважением, Денис.
0
|
||||||
|
1074 / 514 / 41
Регистрация: 05.05.2022
Сообщений: 3,658
|
|
| 23.09.2023, 23:01 | |
|
А пароль вы должны задать в СУБД. И чтобы не спрашивало при каждом коннекте нужно отключить свойство LoginPrompt у коннекшена. Я работал только с MS SQL Server, Access, Excel и Interbase, у Access с Excel, по умолчанию, никаких ограничений нет, у MS SQL Server всегда есть системный пользователь sa, пароль к нему и возможные режимы подключения (он может через юзера винды аутентификацию делать) задаются обязательно еще при установке, у Interbase всегда по умолчанию есть админ SYSDBA с паролем masterkey. Какой администратор и какой у него пароль по умолчанию смотрите в справке по вашей СУБД.
0
|
|
|
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
|
|||||||||||
| 24.09.2023, 12:45 | |||||||||||
|
1. Добавьте на форму компонент FDConnection1 и для него установите свойства:
LoginPrompt := False; Params.DriverID := SQLite; Params.Database := 'D:\Work\tir.db3'; Params.LockingMode := lmNormal; 2. Добавьте на форму компонент FDQuery1 и для него установите свойства: SQL := 'select * from City where name=:name'; Params.Name := 'Москва'; 3. Добавьте на форму компонент DataSource1 и для него установите свойство: DataSet := FDQuery1; 4. Добавьте на форму компонент DBGrid1 и для него установите свойства: DataSource := DataSource1; 5. Установите свойство FDQuery1.Active := True; Все. Добавлено через 1 час 27 минут И вот еще какой нюанс работы с SQLite. SQLite не поддерживает некоторые функции работы с русским языком, а потому эту проблему приходится решать добавлением своей функции, для этого надо: 6. Добавьте на форму компонент FDPhysSQLiteDriverLink1 7. Добавьте на форму компонент FDSQLiteFunction1 и для него установите свойства: ArgumentsCount := 1; DriverLink := FDPhysSQLiteDriverLink1; FunctionName := LoCase; Создать обработчик события OnCalculate и там написать такой код:
После этого можно в тексте SQL запроса использовать функцию LoCase:
1
|
|||||||||||
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 134
|
|
| 24.09.2023, 20:56 [ТС] | |
|
Благословенного времени суток!
Уууухххх .... спасибо Ребята от всей Души!!!! Господин Пытливый Вы очень мудрый, хладнокровный и благородный Человек! Спасибо. Что Мы имеем: 1. Создал форму. 2. Добавил все перечисленные выше компоненты (подключил их и прописал везде всё правильно, будем считать так). 3. Добавил DBGrid и подключив его появились колонки данных из файла tir.db3, у каждой колонки появилось название. 4. Добавил дополнительную часть FDPhysSQLiteDriverLink1 и т.д. считаем что всё идеально ..... Однако, задача у нас стоит следующая. Как Мы помним нам надо получить например из 55 строки данные .. но перед этим найти их. Тепер новые вопросы: 1. Надо ли отображать всю базу городов в таблице DBGrid или искать не добавляя в DBGrid думаю что быстрее будет не добавляя 2. Как по нажатию на кнопку найти строку где будет город Москва, любую первую попавшуюся и поместить данные из этой строки в пеерменную x (x := id + name + lot+ ...)? Покачто я попытался отобразить в таблице всю базу скорее всего неправильно и у меня появилась разумеется ошибка .. ************************** Осталось понять как должэна выглядеть команда поиска строки с ключевым словом и помещение искомого в переменную или ряд пеерменных .. и тогда я проведу эксперимент добавив в основную программу Наше творение и появится понимание того насколько быстрее работать с БД SQL в чём я уже не сомневаюсь, но осталась вишенка на торте это команда поиска искомой строки и добавление в переменную/ые. **** С меня в конце отчет по скорости, исходник творения и полный отчёт для будущих поколений. BAZA_DB_TIR.rar Исходник покачто имеющегося творения. Нужно только указать верный путь к tir.db3 который я поместил в корень архива. **** С уважением, Денис.
0
|
|
| 24.09.2023, 20:56 | |
|
Как и где хранить текстовую информацию для программы тестирования? Как лучше хранить большую корзину (больше 140-170 товаров)? Как лучше сделать большую базу данных? Где хранить базу данных? Где лучше хранить информацию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|