Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.03.2009, 18:54
BlackEvil BlackEvil вне форума
Прохожий
 
Регистрация: 11.03.2009
Сообщения: 9
Репутация: 10
По умолчанию Delphi 2007 & ADO & Access

Приветствую.
Прошу помочь по дельфи...
Возникла такая проблема:
Необходимо сделать программу-базу медикаментов с описаниями. Пользователь её открывает, вводит в поле название медикамента и получает его описание в отдельной форме.
Версия дельфи у меня CodeGear Delphi 2007, поэтому с BDE очень геморно. Решил использовать связку ADO&MSACCESS.
Написать за меня программу не прошу, только подкинуть пару советов
Базу создал (База: Медикаменты. Поля: Название и Описание).
На поле кинул: ADOConnection, ADOQuery, DataSource и DBText для отображения информации. Ну и естественно один TEdit и TButton.
Обработчик кнопки сделал таким:
Цитата:
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT *');
ADOQuery1.SQL.Add('FROM Медикаменты');
ADOQuery1.SQL.Add('WHERE Описание LIKE '''+Edit1.Text+'%''');
ADOQuery1.Active:= true;
Поле Описание нормально выводится в DBText (параметры DataField и DataSource выставил).
Теперь сам вопрос:
Как сделать так, чтобы если по базе ничего не нашлось выводилось сообщение?
Нужно ли заморачиваться с программой, если придётся переносить её на другой компьютер, как это было с BDE? Или в случае с ADO нужно скопировать только программу и базу?
Заранее благодарен всем отписавшим)
Ответить с цитированием
  #2  
Старый 11.03.2009, 19:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,090
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. проверять свойство RecordCount у ADOQuery1
2. нет, надо будет только поменять строку подключения.
Ответить с цитированием
  #3  
Старый 11.03.2009, 19:35
BlackEvil BlackEvil вне форума
Прохожий
 
Регистрация: 11.03.2009
Сообщения: 9
Репутация: 10
По умолчанию

Цитата:
Поле Описание нормально выводится в DBText (параметры DataField и DataSource выставил).
Сорри, но не выводится оказывается
Поля в БЛ два:
Название и Описание
DataField у DBText выставил Описание.
Запрос у ADOQuery такой:
Цитата:
SELECT *
FROM Медикаменты
WHERE Описание LIKE '''+Edit1.Text+'%''
Например в поле Название есть значение "Форте", в поле Описание - "Повышает уровень мозгов в голове".
Если в Edit1 ввести Форте, то в DBText ничего не выводится. А если написать "Повышает" (т.е начало полного описания), то в DBText появляется полное значение поля Описание...
Быть может я запрос неправильно составил или значения не правильно выставил?
В дельфи опыта практически нет, поэтому прошу сильно не пинать
Цитата:
1. проверять свойство RecordCount у ADOQuery1
Большое спасибо, дальше сам загуглю
Ответить с цитированием
  #4  
Старый 12.03.2009, 07:27
BlackEvil BlackEvil вне форума
Прохожий
 
Регистрация: 11.03.2009
Сообщения: 9
Репутация: 10
По умолчанию

Допёр самостоятельно, из-за чего собственно и рад
Запрос должен быть таким:
Цитата:
SELECT *
FROM Медикаменты
WHERE Название LIKE '''+Edit1.Text+'%''
Ответить с цитированием
  #5  
Старый 12.03.2009, 07:34
BlackEvil BlackEvil вне форума
Прохожий
 
Регистрация: 11.03.2009
Сообщения: 9
Репутация: 10
По умолчанию

C RecordCount тоже разобрался:
Цитата:
if
ADOQuery1.RecordCount = 0
then
...
lmikle, Большое спасибо за помощь!
Ответить с цитированием
  #6  
Старый 13.03.2009, 19:34
BlackEvil BlackEvil вне форума
Прохожий
 
Регистрация: 11.03.2009
Сообщения: 9
Репутация: 10
По умолчанию

Следующая проблема появилась быстрее, чем я ожидал
В общем нужно сделать список всех медикаментов, которые находятся в базе (как слева в chemax, т.е поле с списком и вертикальным скроллом. При клике на одну из записей выводится информация из поля БД "Описание" в DBMemo).
Какой компонент лучше использовать для организации такого списка и можете привести примерчик функции, которая выведет все названия из поля "Название" в компонент?

Последний раз редактировалось BlackEvil, 13.03.2009 в 19:38.
Ответить с цитированием
  #7  
Старый 14.03.2009, 11:03
BlackEvil BlackEvil вне форума
Прохожий
 
Регистрация: 11.03.2009
Сообщения: 9
Репутация: 10
По умолчанию

Немного продвинулся
Для списка, насколько я понимаю, используют DbListBox.
Сделал так:
Цитата:
Form1.ADOQuery1.Active:=false;
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('SELECT *');
Form1.ADOQuery1.SQL.Add('FROM Медикаменты');
Form1.ADOQuery1.Active:= true;
for i:=0 to 0 do
dblistbox1.items.add(ADOQuery1.Fields[i].AsString)
Однако в DbListBox выводит только первое значение поля Название.
Что поставить в строке:
Цитата:
for i:=0 to 0 do
Чтобы в DbListBox выводились все значения поля Название?
Ответить с цитированием
  #8  
Старый 14.03.2009, 12:55
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Я смотрю вы тихо сами с собой разговариваете, и находите ответы на ваши вопросы. Может вам лучше ничего не подсказывать, вы сами все найдете?
Ответить с цитированием
  #9  
Старый 14.03.2009, 14:54
BlackEvil BlackEvil вне форума
Прохожий
 
Регистрация: 11.03.2009
Сообщения: 9
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Я смотрю вы тихо сами с собой разговариваете, и находите ответы на ваши вопросы. Может вам лучше ничего не подсказывать, вы сами все найдете?
Сейчас реально тупиковая ситуация
Не получается...Да и информации как таковой не нашел..
Буду очень признателен, если подскажете
Ответить с цитированием
  #10  
Старый 14.03.2009, 15:34
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Добро.
Если вы хотите выводить все строки вашего запроса возвращаемые скажем для столбца 0, то идет обход записей возвращенных запросом:

Вариант первый -через Form1.ADOQuery1.RecordCount получить количество записей.
Код:
1
2
3
4
5
6
7
8
9
10
11
for i := 0 to Form1.ADOQuery1.RecordCount-1
do begin
    dblistbox1.items.add(ADOQuery1.Fields[0].AsString);
    Form1.ADOQuery1.Next;
    end;
или же, что более правильно при работе с набором данных:
while not Form1.ADOQuery1.eof
do begin
    dblistbox1.items.add(ADOQuery1.Fields[0].AsString);
    Form1.ADOQuery1.Next;
    end;
Admin: Пользуемся тегами!

А вообще, я бы рекомендовал использовать для этих целей TDbLookupListBox, для него ничего ручками заполнять не требуется.

Последний раз редактировалось Admin, 14.03.2009 в 16:14.
Ответить с цитированием
  #11  
Старый 14.03.2009, 16:01
BlackEvil BlackEvil вне форума
Прохожий
 
Регистрация: 11.03.2009
Сообщения: 9
Репутация: 10
По умолчанию

Страдалецъ
Большое спасибо! Пашет
Цитата:
А вообще, я бы рекомендовал использовать для этих целей TDbLookupListBox, для него ничего ручками заполнять не требуется.
TDbLookupListBox ставил, но чего-то там нахимичил с дополнительными параметрами типа ListSource и работать не захотело))
Я честно говоря между ними разницу не усекаю(
Мне нужно, чтобы при клике на один из пунктов ListBox в поле DBMemo выводилась информация из поля "Описание". Насчет щелчка и его обработки думаю разберусь... А вот что лучше использовать DBListBox или DBLookUpListBox?
Ответить с цитированием
  #12  
Старый 14.03.2009, 16:10
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Разница в том, что TDBListbox - предполагает внесение в БД значения выбранного из пользовательского списка. Т.е. обычно список не хранится в БД.
А вот DBLookupListBox как раз заполняется данными из БД и выбранное значение потом можно занести в БД.
Вот и получается, что для вашего примера больше подходит DBLookupListBox
Ответить с цитированием
  #13  
Старый 14.03.2009, 16:38
BlackEvil BlackEvil вне форума
Прохожий
 
Регистрация: 11.03.2009
Сообщения: 9
Репутация: 10
По умолчанию

Ух ты
Насколько я понял он сразу согласовывает поля между друг другом (если указать параметры KeyField и ListField).
С скроллом и прочим разберусь сам, ибо информации полно)
Страдалецъ, большое спасибо за помощь!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:44.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025