Как сделать таблицу в лазарусе

Обновлено: 04.07.2024

В предыдущем уроке рассказывалось об этапах создания приложения в среде Lazarus на примере вашей первой программы.

В этом уроке Вы познакомитесь с основными элементами языка программирования: переменными, их типами, основными операциями и функциями.

Создадите простейший калькулятор, который будет выполнять сложение целых чисел, введенных с клавиатуры.

Данные в языке Free Pascal

Для решения задач в любой программе выполняется обработка каких-либо данных. Данные хранятся в памяти компьютера и могут быть самых различных типов: целые и вещественные числа, символы, строки, массивы.

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

Участок памяти (ячейка), в которой хранится значение определенного типа, называется переменной. У переменной есть имя (идентификатор), тип и значение.

Имя служит для обращения к области памяти, в которой хранится значение.

Во время выполнения программы значение переменной можно изменить.

В Lazarus каждая переменная перед использованием должна быть описана (объявлена). При объявлении переменной задается ее имя и тип. В оперативной памяти выделяется место для хранения переменной.

Для описание переменных используется служебного слова var.

Общий вид оператора:

Var имя_переменной: тип_переменной;

Целочисленный тип данных

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

Тип Диапазон Размер (байт)
Shortint -128 .. 127 1
Integer -32768 .. 32767 4
Longint -2147483648 .. 2147483647 4
Byte 0 .. 255 1
Word 0 .. 65535 2

Вещественный тип данных

Внутренне представление вещественного числа в памяти компьютера отличается от представления целого числа. Вещественное число представлено в экспоненциальной форме mE±p, где m – мантисса (целое или дробное число с десятичной точкой), p – порядок (целое число).Чтобы перейти от экспоненциальной формы к обычному представлению числа, необходимо мантиссу умножить на десять в степени порядок.

Вещественное число может занимать от 4 до 10 байтов.

Вещественные типы Диапазон Кол-во значащих цифр Размер, байт
Real 2.9e-39 ..1.7e+38 11-12 8
Single 1.5-e45 .. 3.4e+38 7-8 4
Double 5.0e-324.. 1.7e308 15-16 8
Extended 3.4e-4932 ..1.1e4932 19-20 8

Пример описания вещественных переменных:

Операции и выражения

Выражение задает порядок выполнения действий над данными и состоит из операндов (констант, переменных, обращений к функциям), круглых скобок и знаков операций.

Например a + b*sin(x).

В таблице представлены основные алгебраические операторы языка программирования Free Pascal.

Оператор Действие
+ Сложение
Вычитание
* Умножение
/ Деление
DIV Целочисленное деление
MOD Вычисление остатка от деления

Операторы целочисленной арифметики DIV и MOD применяются только к целочисленным операндам.

DIV позволяет получать целую часть результата деления одного числа на другое.

Например, 15 DIV 7 = 2.

Оператор MOD получает остаток от деления одного числа на другое.

Например, 15 MOD 7 = 1, Для задания нужного порядка выполнения операций в выражении можно использовать скобки.

Стандартные функции

В языке определены стандартные функции. Некоторые арифметические функции представлены в таблице ниже.

Обозначение

Действие

Величина угла тригонометрических функций должна быть выражена в радианах. Для преобразования величины угла из градусов в радианы используется формула:

(α * 3.1415256 ) / 180,

где α – величина угла в градусах, 3.1415256 –число π.

Вместо константы 3.1415256 можно использовать стандартную именованную константу PI.

Функции преобразования

Функции преобразования типов часто используются при вводе и выводе информации

Например, для того чтобы вывести в поле вывода (компонент Label) диалогового окна значение переменной Real, необходимо преобразовать число в строку символов, изображающую данное число. Это можно сделать при помощи функции FloatToStr, которая возвращает строковое представление значения выражения, указанного в качестве параметра функции.

Основные функции преобразования типов

