Topic: Поиск по всей БД одним полем.

Добрый день, Дмитрий. Вопрос в следующем:
Как можно реализовать поиск по всей БД, имея только одно поле Edit и несколько чекбоксов? Т.е с помощью чекбокса отмечается в каких полях искать. Во всех примерах несколько полей Edit и поиск в них осуществляется только в связанных с ним таблицами.

Также вопрос относительно хранения файлов в самой БД. Я так понимаю это не очень хорошо, и могут возникнуть проблемы с быстродействием в дальнейшем. Как сделать, чтобы при загрузке файла они сохранялись только в определенном указанном каталоге? Спасибо.

Re: Поиск по всей БД одним полем.

Приветствую,


Это можно реализовать с помощью кнопки с действием SQL запрос, сделал для вас проект с примером.



У таких компонентов как DBFile и DBImage есть свойство Type, установите его значение LinkFile
т.о. в базе будет храниться только ссылка на файл.


Также есть свойство CopyTo, в котором вы можете указать папку, куда файлы будут скопированы, подробней об этом свойстве можно прочитать здесь: http://myvisualdatabase.com/help_ru/com … opyto.html

Post's attachments

Attachment icon Employees search by one field ex.zip 6.38 kb, 465 downloads since 2015-12-13 

Dmitry.

Re: Поиск по всей БД одним полем.

Я Вас понял. Как раз только заметил это свойство. Но устанавливая значение на LinkFile, пропадает возможность сохранять файл. Если база расположена в локальной сети, то файл с твоего ПК будет уходить в папку с загрузками на сервер, и в принципе, в случае с локальной сетью до этого файла будет можно добраться, открыв каталог или в принципе сам файл. А как быть если база расположена где то на хостинге, и такого доступа,как в локальной сети, к файлу получить нельзя, допустим только по фтп. Можно ли как то решить этот вопрос? За пример спасибо.

Re: Поиск по всей БД одним полем.

Вы используете СУБД MySQL ? или SQLite для проекта?

Dmitry.

Re: Поиск по всей БД одним полем.

MySQL

Re: Поиск по всей БД одним полем.

К сожалению для MySQL пока не реализована такая возможно, т.к. для этого действительно нужен какой то сторонний способ загрузки файла на сервер, например как FTP, на сколько я знаю, средствами MySQL это не реализовать.

Dmitry.

7 (edited by memult 2015-12-13 18:04:07)

Re: Поиск по всей БД одним полем.

Ну а если все таки база лежит в локальной сети, и доступ к файлу можно получить уже свободно, скачать файл все равно не получится?  Тут уже ничего не зависит от выбранной СУБД. Просто пункт save file отсутствует, когда свойство стоит LInkFile. Получается, что файл лежит на другой машине, в каталоге files, а ты уже скачиваешь его на свой ПК с локального сервера.

Re: Поиск по всей БД одним полем.

В свойство компонента CopyTo вы можете указать сетевой путь к папке (с правом записи), в которой будут сохраняться все файлы
например \\PCNAME\SharedFolder


но перед этим пожалуйста скачайте последнюю  бета версию, т.к. пришлось исправить одну ошибку, связанную с возможностью указать сетевую папку в данном свойстве при использовании MySQL
http://myvisualdatabase.com/download/se … 20beta.zip


Пункт Save file будет доступен, когда в базе будет сохранен файл, чтобы его сохранить, необходимо нажать на левую иконку в компоненте DBFile.

Dmitry.

9 (edited by memult 2015-12-13 19:52:45)

Re: Поиск по всей БД одним полем.

Спасибо за помощь. Т.е в любом случае когда стоит тип LinkFile сохранить файл не получится и это только для StoreFile?

Re: Поиск по всей БД одним полем.

memult wrote:

Спасибо за помощь. Т.е в любом случае когда стоит тип LinkFile сохранить файл не получится и это только для StoreFile?

Почему не получится? получится, что именно у вас не получается?

Dmitry.

Re: Поиск по всей БД одним полем.

Под левой иконкой в компоненте DBFile. что подразумевается? Там две иконки, одна открыть(левая) и иконка дискеты(правая). Когда стоит тип Link то при нажатии на дискету варианты либо открыть, либо открыть каталог. Может я не так Вас понял?

Re: Поиск по всей БД одним полем.

Левая иконка предназначена для выбора файла, который необходимо сохранить в базу данных.
Правая иконка позволяет открыть файл, сохраненный в базе данных, либо открыть папку, где был сохранен файл.

Dmitry.

13 (edited by memult 2015-12-13 21:31:32)

Re: Поиск по всей БД одним полем.

Ну это очевидно) Мы не можем понять видимо друг друга. Вы писали что с типом LinkFile можно также сохранять файл, но пунк save отсутствует при таком типе, но он присутствует при типе storeFile, т.е когда файл сохраняется прямо в бд. Таким образом когда стоит LinkFile(когда файл хранится на диске, а не в бд) файл можно только открыть. А мне нужно сохранить. Можно в теории сохранить его после открытия, например pdf, ткнув сохранить как, но хотелось бы сразу сохранять его к себе на диск (в случае если файл хранится на другом компьютере в локальной сети)Речь идет уже о случае, когда файл был загружен и уже имеется запись, к примеру имя, фамилия и его анкета (файл). Потом эта запись ищется, нажимается кнопка подробно, высвечивается вся информация о этой записи и здесь уже ситуация, как я описал в начале сообщения. И под словом сохранять я подразумевал загрузить(на диск) а не как записать его в бд.

Re: Поиск по всей БД одним полем.

Так что же именно у вас не получается?
когда установлен тип LinkFile, в базе данных сохраняется только ссылка на файл, поэтому его нельзя сохранить на диск, т.к. он уже есть на диске, поэтому его можно либо просто открыть, либо открыть папку, где он расположен.

Dmitry.

Re: Поиск по всей БД одним полем.

Ну я и говорю, это просто для удобства. Ведь если файл лежит на диске другого локального компьютера, то будет удобнее его просто сохранить уже на диск на своем компьютере) т. е по сути перекачать с одного пк (сервер) на другой (с которого запускается программа) а с типом линк это сделать не удается.

Re: Поиск по всей БД одним полем.

При необходимости это можно реализовать скриптом (функция CopyFile), который скопирует с локального компьютера на свой компьютер.

Dmitry.

Re: Поиск по всей БД одним полем.

Добрый день, Дмитрий. Если у Вас есть пару минут, посмотрите проект в приложении. Проблема, как я понимаю, в SQL запросе. Не получается привести его в нормальный вид. Он не отображает записи, как должен. Если его не использовать, и подгружать автозапросом данные в таблицу, то они вроде как отображаются. Но, при нажатии кнопки добавить запись - поле с Email уже заполнено старым значением. Вкладка Люди-какой частотный диапазон интересует, содержит список значений и поле "Другое" относится также к нему, и по идее заполняется тогда, когда не одно из значений из списка не подходит. Если не сложно, посмотрите структуру таблиц, возможно есть более лучший способ реализовать это. Спасибо.

Post's attachments

Attachment icon BD_QST.zip 598.12 kb, 452 downloads since 2015-12-14 

Re: Поиск по всей БД одним полем.

на форме Люди, в настройках компонента table_email снимите галочку "Включить автовыполнение запроса"
тогда в данном гриде будут отображаться емейлы только принадлежащие для данной записи.


также SQL запрос для вывода данных в грид на форме "Поиск" составлен неправильно, пожалуйста не используйте SQL запросы без необходимости, т.к. для их использования необходимы соотвествующие познания.


Вместо этого используйте кнопку с действием "Поиск".

Dmitry.

Re: Поиск по всей БД одним полем.

Выше Вы отвечали, что для использования общего поиска по всей БД и соответственно одной строки поиска нужно использовать SQL запрос, и прилагали пример. Можно узнать где именно ошибка в запросе?

Re: Поиск по всей БД одним полем.

в SQL запросе вы просто перечислили все таблицы

From person
,phone
,Email
,Diapazon_f
,Appparat

вместо этого необходимо их правильно объединить

Select
person.ФИО
,person.Должность
,person.Организация
,person.Интерес
,person.Потребность
,person.Финанс
,person.Откуда_узн
,person.Доп_инф
,person.Доп_запр_инф
,person.Договоренность
,phone.Телефон
,Email.Электронная_почта
,Diapazon_f.diap_f
,Appparat.Аппарат_мс

From person

LEFT OUTER JOIN Diapazon_f ON Diapazon_f.id=person.id_Diapazon_f
LEFT OUTER JOIN Appparat ON Appparat.id=person.id_Appparat
LEFT OUTER JOIN phone ON phone.id_person=person.id
LEFT OUTER JOIN Email ON Email.id_person=person.id
Dmitry.

Re: Поиск по всей БД одним полем.

Спасибо,про объединение не знал. Результат отображается корректно. Единственное, что при попытке нажать показать запись (кн.подробно) появляется сообщение не удалось определить идентификатор записи, с чем может быть связана эта ошибка?

Re: Поиск по всей БД одним полем.

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

Dmitry.

23 (edited by memult 2015-12-14 13:17:03)

Re: Поиск по всей БД одним полем.

Вы говорите элементарные вещи). Ни даблкликом,ни кнопкой показать запись ( с выделенной записью) не открывается вторая форма  и выскакивает данная ошибка.

UPD: Нужно было в запросе добавить выбор по id.

Спасибо за помощь,еще раз.

Re: Поиск по всей БД одним полем.

Точно, нужно было добавить id в SQL запросе )

Dmitry.

Re: Поиск по всей БД одним полем.

Добрый день, Дмитрий. Вопрос касаемо объединения двух столбцов в SQL. Конструкция следующего типа в запросе MySQL:

CONCAT(Diapazon_f.diap_f, ' ' ,person.drugoe_f) AS F

Объединяет нормально, с выводом через пробел. Но если какое либо из значений Diapazon_f.diap_f или person.drugoe_f не заполнено, то выводится пустая ячейка. Пробовал через || - тоже самое. Можете ли подсказать, как решить эту проблему?