Программная реализация Sql-запросов средствами Delphi

Тема в разделе "Delphi - Базы данных", создана пользователем -, 16 сен 2010.

Статус темы:
Закрыта.
  1. Гость

    Здравствуйте! :)
    Нам дали на самостоятельное изучение реализацию SQL-запросов с помощью Delphi. Тема несложная, но на самом последнем этапе трудности всё-таки возникли :crash:
    Вот задание:
    Практическое задание
    1.С помощью MS Access создайте таблицу БД в соответствие с Табл. 1. Создайте в таблице не менее пяти записей.
    2.Используя программный способ формирования SQL-запросов, создайте приложение, которое реализует следующие возможности:
    - Определяет номер телефона по фамилии абонента;
    - Определяет фамилию, имя, отчество и адрес абонента по номеру телефона;
    - Выдает все номера телефонов, Ф.И.О. и номера квартир абонентов, проживающих на одной улице в одном доме (по указанному номеру дома и указанной улице
    Вот с последним-то заданием я и не справилась.
    У меня есть два Edit'а-один для ввода улицы, другой для ввода дома, кнопка, в процедуре написано следующее:
    Код (Text):
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    ADOQuery1.Active:=False;
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('SELECT PhoneNum, FName, LName, PhName , Kv');
    ADOQuery1.SQL.Add('FROM Таблица1');
    ADOQuery1.SQL.Add('WHERE Street='+'"'+Edit4.Text+'"');
    //ADOQuery1.SQL.Add('WHERE House='+'"'+Edit9.Text+'"');
    ADOQuery1.Open;
    ADOQuery1.Active:=True;
    end;
    По отдельности (когда один из них закомментирован) запросы работают правильно, но вместе никак не хотят, программа вылетает и выдаёт ошибку "Ошибка синтаксиса (пропущен оператор) в выражении запроса Street="Пушкина" WHERE House="77""
    Помогите пожалуйста! :what?:
     
  2. V88

    V88 Well-Known Member

    Регистрация:
    22 окт 2008
    Сообщения:
    51
    Симпатии:
    0
    между Street="Пушкина" и House="77" нужно ставить AND
     
  3. oleksandr

    oleksandr Гость

    ADOQuery1.Active:=False; и ADOQuery1.Active:=True; писать не обязательно
    Достаточно ADOQuery1.Open;
    ADOQuery1.Close; - тоже не нужно.
    Можно сделать так:
    procedure TForm1.Button4Click(Sender: TObject);
    var Street, House: String;
    begin Street:=Trim(Edit4.Text); House:=Trim(Edit9.Text);
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('SELECT PhoneNum, FName, LName, PhName, Kv FROM Таблица1');
    ADOQuery1.SQL.Add('WHERE (Street LIKE '+QuotedStr('%'+Street+'%')+')');
    ADOQuery1.SQL.Add('AND (House LIKE '+QuotedStr('%'+House+'%')+')');
    //ShowMessage(ADOQuery1.SQL.text);
    try ADOQuery1.Open;
    except On e : EdatabaseError do messageDlg(e.Message, mtError,[mbOK],0); end;
    end;
    Почитайте книгу Мартина Губера "Понимание SQL" Москва 1993. Всё просто и понятно написано.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей