Подключение БД в Delphi

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by AL Capone, 23 Jul 2008.

  1. AL Capone

    AL Capone Elder - Старейшина

    Joined:
    27 Mar 2007
    Messages:
    28
    Likes Received:
    29
    Reputations:
    5
    ====================================================================================================
    В данной статье будет рассмотрен пример подключения базы данных в Delphi, с помощью технологии ADO, БД MS Access.
    ====================================================================================================

    Перед тем подключить БД нужно сначала ее создать. Открываем MS Access.
    Можете создать с помощью мастера, мне удобней в режиме конструктора.

    Вводим имя поля и тип данных которое оно будет содержать.
    Я ввел: имя поля - log, pass. Тип данных у обоих полей текстовый.
    Ключевым полем выбираем log.

    Нажимаем кнопку сохранить. Появится окно ввода имени таблицы. Вводим users.
    Лучше всего сохранить БД в той же директории где находится Ваша программа, чтобы
    не было проблем с переносом программы на другой компьютер.

    Подключение.

    Запускаем Delphi. В кладке ADO есть компонент ADOConnection, помещаем его на форму.
    Этот компонент служит для подключения БД в программу. Выбираем свойство ConnectionString
    в появившемся окне жмем кнопку Build. Далее нужно выбрать драйвер доступа к БД.

    [​IMG]
    рис(1)

    Выбираем Jet драйвер. Нажимаем Далее. В появившемся окне указываем путь к БД.
    Если БД находится в той же директории, что и программа, то пишем только имя БД.
    Далее нажимаем кнопку Проверка подключения.

    Если все прошла удачно, то появится следующее сообщение:

    [​IMG]
    рис(2)

    В противном случаем переподключите базу.
    Жмем ОК. Подключение базы закончено.

    В компоненте ADOConnection свойство LoginPrompt устанавливаем в false.
    Иначе, каждый раз будет выходить табличка для ввода пароля доступа к базе.
    Теперь мы можем с ней оперировать.

    Работа с базой.

    Помещаем на форму компонент ADOQuery. Этот компонент служит, для составления запросов SQL в базу.
    В свойстве Connection, выбираем ADOConnection1.
    Отрываем свойство SQL. В появившееся окно вводим запрос.

    Запрос:
    Code:
    SELECT *
    FROM users
    Свойство Active устанавливаем в true.

    Далее, из кладки Data Access, помещаем компонент DataSource, этот компонент служит для отображения содержимого базы.
    В свойстве DataSet выбираем ADOQuery1.

    Кладка DataControls, компонент DBGrid, это таблица, которая собственно и отображает базу.
    В свойстве DataSource выбираем DataSource1. После этого на этом компоненте должны появится поля базы.

    [​IMG]
    рис(3)

    Добавление записи.

    Поместим на форму 2 Edit'a, одно для того, чтобы ввести логин, а другое для пароля, также поместим Button.

    Прописываем процедуру Button1Click:

    Code:
    procedure TMain_Form.Button1Click(Sender: TObject);
    var query:string;
    begin
         query:='INSERT INTO users VALUES('''+Edit1.Text+''','''+Edit2.Text+''');';//**Запрос для добавления записи
         ADOQuery1.SQL.Clear;//**Очистка предыдущего запроса.
         ADOQuery1.SQL.Text:=query;//**Заносим запрос
         ADOQuery1.ExecSQL;//**Выполнения запроса
         //**Отображения содержимого базы
         ADOQuery1.Active:=false;
         ADOQuery1.SQL.Clear;
         ADOQuery1.SQL.Add('SELECT * FROM users ORDER BY log;');
         ADOQuery1.Active:=true;
    end;
    Другие запросы создаются аналогично.​

    23.07.08
     
  2. dos999

    dos999 Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    'INSERT INTO users VALUES('''+Edit1.Text+''','''+Edit2.Text+''');'
    подобный текст пихать в SQL запрос несовсем правильно... а что если понадобаться запихать дату?
    лутше делать через параметры, ИМХО гораздо надёжнее:
    Code:
     INSERT INTO users VALUES(:par1,:par1);
    а потом этим параметрам присваиваем значения

    Code:
     ADOQuery1.Parameters.ParamByName('par1').Value := Edit1.Text;
    ADOQuery1.Parameters.ParamByName('par2').Value := Edit2.Text;