Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2013, 13:55   #1
Ворсайден
Новичок
Джуниор
 
Регистрация: 30.04.2013
Сообщений: 5
Вопрос Поиск по БД Acsses

Доброго времени суток. Никак не могу организовать поиск по БД. Делаю курсовой проект. Тема: Русско-Английский переводчик. Имеется таблица в БД со столбцами: ru, eng. Нужно чтобы при нажатии на кнопку, считалось слово из Edit1, нашлась эта строка в столбце eng и в Edit2 вывелось слово-перевод из столбца ru, т.е из этой же строки, но из другого столбца. Пробовал через ADOTable и ADOQuery, функцией Locate, но не могу понять как выводить перевод в Edit2. Просмотрел множество сайтов и форумов, но так ничего и не нашел. Прошу помощи! Делал так:
Код:
procedure TForm3.Button1Click(Sender: TObject);
var
stolb, stroka: string;
begin
stolb:='eng';
stroka:=Edit1.text;
if not ADOTable1.Locate(stolb, stroka, []) 
then ShowMessage('Слово не найдено')
else Edit2.Text:=//и вот тут я не могу понять, что писать
end;

Последний раз редактировалось Ворсайден; 30.04.2013 в 14:02.
Ворсайден вне форума Ответить с цитированием
Старый 30.04.2013, 14:06   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

В армию, родину некому защищать.
eval вне форума Ответить с цитированием
Старый 30.04.2013, 14:31   #3
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

примерно (на коленке)
Код:
ADOQuery.Close;
ADOQuery.SQL.Text := 'SELECT stolb_ru FROM slovar WHERE UCASE(stolb_eng) = UCASE(:slovo)';
ADOQuery.Parameters.ParamByName('slovo').Value := Trim(Edit1.Text);
ADOQuery.Open;
if not ADOQuery.IsEmpty then
  Edit2.Text := ADOQuery.FieldByName('stolb_ru').Value
else
  ShowMessage('Слово не найдено');
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 30.04.2013 в 16:02.
Yurk@ вне форума Ответить с цитированием
Старый 30.04.2013, 14:47   #4
Ворсайден
Новичок
Джуниор
 
Регистрация: 30.04.2013
Сообщений: 5
По умолчанию

Yurk@, компилятор ругается на UPPER (Неопределенная функция 'UPPER' в выражении). Я так понял, что UPPER переводит символы из нижнего регистра в верхний(?). Для чего эта функция в переводчике? Убрал UPPER, пишет 'Отсутствует значение для одного или нескольких параметров'.

Последний раз редактировалось Ворсайден; 30.04.2013 в 14:49.
Ворсайден вне форума Ответить с цитированием
Старый 30.04.2013, 14:56   #5
Ворсайден
Новичок
Джуниор
 
Регистрация: 30.04.2013
Сообщений: 5
По умолчанию

Получилось! =)
Код:
procedure TForm3.Button1Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'SELECT ru FROM Slovar WHERE eng = :slovo';
ADOQuery1.Parameters.ParamByName('slovo').Value := Trim(Edit1.Text);
ADOQuery1.Open;
if not ADOQuery1.IsEmpty then
  Edit2.Text := ADOQuery1.FieldByName('ru').Value
else
  ShowMessage('Слово не найдено');
end;
Маялся три дня с функцией поиска перевода, оказывается не сложно, но нужно знать SQl, для чего потребуется немало времени. Выражаю огромную благодарность Yurk@!
Ворсайден вне форума Ответить с цитированием
Старый 30.04.2013, 14:57   #6
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
Для чего эта функция в переводчике?
для выравнивания регистра введенных слов т.к. заранее неизвестно в каком регисте слово в базе и в каком регистре ты его введешь в Edit.

попробуй UCASE вместо UPPER.
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 30.04.2013 в 15:02.
Yurk@ вне форума Ответить с цитированием
Старый 30.04.2013, 15:11   #7
Ворсайден
Новичок
Джуниор
 
Регистрация: 30.04.2013
Сообщений: 5
По умолчанию

C UCASE работает. Остался еще вопрос. Что нужно переделать в строке
Код:
ADOQuery1.SQL.Text := 'SELECT ru FROM Slovar WHERE UCASE(eng) = UCASE(:slovo)';
, чтобы при переводе, в Memo1 добавлялись еще варианты перевода из той же строки, из столбца variants? Т.е., если у слова несколько переводов.
Ворсайден вне форума Ответить с цитированием
Старый 30.04.2013, 15:35   #8
Ворсайден
Новичок
Джуниор
 
Регистрация: 30.04.2013
Сообщений: 5
По умолчанию

Проблему решил... Получилось в общей сложности
Код:
procedure TForm3.Button1Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'SELECT ru,variants FROM Slovar WHERE UCASE(eng) = UCASE(:slovo)';
ADOQuery1.Parameters.ParamByName('slovo').Value := Trim(Edit1.Text);
ADOQuery1.Open;
if not ADOQuery1.IsEmpty then begin
Edit2.Text := ADOQuery1.FieldByName('ru').Value;
Memo1.Text := ADOQuery1.FieldByName('variants').Value;
end
else
  ShowMessage('Слово не найдено');
end;
Еще раз спасибо Yurk@!
Ворсайден вне форума Ответить с цитированием
Старый 30.04.2013, 21:13   #9
powerful96
Новичок
Джуниор
 
Регистрация: 03.04.2013
Сообщений: 1
По умолчанию

Теперь у меня появился еще один вопрос. Как прописать программно путь к БД для ADOquery? Т.е. сделать тоже самое, что выполняет ConnectionString, но написать это в коде, т.к. при запуске на другом компе, программа БД не видит, т.к. путь меняется. Или как можно сделать путь постоянным?
powerful96 вне форума Ответить с цитированием
Старый 30.04.2013, 22:06   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

не устаете регаться под каждый вопрос?
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск _-Re@l-_ Общие вопросы Delphi 5 19.06.2010 19:20
поиск - ? Evgenii БД в Delphi 11 22.07.2009 19:41
Поиск В бД Старик_Романыч БД в Delphi 5 29.04.2008 21:12
Поиск Volkogriz Общие вопросы Delphi 5 22.04.2008 10:59
Поиск по БД. Шурик БД в Delphi 1 18.09.2007 02:04