Мы не будем сегодня заострять внимание на создании таблиц, и потому таблица будет создаваться автоматически при входе в программу.
Здесь, как вы видите, при входе происходит открытие пока ещё не существующей у вас базы данных. Имя берётся из поля ввода, но изменять вы его не можете (параметр 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 имеет очень большое разнообразие по текстуре, цвету, узорам, и вы обязательно подберёте что-то для себя.
То есть, как я понимаю, таблица должна обязательно иметь поле number, где есть неповторяющиеся значения.
ОтветитьУдалитьВ общем, да. Иначе Вы рискуете потерять возможность работать с конкретной строкой.
ОтветитьУдалитьДобрый день подскажите как связать HiAsm и MS SQL 2000? Точнее сказать связать у меня получилось, при помощи оператора DS_ODBC. Подключение проходит успешно, но а дельше не совсем понятно как мне открыть допустим определенную таблицу и вывести ее содержимое на экран, какие операторы необходимо использовать?
ОтветитьУдалитьК сожалению, с этими базами данных я не знаком (я не разработчик HiAsm, разработчик - Dilma). Посмотрите примеры в папке Elements\Delphi\Example или обратитесь на форум hiasm.com.
ОтветитьУдалитьБлагодарю за программку. Очень пригодилась. Было бы идеально прилепить что-то вроде таймера который периодически бы обновлял инф. в таблице. Т. е. при многопользовательском режиме работы не приходилось бы перезапускать программу для обновления содержимого БД. Если поможете, буду признателен и могу отблагодарить, ибо труд должен оплачиваться)
ОтветитьУдалитьТаймер находится на вкладке "контролы", его можно подключить, например, к DSC_Query, и обновление будет происходить с нужной частотой.
УдалитьОтпишитесь на admin@nerfrolayn.ru, пожалуйста. В ответ я напишу что хотелось бы доработать в программе. Сообщите так же способ для благодарности (телефон, кошелёк, счёт в офшоре, кол-во пива...).
ОтветитьУдалитьЭтот e-mail не работает.
УдалитьПрошу прощения, admin@nefrolayn.ru
Удалить