Обозначение Действие
Chr(n) Символ, код которого равен n.
IntToStr(k) Строка, являющаяся изображением целого k.
FloatToStr(n) Строка, являющаяся изображением вещественного n.
FloatToStrF(n,f,k,m) Строка, являющаяся изображением вещественного n. При вызове функции указывают: f — формат; k – точностью (общее количество цифр); m — количество цифр после десятичной точки.Возможны следующие значения параметра Format:
ffGeneral — общий числовой формат;
ffFixed — фиксированный формат;
ffCurrency — денежный формат.
StrToInt(s) Целое, изображением которого является строка s.
StrToFloat(s) Вещественное, изображением, которого является строка s.
Round(n) Целое, полученное путем округления n по известным правилам.
Trunc(n) Целое, полученное путем отбрасывания дробной части n.
Frac(n) Дробное, представляющее собой дробную часть вещественного n.
Int(n) Дробное, представляющее собой целую часть вещественного n.

Наиболее часто программа может получать исходные данные из окна ввода или из поля редактирования (компонент Edit). Для преобразования данных в числовой тип используют соответствующую функцию.

Например, для преобразования в вещественный тип используется оператор:

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

Задание. Создать приложение для вычисления суммы двух чисел. Окно программы должно выглядеть так, как показано на рисунке.

Lazarus. Калькулятор, выполняющий сложение двух чисел

Ход выполнения

Понятно, что созданная процедура не содержит ни одной команды. Ваша задача – заполнить шаблон операторами. Все команды, указанные в процедуре между begin и end, будут выполнены при щелчке на кнопке Выполнить.

В нашем случае процедура TForm1 . But ton1Cl ick будет иметь вид:

Lazarus. Калькулятор, выполняющий сложение двух чисел

В этом уроке мы повторили основными элементы языка программирования: переменные, числовые типы, основные арифметические операции и функции. Создали простейший калькулятор.

В предыдущем уроке рассказывалось об основных инструментах разработки программ в среде Lazarus, этапах создания приложения.

В этом уроке мы создадим свою первую программу, познакомимся с редактором исходного кода, узнаем как компилировать и выполнять программу.

Наша программа будет взаимодействовать с пользователем, Вы сможете поэкспериментировать с нею. Не бойтесь экспериментировать, Вы не сможете сделать что-либо непоправимое. И в то же время истинные и прочные навыки эффективной работы достигаются только путем самостоятельного экспериментирования.

Для создания графического интерфейса Lazarus предоставляет программисту палитру компонентов пользовательского интерфейса. Программисту требуется всего лишь выбрать на палитре нужные компоненты и с помощью мыши перенести их на форму.

После того, как компонент размещен на форме, он становиться объектом, который имеет свои установленные по умолчанию свойства. Эти свойства можно просматривать и изменять с помощью окна Свойства.

В нашей первой программе при создании интерфейса пользователя будем использовать три компонента: TForm (Форма), Label (Надпись) и TButton (Командная кнопка).

Так как мы будем использовать их впервые, давайте познакомимся с ними подробнее. Нам нужно знать основные свойства этих компонентов и их назначение, чтобы можно было их настраивать. Описание свойств этих компонентов можно посмотреть перейдя по ссылкам: Forma (Форма), Label (Надпись), Button (Кнопка). С остальными компонентами графического интерфейса будем знакомиться по мере их использования.

Теперь, когда вы изучили новые компоненты, мы загрузим среду программирования и создадим свой первый проект

Создать интерфейс программы по образцу:

Разместить надпись и кнопку на форме и установите значения свойств, перечисленные в таблице. Когда вы это сделаете, форма примет такой вид , как на рисунке.

В следующих заданиях, когда Вы лучше освоите среду Lazarus, примеры форм будут сопровождаться только листингами исходного кода. От Вас ожидается, что вы , глядя на формы и листинги, сами догадаетесь, как должны быть установлены свойства компонентов.

Ход выполнения проекта

