создание базы данных

Модератор: Модераторы

Re: создание базы данных

Сообщение *Rik* » 24.02.2015 23:27:43

ujif писал(а):
*Rik* писал(а):
ujif писал(а):только как запустить Firebird-2.5.3.26780_0_Win32
чего то не нашел такого файла

Ничего запускать не нужно, FireBird работает в качестве службы.
Теперь, запускаете Lazarus и загружаете наш проект.
На главной форме есть компонента Database, у неё, в свойстве LibraryName на данный момент пропишем полный путь к fbclient.dll, можно нажать кнопочку в редакторе и воспользоваться диалогом выбора файла.
В свойстве DatabaseName указать путь к базе данных которую в прошлый раз создавали.
2 раза щелкнуть на компоненте Database, откроется редактор, в нем проверить User name должно быть sysdba, password должно быть masterkey.
После того как все прописано (путь к базе .fdb к fblcient.dll, user name, password), у компоненты Database пробуем установить свойство Connected в True.


все пути прописал , свойство Connected установил в true

Всё работает, сервер пашет, компоненты к нему коннектятся. Желательно не оставлять Connected в True, перед тем как закрыть проект, ставьте False. Завтра будем подключаться к таблице.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: создание базы данных

Сообщение ujif » 24.02.2015 23:39:25

*Rik* писал(а):Завтра будем подключаться к таблице.


Спасибо за поддержку Уважаемый Rik .до завтра
ujif
новенький
 
Сообщения: 40
Зарегистрирован: 04.07.2013 23:37:35

Re: создание базы данных

Сообщение *Rik* » 27.02.2015 21:24:38

ujif
Обновите ibx, старую версию удалите
http://visual-t.ru/files/components.7z
Из архива извлеките только ibx, положите вместо старой. В тестовом проекте сотрите папку lib.
Загрузите Lazarus переустановите ibx, затем загружайте тестовый проект.
Пробуем подключиться к таблице.
На форме лежит компонент TESTTABLE: TIBDataSet, у него есть 5 свойства для работы с SQL: SelectSQL, RefreshSQL, InsertSQL, ModifySQL, DeleteSQL
SelectSQL - читающий запрос, который используется что-бы получить с сервера набор данных из одной или нескольких таблиц. Набор данных может включать как одну так и множество строк.
RefreshSQL - читающий запрос, который возвращает с сервера одну строку для обновления текущей записи по команде Refresh. Пример TESTTABLE.Refresh - перечитает с сервера только текущую строку.
Модифицирующие запросы для изменения данных.
InsertSQL - будет вызываться для вставки записи в таблицу.
ModifySQL - будет вызываться для редактирования записи
DeleteSQL - будет вызываться для удаления записи.

Теперь нужно вписать запросы.
Выбираем в инспекторе SelectSQL, жмем кнопочку в редакторе, для вызова визуального редактора.
Изображение
В редакторе TableName выберите свою таблицу, нажмите кнопку GenerateSQL, текст запроса автоматически формируется, типа того что на скриншоте, вместо полей после слова Select и до слова From можете поставить *, которая говорит о том, что выбирать нужно все поля, если вы в таблице добавите поле (столбец), этот запрос не придется переписывать. Пример Select * From TESTTABLE - выберет все записи из таблицы.
Жмем ОК.

Заполняем запрос Refresh SQL.
В нем должен быть тот-же самый запрос, что и в SelectSQL, но только ограниченный одной записью, для этого добавим к запросу условие выборки. Должно получится примерно следующее:
Код: Выделить всё
Select * From TESTTABLE
Where TESTTABLE_ID = :TESTTABLE_ID

В этом условии Where, первое слово которое идет следующим это TESTTABLE_ID - это имя ключевого поля для вашей таблицы. На моем скриншоте Вы видите что ключевое поле это BANK_ID (primary keys), для моего запроса я должен бы был написать следующее Select * From BANK Where BANK_ID = :BANK_ID. То что идет после =, а это :BANK_ID или :TESTTABLE_ID - это параметр, куда можно подставить какое-нибудь значение, в нашем случае, всё будет работать автоматически, имя параметра, совпадает с именем поля, поэтому текущее значение будет подставляться автоматически.

Редактируем содержимое InsertSQL, генерим запрос как и 2 предыдущие, после нажатия кнопки Generate SQL, сформированный текст будет выглядеть примерно так:
Код: Выделить всё
Insert Into TESTTABLE(TESTTABLE_ID, STRFIELD, INTFIELD, NUMFIELD, AUTOFI)
Values(:TESTTABLE_ID, :STRFIELD, :INTFIELD, :NUMFIELD, :AUTOFI)

Этот запрос для вставки записи мы должны переделать:
Код: Выделить всё
Insert Into TESTTABLE(STRFIELD, INTFIELD, NUMFIELD, AUTOFI)
Values(:STRFIELD, :INTFIELD, :NUMFIELD, :AUTOFI)
Returning TESTTABLE_ID

Обратите внимание, я убрал ключевое поле из текста запроса и поставил его в Returning, если вы помните, когда мы создавали таблицу, мы поставили галочку автоинкремент, создать генератор и триггер. Значение ключевого поля будет генериться на сервере и через команду Returning, будет возвращаться в наш набор данных, где автоматически подставится в новую строку.
Сам запрос Insert говорит что мы вставляем запись в таблицу, после Insert в скобках перечисляются поля, значения которых мы хотим передать на сервер, здесь могут быть все поля таблицы, а могут быть и не все а только некоторые из них. После слова Values в скобочках перечисляются значения тех самых полей, у нас здесь прописаны параметры, с теми же самыми именами, что и имена полей, во время работы вместо параметров будут подставляться значения и запрос будет выглядеть примерно так:
Код: Выделить всё
Insert Into TESTTABLE(STRFIELD, INTFIELD, NUMFIELD, AUTOFI)
Values('Это просто строка', 2542, 125.32, 34)
Returning TESTTABLE_ID


Редактируем содержимое ModifySQL.
Генерим запрос как и все предыдущие, после генерации должно получиться что-то вроде:
Код: Выделить всё
Update TESTTABLE A Set
  A.TESTTABLE_ID = :TESTTABLE_ID,
  A.STRFIELD = :STRFIELD,
  A.INTFIELD = :INTFIELD,
  A.NUMFIELD = :NUMFIELD,
  A.AUTOFI = :AUTOFI
Where A.TESTTABLE_ID = :OLD_TESTTABLE_ID

Этот запрос нужно исправить, он содержит строку A.TESTTABLE_ID = :TESTTABLE_ID, которая подразумевает изменение значения ключевого поля, это есть великое зло, ключевое поле должно быть не изменным. При желании можно изменить инструкцию Where
Код: Выделить всё
Update TESTTABLE A Set
  A.STRFIELD = :STRFIELD,
  A.INTFIELD = :INTFIELD,
  A.NUMFIELD = :NUMFIELD,
  A.AUTOFI = :AUTOFI
Where A.TESTTABLE_ID = :TESTTABLE_ID

Этот запрос можно перевести как
Код: Выделить всё
Обновить TESTTABLE установить
  Поле1 = Значение1,
  Поле2 = Значение2
Где КлючевоеПоле = ЗначениеКлюча

В нашем запросе вместо Значение стоят параметры :STRFIELD, :INTFIELD и т.д. Когда запрос будет передан на сервер, вместо параметров будут подставлены значения и запрос примет вид:
Код: Выделить всё
Update TESTTABLE A Set
  A.STRFIELD = 'Это отредактированное значение',
  A.INTFIELD = 2433,
  A.NUMFIELD = 1434455.43,
  A.AUTOFI = 323
Where A.TESTTABLE_ID = 1024

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

Генерим последний запрос DeleteSQL.
После генерации получим следующее:
Код: Выделить всё
Delete From TESTTABLE A
Where A.TESTTABLE_ID = :TESTTABLE_ID

Значение этого запроса можно перевести как
Код: Выделить всё
Удалить из TESTTABLE
где TESTTABLE_ID (Ключевое поле) = :Параметр


После того как все запросы прописаны, можно попробовать собрать приложение и запустить его на выполнение, таблица должна редактироваться, только ключевое поле TESTTABLE_ID не редактируйте, потом я скажу как его защитить от изменений.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Пред.

Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru