пятница, 12 февраля 2010 г.

Редактирование базы данных SQL

В прошлой статье я рассказывал про создание таблиц в базе данных на языке SQL. Пришла пора их редактировать. Операции-то, собственно, небогатые: обновление и удаление, но зато приёмов их использования немало.

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



Здесь, как вы видите, при входе происходит открытие пока ещё не существующей у вас базы данных. Имя берётся из поля ввода, но изменять вы его не можете (параметр ReadOnly=True), потому что работа с несколькими БД не предусмотрена в схеме. А потому не будет усложнять задачу.

Таблица имеет незамысловатое название - table1, изменять которое тоже не будем. После открытия БД сразу происходит чтение из этой таблицы и отображение данных в визуальной таблице. Столбцы, как вы видите, не передаются из БД, так как они в визуальной таблице уже есть и стандартны для нас.

А затем выполняется код для создания этой самой table1. Дело в том, что мы ведь не знаем, есть там эта таблица или ещё пока нет. И потому на всякий случай каждый раз будем создавать. Не стоит опасаться: перезаписи данных при существующей таблице не происходит, всё остаётся на своих местах.



Здесь мы при добавлении новой строки в таблицу добавляем новую запись в БД. Но нам известно лишь поле номера, поэтому и вносим только его. Обратите внимание, что в записи INSERT INTO table1 (number) VALUES (%1) после названия таблицы в скобках указан её столбец. Это означает, что значения мы будем записывать только в это поле строки. Можно использовать и несколько полей, отделяя их запятыми, например: INSERT INTO table1 (number, lastname) VALUES (%1, 'Иванов').




А здесь уже реализована замена значений в полях. Событие onLineChange выдаёт номер отредактированной строки, и мы затем через массив строк получаем её содержимое, которое разбиваем на части (ячейки). А затем выполняем код SQL

UPDATE table1 SET firstname='%2', lastname='%3' WHERE number=%1
ОБНОВИТЬ table1 УСТАНОВИВ firstname='%2', lastname='%3' ГДЕ number=%1

Этот код немного неочевиден для понимания. Сразу возникает вопрос: как мы находим в БД строку, которую нужно изменить? Дело в том, что в БД не существует понятия «порядковый номер», и мы не может обратиться, например, к пятой строке, а может лишь обратиться к строке, ГДЕ какое-либо поле = известному нам значению. Естественно, что это поле должно быть уникальным для всех строк, а если будут повторения, то при обращении к строкам по значению поля могут измениться несколько строк, у которых это поле имеет одинаковое значение.

Поле number у нас уникальное (если только вы не изменяли его вручную, чего делать не следует). А раз так, то мы можем найти строку в БД по значению этого поля. Собственно, для этого оно и создавалось.

Попробуйте создавать и изменять строки, а потом закройте программу и снова откройте. Всё сохранилось в БД и вывелось в таблице.



А здесь мы реализовали удаление. Код SQL должен быть без проблем понятен. А находим удаляемую строку мы опять же по значению поля number.

Теперь у вас есть готовая программа для работы с базами данных. Конечно, для реальных целей вы её должны изменить и «заточить» под себя, однако ключевые моменты вы теперь знаете.






Надёжное, экологически чистое, привлекательное по цене лдсп продажа тут. ЛДСП EGGER имеет очень большое разнообразие по текстуре, цвету, узорам, и вы обязательно подберёте что-то для себя.

9 комментариев:

  1. То есть, как я понимаю, таблица должна обязательно иметь поле number, где есть неповторяющиеся значения.

    ОтветитьУдалить
  2. В общем, да. Иначе Вы рискуете потерять возможность работать с конкретной строкой.

    ОтветитьУдалить
  3. Добрый день подскажите как связать HiAsm и MS SQL 2000? Точнее сказать связать у меня получилось, при помощи оператора DS_ODBC. Подключение проходит успешно, но а дельше не совсем понятно как мне открыть допустим определенную таблицу и вывести ее содержимое на экран, какие операторы необходимо использовать?

    ОтветитьУдалить
  4. К сожалению, с этими базами данных я не знаком (я не разработчик HiAsm, разработчик - Dilma). Посмотрите примеры в папке Elements\Delphi\Example или обратитесь на форум hiasm.com.

    ОтветитьУдалить
  5. Благодарю за программку. Очень пригодилась. Было бы идеально прилепить что-то вроде таймера который периодически бы обновлял инф. в таблице. Т. е. при многопользовательском режиме работы не приходилось бы перезапускать программу для обновления содержимого БД. Если поможете, буду признателен и могу отблагодарить, ибо труд должен оплачиваться)

    ОтветитьУдалить
    Ответы
    1. Таймер находится на вкладке "контролы", его можно подключить, например, к DSC_Query, и обновление будет происходить с нужной частотой.

      Удалить
  6. Отпишитесь на admin@nerfrolayn.ru, пожалуйста. В ответ я напишу что хотелось бы доработать в программе. Сообщите так же способ для благодарности (телефон, кошелёк, счёт в офшоре, кол-во пива...).

    ОтветитьУдалить