Lazarus. Создание проекта

    1. Загрузите Lazarus. Создайте новый проект.Для этого:1) Выполнить команду Проект => Создать проект …2)В появившемся диалоговом окне выбрать слово Приложение и нажать кнопку ОК.

    Lazarus. Создание папки для файлов проекта

    2) Не выходя из этого диалогового окна Создать новую папку Primer_1 для файлов вашего проекта (проект будет содержать несколько файлов), открыть ее и щелкнуть по кнопке Сохранить.

    Тем самым мы сохраним файл Project1, содержащий сведения о проекте.

    Сразу же откроется окно Сохранить Unit1 для сохранения программного кода проекта (файл Unit1.pas), в котором также необходимо щелкнуть по кнопке Сохранить.

    Кроме этих двух файлов в папке проекта создается автоматически еще несколько файлов, в том числе – unit.lfm, который представляет собой файл с полными данными о проектировщике формы. Позиция, размер, расположенные компоненты и пр.

    Папка проекта должна содержать следующие файлы:

    Компонент

    Свойство

    Значение

    Форма примет такой вид, как на рисунке:

    Lazarus. Обработчик события щелчок на кнопке

    Сейчас процедура обработчика события пустая, при нажатии кнопки она ничего не делает.

    2) Чтобы процедура выполнила необходимые действия, напишите соответствующий код между операторными скобками begin и end. В нашем случае это оператор присваивания, который изменяет свойство Сaption (текст надписи) объекта Label1 на новое значение:

    Вводя код, обратите внимание на подсказку, появившуюся после ввода точки, следующей за label1. Подсказка представляет собой всплывающее меню, в котором перечислены допустимые свойства и методы компонента label1

    Lazarus. Система подсказки кода

    С помощью мыши вы можете выбрать из списка нужное свойство или метод.

    Lazarus. Первая программа. Протокол компиляции

    Далее этот файл, в случае успешного создания, запускается на выполнение.

    В предыдущем задании новые значения свойств для компонентов, размещенных на форме, были перечислены в таблице.

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

    Задания для самостоятельного выполнения

    Задание 3.Создайте приложение, разместите на форме компоненты: Buton1, Edit1 так как показано на образце.

    Lazarus. Практическая работа №3

    По щелчку на кнопке нужно заменить текст в заголовке окна на текст введенный пользователем в текстовое поле.

    Lazarus. Практическая работа №4

    Lazarus. Практическая работа №5

    Наименование кнопки Отображаемый текст в надписи label1
    Форма Заготовка главного окна разрабатываемого приложения
    Инспектор объектов Окно, предназначенное для редактирования свойств объектов
    Unit1.pas Файл с программным кодом
    Проект Группа файлов, относящихся к данному приложению

    Для объектов на форме установите следующие значения свойств:

    В этом уроке мы создали свою первую программу в среде Lazarus.

    В следующем уроке мы продолжим знакомится с компонентами Lazarus, создадим еще несколько новых проектов.

    SQLite — это встраиваемая библиотека, позволяющая нам управлять базой данных в нашем приложении без сервера, типа MySQL, Oracle Database и тд. Работать с такой базой данных одновременно может несколько процессов или потоков, за исключением записи. Для записи в такую базу требуется чтобы в данный момент к ней не осуществлялось других запросов, иначе попытка записи оканчивается неудачей.

    Кстати говоря, многие известные приложения используют Sqlite:

    • Mozilla Firefox (начиная с версии 3.0)
    • Mozilla Thunderbird
    • Фреймворк Qt
    • Skype
    • 1С:Предприятие
    • Google Chrome
    • Opera

    Благодаря этим приложениям, SQLite считается самой распространённой базой данных в мире.

    Если вы программируете под Ubuntu, Linux и других Debian-like дистрибутивы, то также требуется установить libsqlite-dev/libsqlite3-dev, не только sqlite/sqlite3.

    Скачав DLL библиотеку sqlite3.dll (под windows) ее требуется закинуть в папку с Lazarus (По умолчанию это C:\Lazarus) и в папку с проектом.

    После чего требуется установить пакет sqlite3laz который по умолчанию поставляется с Lazarus и пересобрать наш IDE.

    С помощью sqlite3.exe скаченного с офф. сайта создаем базу данных:

    Откроем CMD, перейдем в рабочий каталог sqlite3.exe, например диск С(в данной папке должен быть наш sqlite3.exe)

    В командной строке пишем: sqlite3.exe devlaz.db

    где devlaz.db имя вашей базы данных.

    Должно появится окно приветствия:

    Создаем внутри таблицу с именем например devlaz, в которой будет 3 поля: Порядковый номер, ФИО и Телефон: create table devlaz(id integer primary key, fio string, tel string);

    Данные в таблицу мы будем добавлять из программы поэтому завершим работу с sqlite3.exe вводом команды: .exit

    cmd

    В той же папке с программой sqlite3.exe должен появится наш файл db, закидываем его в папку с проектом.

    Теперь перейдем к созданию приложения. Готовое приложение вы сможете скачать в конце статьи.

    Для начала добавьте на форму компоненты TSQLite3DataSet с вкладки Data Access, TSQLite3Connection, TSQLQuery и TSQLTransaction с вкладки SQLdb. А для отображения данных нашей базы я добавил на форму DBGrid и TDataSource.

    Теперь для того чтобы наша база загружалась с запуском программы, на FormCreate добавим следующий код:

    Создадим на форме 2-ве кнопки, для добавления новой записи и удаления. А также 3-и Edit’a для наших данных ID, ФИО и Тел.

    Для создания новой записи впишем след. код:

    Поле id добавится автоматически, согласно след. порядковому номеру, поэтому его мы не указываем в запросе.

    Для удаления записи будем использовать ID записи:

    Вы можете откорректировать ваш SQL запрос на свое усмотрение, например удаление по ФИО или номеру телефона.

    main

    22 комментариев “ SQLite в Lazarus ”

    Олег не могли бы вы написать о демонах в Lazarus. а то как то замудрено везде пишут.

    Вадим приветствую. Хорошо, в планах я поставлю себе пометку описать процесс создания службы\демона

    Здравствуйте, Олег!
    Подскажите пожалуйста средствами Lazarus можно реализовать авторизацию пользователей и разграничение прав доступа к ресурсам . Вот на вашем примере, можно ли сделать так, чтобы можно было войти с логином и паролем и иметь доступ только на поиск данных, а другой пользователь имел возможность добавлять данные в бд и удалять или только добавлять?
    С уважением Олег

    Приветствую Олег.
    А почему нет? Вы должны будете сделать окно входа в программу, где указывается логин и пароль, программа производит идентификацию пользователя и перед выполнением транзакции проверяет, есть ли соответствующие полномочия у данного пользователя.
    В теории все просто, над реализацией нужно немного подумать, но сложностей я думаю возникнуть не должно.

    Ответ будет на мой вопрос по возможности авторизации при входе в приложение средствами lazarus?

    UP, новая работа совсем не оставляет мне свободного времени

    Вы сайт сделали в основном как портфолио и благодаря этому нашли новую работу?

    Привет Олег,
    Нет я работаю в области информационной безопасности. Программирование — это пока лишь мое хобби

    Интересная статья спасибо, мне очень полезен блок про поиск данных, он получается будет находить с точным совпадением?

    Компонент SQLite3Dataset является обязательным? можно как то без него реализовать поиск данных и отображение?

    если у кого не будет работать
    в procedure TForm1.FormCreate(Sender: TObject);
    найдите строки

    try
    SQLite3Dataset1.Open;
    SQLite3Connection1.Connected:=True;
    except

    и поменяйте 2 строки местами,чтоб получилось так:
    try
    SQLite3Connection1.Connected:=True;
    SQLite3Dataset1.Open;
    except

    если используете код автора то единички в именах объектов уберите

    Используйте dll из архива x86, и Lazarus запуститься без ошибок.

    Что не так делаю?

    Я пишу иногда для своих нужд кое-что на Делфи. Вот и Лазарус пробую освоить..

    среда, 5 февраля 2014 г.

    Среда разработки Lazarus+ сервер баз данных Firebird

    Я начал, но не закончил написание вот такой пошаговой инструкции (может сгодится кому):
    Задача: Написать простую программу демонстрирующую принципы работы с базами данных по сети в целом и сервером баз данных FireBird в частности.
    Нужно:
    - Программы : FireBird - сервер баз данных, Lazarus – бесплатный аналог Делфи, IB/FB Development Studio – средство разработки баз данных для FireBird (получается файл с расширением *.FBD) – все эти программы бесплатны, русскоязычны, их можно счкачать из Интернета.
    FireBird берем не выше версии 2.0 – более поздние версии не поддерживаются IB/FB Development Studio.

    Задача: Написать простую программу демонстрирующую принципы работы с базами данных по сети в целом и сервером баз данных FireBird в частности. (как правило когда программист первый раз пробует написать программу работающую с БД он пишет телефонный справочник :-)

    - Программы : FireBird - сервер баз данных, Lazarus – бесплатный аналог Делфи, IB / FB Development Studio – средство разработки баз данных для FireBird (получается файл с расширением *. FBD ) – все эти программы бесплатны, русскоязычны, их можно счкачать из Интернета.

    FireBird берем не выше версии 2.0 – более поздние версии не поддерживаются IB / FB Development Studio .






    Поместим на форму компоненты TIBConnectiom , TSQLTransaction, TSQLQuery из панели SQLbd; и компонент TDatasource из панели Data Access.



    • В свойстве Transaction объекта IBConnectiom 1 выберите SQLTransaction1 (я не менял присваиваемые по умолчанию имена объектов).

    • В свойстве Database объекта SQLQuery1 выберите IBConnectiom 1
    • В свойстве Transaction объекта SQLQuery1 выберите SQLTransaction1
    • В свойстве DataSet объекта Datasource1 выберите SQLQuery1

    Для подключения к базе данных необходимо для объекта IBConnectiom 1 указать адрес сервера (свойство HostName, если же FireBird установлен прям на этом компьютере, то оставляем поле пустым), название базы данных (свойство DatabaseName), имя пользователя (свойство UserName – по умолчанию для Firebird - SYSDBA ) и пароль для доступа к базе данных (свойство Password по умолчанию для Firebird - masterkey ).

    Объекты класса TSQLQuery представляют собой наборы данных. В него загружается копия таблицы с сервера БД, с которой потом и осуществляется вся работа.

    TSQLQuery поддерживает два принципиально разных способа доступа к данными: навигационный, который заключается в обработке каждой отдельной(текущей) записи(строки) таблицы; и реляционный, основанный на обработке сразу группы записей, посредствам SQL-запросов.

    Не расчитывая на студентов – киндервундеров, а ориентируясь на середняков можно сделать такой план работы

    1 пара – создать и заполнить БД (20-40 мин); + начинаем писать программу – задача на оставшиеся полпары – правильно настроится на БД и получить из нее те данные что уже забиты.


    Добавим на форму визуальные компоненты TDBGrid – сетка таблицы и TDBNavigator – панелька с кнопками навигации по таблице – эти компоненты первый и последний в разделе DataControls


    Свяжем компоненты : у DBGrid 1 и DBNavigator 1 установим для свойства DataSource значение DataSource 1.

    Сначала познакомимся с реляционным способом доступа к данным, в частности рассмотрим способы выполнения SQL запросов. SQL запросы можно разделить на две группы: возвращающие и не возвращающие результат.

    ( SQL – Structured Query Languag е – структурированный язык запросов (к БД) команд в нем немного – select , insert , update , delete – больше нам не надо)

    подразумевает запись в набор данных копии таблицы anketa . Для его выполнения нужно использовать код:

    Мы сначала закрываем набор данных SQLQuery1, вызывая его метод Close (Аналогичного результата можно добиться установив свойство Active в false). Если набор закрыт, его связь с базой данных разорвана. Затем мы очищаем свойство SQL с помощью метода Clear. С помощью метода Add записываем в него текст нового запроса. Исполняется запрос при выполнении команды Open, которая переводит набор данных SQLQuery1 в открытый режим и записывает в него результаты выполнения SQL запроса.

    Если SQL запрос не подразумевает возврата таблиц данных (запросы INSERT и UPDATE), необходимо воспользоваться альтернативным способом его выполнения:

    При этом, при попытке перевести набор данных в открытый режим (выполнить SQLQuery1.Open;) возникнет ошибка. Для ее устранения нужно либо записать в свойство SQL новый запрос, возвращающий таблицу, так показано ниже:

    Либо создать и использовать для таких SQL запросов отдельный набор данных (SQLQuery2), который никогда не переводить в открытый режим.

    Будем подключаться к удаленной базе данных не сразу, а после получения явной команды от пользователя (щелчка по соответствующей кнопке), поэтому установим в инспекторе объектов свойство Сonnected компонента IBConnectiom 1 и свойства Active компонент TSQLTransaction и TSQLQuery в false.

    Таким образом, сначала производится попытка подключения к FireBird базе, если она прошла успешно, создается новая транзакция, после чего при активации объекта SQLQuery1 выполняется SQL запрос к базе данных, выбирающей все строки из таблицы.

    При отключении от базы данных действуем в обратном порядке. Зададим код отключения в обработчике события OnDestroy формы



    • TSQLQuery.Next – перейти на запись вперед
    • TSQLQuery.Prior – перейти на запись назад
    • TSQLQuery.First – перейти на первую запись
    • TSQLQuery.Last – перейти на последнюю запись
    • TSQLQuery.Insert – добавить новую запись
    • TSQLQuery.Delete – удалить запись
    • TSQLQuery.Edit – перевести набор данных в режим редактирования
    • TSQLQuery.Post – сохранить сделанные изменения в набор данных
    • TSQLQuery.Refresh – обновить таблицу

    Для того чтобы получить значения какого-нибудь поля записи, можно воспользоваться методом FieldByName(fn:string), где fn – название поля (колонки) таблицы. Этот же метод можно использовать для записи новых данных в таблицу. Формат чтения/записи указывается с помощью свойств AsString, AsInteger, AsFloat, AsDataTime, … Например, чтобы записать текущее значения поля id в Label, можно воспользоваться кодом:

    Стоит отметить, что не каждый набор данных можно редактировать навигационным способом. Чтобы получить в результате SQL запроса редактируемый набор (то есть такой, что внесенные изменения можно было сохранить в базу данных), необходимо выполнение следующих условий:

    • данные отбираются только из одной таблицы;
    • таблица допускает модификацию;
    • в запросе не используется DISTINCT и статические функции;
    • в запросе не применяются соединения таблиц;
    • в запросе отсутствуют подзапросы и вложенные запросы;
    • не используется группирование данных;
    • сортировка применяется только к индексным полям;

    Вообще механизм транзакции необходим для сохранения целостности базы данных. Допустим, для внесения актуальных данных в базу Вам необходимо записать в разные таблицы большое количество информации. Если в процессе записи выключится электричество, то часть таблиц будут содержать актуальную информацию, а часть старую. В результате база данных окажется испорченной. Избежать этого позволяет механизм транзакций. Если все операции записи завершились успешно, транзакция считается успешной и все изменения в таблицах базы считаются подтвержденными. Если же хотя бы одна операция записи не выполнена, транзакция считается неудачной и таблицы базы данных возвращаются к состоянию, которое они имели до начала транзакции.

    Читайте также: