Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 23.07.2018, 16:50   #1
Skyhawk
 
Регистрация: 25.04.2018
Сообщений: 4
Репутация: 10
По умолчанию Вывод отдельных полей из таблицы

Пишу что-то вроде словаря. Есть таблица с полями "Слово" "Произношение" "Перевод" и поле с картинкой. К этим полям привязаны DBEdit'ы, DBMemo и DBImage. Если использовать DBGrid и вручную перемещаться по записям, все связанные компоненты работают, но надо сделать без DBGrid и перемещаться по таблице программно.
Надо все записи из поля "Слово" добавить в ListBox или ListView, а при выделении итема, по индексу/номеру записи вывести в компоненты уже полную инфу. Количество записей я нашел - ADOTable1.RecordCount, а как мне получить все записи из конкретного поля? И можно ли по индексу/номеру записи считать данные из всех полей и каким методом?
Skyhawk вне форума   Ответить с цитированием
Старый 23.07.2018, 17:03   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,614
Репутация: 5352
По умолчанию

если использовать обычные LsitBox / ListView - то при заполнении данными сохранять и ключевое поле (например, Integer в свойство TListItem.Tag )
потом, в событии выбора брать этот ключ и по нему получать данные из датасета.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 23.07.2018, 18:48   #3
Skyhawk
 
Регистрация: 25.04.2018
Сообщений: 4
Репутация: 10
По умолчанию

есть индексное поле-счетчик Index специально для того чтобы можно было по номеру записи обращаться к данным имеющим одинаковое значение. Я нашел два метода один для поиска, другой для перехода между записями:
поиск всех записей и добавление в ListBox -

procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
res:Variant;
begin
i:=ADOTable1.RecordCount;

for i := 1 to ADOTable1.RecordCount do
begin
res:=ADOTable1.Lookup('Index',IntTo Str(i),'Word');
if not VarIsNull(res) then
begin
ListBox1.Items.Add(VarToStr(res));
end else ShowMessage('Error');
end;
end;


поиск и "установка курсора" на запись для вывода данных в компоненты, привязанные к полям таблицы. Список не сортированный, поэтому номер итема+1 будет индексным номером записи -

procedure TForm1.ListBox1Click(Sender: TObject);
begin
if ListBox1.ItemIndex<>-1 then
begin
if not AdoTable1.Locate('Index',IntToStr(L istBox1.ItemIndex+1),[]) then ShowMessage('Не найдено.');
end;
end;


Правильно ли использовать эти методы либо это кривая затея и есть способ лучше?
Skyhawk вне форума   Ответить с цитированием
Старый 23.07.2018, 18:54   #4
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,614
Репутация: 5352
По умолчанию

Цитата:
Сообщение от Skyhawk Посмотреть сообщение
.Locate('Index
в таблице (выборке) есть уникальное поле Index ?
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 23.07.2018, 20:40   #5
xxbesoxx
Профессионал
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Адрес: Грузия Рустави
Сообщений: 1,290
Репутация: 672
Отправить сообщение для xxbesoxx с помощью Yahoo
По умолчанию

Цитата:
Сообщение от Skyhawk Посмотреть сообщение
Пишу что-то вроде словаря. Есть таблица с полями "Слово" "Произношение" "Перевод" и поле с картинкой.
На некоторый языке на одну слову - может будет (несколько слов перевода)
-- На пример как на Русском языке обращение к мужчине и женщине (Он - Она) а на некоторый языке нету такого.
Для этого я бы на Tab_1 оставил поля (id=PK, Слово) и на Tab_2 (id, Перевод, Произношение, FK) связь между ними один ко многим
Цитата:
Сообщение от Skyhawk Посмотреть сообщение
а как мне получить все записи из конкретного поля?
Заменил бы AdoTable на AdoQuery и работал через SQL-запрос
__________________
E_MAIL: rijgvina7@yahoo.com
xxbesoxx вне форума   Ответить с цитированием
Старый 23.07.2018, 22:15   #6
Skyhawk
 
Регистрация: 25.04.2018
Сообщений: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
в таблице (выборке) есть уникальное поле Index ?
Да есть, именно для доступа по номеру записи к данным одинаковыми значениями.
Теперь вопрос - корректно ли мое решение или есть способ лучше, с SQL например? Если встраивать функцию быстрого поиска наверное SQL грамотнее использовать будет?

Последний раз редактировалось Skyhawk; 23.07.2018 в 22:18.
Skyhawk вне форума   Ответить с цитированием
Старый 24.07.2018, 01:00   #7
Sciv
Профессионал
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Адрес: Курган
Сообщений: 3,219
Репутация: 1231
По умолчанию

Цитата:
Сообщение от Skyhawk Посмотреть сообщение
Если встраивать функцию быстрого поиска наверное SQL грамотнее использовать будет?
Если у Вас на всё одна таблица - достаточно просто использовать Filter, не привлекая SQL
__________________
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума   Ответить с цитированием
Старый 24.07.2018, 01:36   #8
Skyhawk
 
Регистрация: 25.04.2018
Сообщений: 4
Репутация: 10
По умолчанию

Спасибо всем.
Skyhawk вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Консолидация отдельных полей отдельных файлов на один лист Paramount Microsoft Office Excel 15 30.01.2013 17:41
Вывод значений полей таблицы в текстовые поля Умагаджи SQL, базы данных 2 27.08.2012 22:58
Очищение отдельных Edit полей. Mrsqler Общие вопросы Delphi 9 25.03.2012 19:29
Access ограничить значение поля таблицы значениями полей другой таблицы Сергей089 Microsoft Office Access 10 08.12.2010 03:22
Как выводить значения отдельных полей таблицы при выборе записи в DBGrid Sinker БД в Delphi 9 25.03.2009 13:28


14:27.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru