Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» InterBase и FireBird: вопросы по работе и их решение

Автор: jonikDk
Дата сообщения: 20.06.2009 13:10
Kursist
кстати все равно посоветовал бы тебе Fibplus, у них в трильных компонентах полный функционал, только при запуске программы выскакивает сообщение, что вы пользуетесь нелицензионной версией и все.
Когда разберешься, то либо купишь FIB либо будешь искать в варезнике
Автор: Kursist
Дата сообщения: 20.06.2009 15:10
jonikDk
Хорошо. Спасибо за совет!

X11
Спасибо за советы и за Хелен Борри Читаю.

Цитата:
Свой нарисуй

Не проблема! Могу нарисовать новую форму с парой едитов и кнопкой
Просто удивило - совершенно 2 разных источника упоминают про такой диалог, с одинаковым свойством LoginParams - решил, что это явно не самопальный наследник формы или диалога (или тупое копи-пасте):

http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=576648&pg=-1
procedure Tfrm_main.DatabaseLogin(Database: TIBDatabase; LoginParams: TStrings);
var
dlg :TPasswordDlg; - вот это объявленный в Unit1 тип
begin
dlg:=TPasswordDlg.Create(Application);
if dlg.ModalResult = mrOK then
with LoginParams do
begin
Values['user_name'] := dlg.username.text;
Values['password'] := dlg.password.text;
end;
dlg.Free;
end;

http://www.ibase.ru/devinfo/ibx.htm
procedure TForm1.IBDatabase1Login(Database: TIBDatabase; LoginParams: TStrings);
var
dlg: TDBLoginDialog; // созданный вами диалог
begin
dlg:=TDBLoginDialog.Create(Application);
if dlg.ModalResult = mrOK then
with LoginParams do
begin
Values['USER_NAME'] := User_Name;
Values['PASSWORD'] := User_Pass;
// другие параметры, например role_name, lc_ctype и т.д., если необходимо
end;
dlg.Free;
end;
Автор: jonikDk
Дата сообщения: 20.06.2009 23:09
Kursist
для FIBPlus на просторах инета вроде как есть компонент Соединения с БД. Если надо, то поищу ссылки и кину
Автор: Kursist
Дата сообщения: 20.06.2009 23:34
jonikDk
Конечно, было бы здорово, но с другой стороны - я пока только разбираюсь и не использую FIBPlus.

я пока еще только читаю:
Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/Firebird/Yaffil (2-е издание)

Хелен Борри "Firebird: руководство разработчика баз данных"

А.. дошло! LoginParams не является свойством диалога, а передается в процедуру как аргумент. Также как и первый аргумент - датабаза - нигде не участвует в теле процедуры. Вот что значит, невнимательность!
Автор: X11
Дата сообщения: 21.06.2009 01:43

Цитата:
совершенно 2 разных источника упоминают про такой диалог

Видишь ли. На IBase.ru и на sql.ru очень часто (даже постоянно) общаются одни и те же люди. Даже разработчики.

А даже если эти сообщения никак не связаны, и авторы разные, то просто кто-то процитировал кого-то. Вот и всё. Ты вот тоже процитировал. Но зато ты указал источник. Что есть очень хорошим тоном. Так сказать "по-джентльменски"
Автор: volser
Дата сообщения: 22.06.2009 15:54
Kursist

Как уже писалось выше, я бы выбрал эти компоненты доступа к данным IBDac от devart. В сравнении с FIBPlus они проще и при желании с этих компонентов можно перейти на любые другие даки от devart. Это позволить перейти на любую другую БД без особых затрат в будущем.
Автор: Kursist
Дата сообщения: 22.06.2009 18:32
Проинсталлировал FireBird 2.5 Beta.

Я себе пишу вроде мануала, чтобы была в будущем подсказка под рукой:
Прокоментируйте мои действия:
С isql.exe не разобрался,
для создания базы данных и таблицы в ней, использовал IB/FB Development Studio.

Запустить IB/FB Development Studio
Войти в Редактор Баз Данных.
Создать новую базу данных
Указать сервер, указать путь к файлу
Открыть Базу Данных
Правая кнопка мыши - создать объект (новую таблицу)
Правая кнопка мыши - создать поле, если нужно добавить первичный ключ и автоинкремент (создать генератор)

----------------------------------------------------------------------------
Запустить Delphi2007
Создать новый проект
Из вкладки InterBase добавить на форму компонент TIBDatabase
Из вкладки InterBase добавить на форму компонент TIBTransaction
Из вкладки InterBase добавить на форму компонент TIBDataSet
Из вкладки Data Access добавить на форму компонент TDataSource
Из вкладки Data Controls добавить на форму компонент TDBGrid

----------------------------------------------------------------------------
Настройка компонента TIBDatabase:
В свойстве компонента DefaultTransaction: имя компонента TIBTransaction
Двойной клик по компоненту (или правая клавиша мыши) - вызвать Database Editor
Remote
localhost
TCP
ввести путь к файлу базы данных
USER: SYSDBA
PASSWORD: masterkey
Свойство компонента Connected =TRUE

----------------------------------------------------------------------------
Настройка компонента TIBTransaction:
В свойстве компонента DefaultDatabase: имя компонента TIBDatabase
Двойной клик по компоненту (или правая клавиша мыши) - вызвать Transaction Editor
Выбрать опцию Read Committed (для чтения и записи по подтвержением)
Свойство компонента Active =TRUE

----------------------------------------------------------------------------
Настройка компонента TIBDataSet:
В свойстве компонента Database: имя компонента TIBDatabase
В свойстве компонента Transaction: имя компонента TIBTransaction
Двойной клик по компоненту (или правая клавиша мыши) - вызвать DataSet Editor
Select Table Name: (доступны только при активных предыдущих компонентах)
Select Primary Keys (либо выбрать вручную автоинкрементное поле)
Update Fields: (рекомендуется снять выбор с автоинкрементного поля)
Нажать кнопку "Generate SQL"
Свойства компонента DeleteSQL,InsertSQL,ModifySQL,RefreshSQL автоматически заполнятся.
Выбрать свойство компонента SelectSQL в Object Inspector, вызвать CommandText Editor
Выбрать таблицу, ввести SQL: Select * from <TableName> (имя выбранной таблицы)

В свойстве компонента GeneratorField: выбрать имя генератора, выбрать поле, применить: On New Record
Свойство компонента Active =TRUE

----------------------------------------------------------------------------
Настройка компонента TDataSource:
В свойстве компонента DataSet: имя компонента TIBDataSet:
Свойство компонента Enable =TRUE

----------------------------------------------------------------------------
Настройка компонента TDBGrid:
В свойстве компонента DataSource: имя компонента TDataSource
Двойной клик по компоненту (или правая клавиша мыши) - вызвать Columns Editor
Если предыдущие компоненты активны (база данных подключена), то доступна кнопка "Добавить все поля" (Add All Fields)
В Дельфи, на вкладке Structure - компонент TDBGrid/Columns - выбрать столбец, задать его ширину в пикселях. Тем столбцам, которые не надо показывать - сделать Visible=FALSE (либо удалить из списка в столбцов в Columns Editor)

--------------------------------------------------------------------------------------------------------------------------
К сожалению, для информации у меня только книга Архангельского "Программирование в Delphi7" и интернет, поэтому будет много вопросов:

Вообщем, база данных подключилась. В базе данных Character Set = UNICODE_FSS (хочу и на русском и на европейских языках писать)
Если ввожу в текстовые поля английские символы - всё нормально, если ввожу русские - выдает ошибку "malformed string".

Далее, хочу создать программку, в которой можно самому программно создавать таблицы с полями.
Программный код создания таблицы отсюда: http://ibase.ru/devinfo/ibx.htm
create table X
(id int not null,
name varchar(30),
constraint PK_X primary key (id));

Мои вопросы - куда этот код вставлять? И как добавлять новые поля? Что это за ошибка "malformed string" (как от этого избавиться)?
Автор: volser
Дата сообщения: 22.06.2009 18:46
Kursist

По поводу ошибки "malformed string" почитайте здесь IBase
Автор: X11
Дата сообщения: 22.06.2009 19:31

Цитата:
С isql.exe не разобрался,
для создания базы данных и таблицы в ней, использовал IB/FB Development Studio.


Цитата:
скачай лучше
IBExpert
он на русском и для жителей бывшего СНГ бесплатен

Автор: Kursist
Дата сообщения: 22.06.2009 19:37
volser
FireBird 2.5 Beta
Delphi2007

В компоненте IBDatabase обнаружил UTF8, а вот в
А вот в IB/FB Development Studio в свойствах базы данных только можно выбрать - UNICODE_FSS (UTF8 не обнаружил).

Как же быть?
Автор: X11
Дата сообщения: 22.06.2009 19:39

Цитата:
Настройка компонента TIBDatabase:

Не увидел, с какой кодировкой ты базу создавал и с какой кодировкой подключаешься.
Автор: Kursist
Дата сообщения: 22.06.2009 19:43
X11

Цитата:
скачай лучше IBExpert он на русском и для жителей бывшего СНГ бесплатен


ОПА: (http://www.ibase.ru/unicode_faq.html)
IBExpert не является unicode-приложением

15th June 2009
IBExpert new version with full Unicode support )) ХАРАШО!

Добавлено:
Скачал IBExpert. Запустил. Создаю новую базу. Тест не работает - ругается!
user name и password у меня по дефолту (SYSDBA|masterkey) и чего не так?

Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

Server: Remote, ServerName: localhost, Protocol: TCP/IP, ServerVersion: FireBird 2.5
Database file: C:\myBD\BD3.fdb
Database Alias: localhost:C:\myBD\BD3.fdb

Test:
Attempting to connect to:
localhost:C:\myBD\BD3.fdb

Connecting... Failed!
------------------------------------
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
I/O error during "CreateFile (open)" operation for file "C:\MYBD\BD3.FDB".
Error while trying to open file.
The system cannot find the file specified. .

Attempting to connect to services manager... Passed!

Disconnecting from database... Passed!

Я так понимаю, что файла этого нет, а разве он его сам не создает?

----------------------------------------------------------------
С этим разобрался. Надо было сначала базу данных создать, а уже потом ее регистрировать.
Поспешишь - людей насмешишь (опять!):
Error Message:
----------------------------------------
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

Добавлено:
странно, в одном случае сервер (local), в другом localhost (надо самому вводить)

Не могу создать таблицу в базе данных (эти опции не активны в меню), предположительно это из-за ошибки доступа - не может подсоединиться, только почему я не пойму! Чисто административные проблемы, наверное, не люблю я такие проблемы - совсем это не программирование!
Автор: volser
Дата сообщения: 22.06.2009 21:35
Kursist

Цитата:
Delphi2007


Для полной поддержки unicode нужно использовать Delphi2009.
Автор: X11
Дата сообщения: 22.06.2009 21:50

Цитата:
IBExpert не является unicode-приложением

Если быть внимательным, то ты не прав.

Добавлено:

Цитата:
Для полной поддержки unicode нужно использовать Delphi2009.

Или компоненты типа TNT или DevExpress, или TMS

Добавлено:

Цитата:
Тест не работает - ругается!

Сочувствую. Жди телепатов.

Добавлено:

Цитата:
Я так понимаю, что файла этого нет, а разве он его сам не создает?

В эксперте выбери меню Создать новую базу. А ты что, подключаешься к несуществующей?

Добавлено:
У тебя Firebird-то хоть установился? Запущен?
Что даёт
telnet localhost 3051?
У тебя сетевой экран установлен? Антивирус установлен?
Автор: volser
Дата сообщения: 22.06.2009 22:05
X11


Цитата:
...или DevExpress


Начиная с Delphi2009.


Цитата:
...или или TMS


Пакет для работы с unicode есть, но сами визуальные компоненты компоненты не являются unicode, поскольку построены на vcl.
Автор: Kursist
Дата сообщения: 22.06.2009 22:52
X11

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

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


Цитата:
Dinamic SQL error
SQL code = -104
Token unknown - line 2, column 56
FILE


У меня в таблице нет столько полей/столбцов!

Добавлено:
Объясните, если возможно, почему в IBExpert регистрируешь базу данных, тестируешь - ОК:
-------------------------------
(Attempting to connect to:
LOCALHOST:C:\myBD\BD4.fdb
Connecting... Passed!
Server version: WI-T6.3.0.23247 Firebird 2.5 Beta 1
Attempting to connect to services manager... Passed!
Disconnecting from database... Passed!
-------------------------------

А когда пытаешься подключиться к базе данных, то выдает ошибку:
------------------------------
Error Message:
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

(перевод:
Неудачное выполнение, вызванное ошибкой системы, которая устраняет успешное выполнение последующих утверждений.
Ваше имя пользователя и пароль не определены. Попросите, чтобы Ваш администратор базы данных настроил логин Firebird.)
С чего бы это!? Но ведь и user и password - введены регистрационную информацию! И тестовое подключение проходит успешно! Что за чушь!?

Добавлено:
Понял!
Ошибка появляется, когда выставляешь галочку:
Trusted authentication - снимаешь галочку - подключается без ошибки, с галочкой - ошибка! Только почему?!
Автор: X11
Дата сообщения: 23.06.2009 08:23

Цитата:
Trusted authentication

Читай про Windows авторизацию в Firebird
Автор: Kursist
Дата сообщения: 24.06.2009 13:46
Можете подсказать, как в IBExpert в уже созданной таблице удалить поле?
Автор: volser
Дата сообщения: 24.06.2009 14:03
Kursist

Открыть таблицу. Перейти на закладку поля. Правой клавишей нажать на нужное поле. Выбрать пункт меню "Удалить поле..."
Автор: Kursist
Дата сообщения: 24.06.2009 14:39
Правый клик мышкой по полю.
В popup-меню:
New Filed
Edit Field
Drop Field
Create Foreign Key..
Reorder Fields
Copy Fields list to clipboard

Нет у меня "Delete Field"!

Если бы это было так очевидно, я бы не спрашивал.

Во вкладке DDL хотел удалить строку создания поля, в команде создание таблицы, но не разрешает..
Автор: data man
Дата сообщения: 24.06.2009 14:53
Kursist
1. Если не открыт Эксплорер БД - нажать F11.
2. В нем (обычно он слева), в списке таблиц, найти нужную.
3. В списке полей, правый клик, в меню "Удалить поле" или нажать Ctrl-Del.

Если поле только одно, то удалить его таким образом нельзя.

P.S.
А какая версия IBExperta ?
Автор: Kursist
Дата сообщения: 24.06.2009 15:06
data man

IB Expert - The Most Expert for InterBase, Firebird and Yaffil
Copyright (C) 2000-2009 IBExpert KG
All rights reserved.

Version 2009.06.22

Полей несколько.
Команды "удалить поле" - НЕТ!

Цитата:
В popup-меню:
New Filed
Edit Field
Drop Field
Create Foreign Key..
Reorder Fields
Copy Fields list to clipboard


<ctrl>+<del> не реагирует.
Автор: volser
Дата сообщения: 24.06.2009 15:07
Kursist

Цитата:
Команды "удалить поле" - НЕТ!


А это что?
Цитата:
Drop Field

Автор: Kursist
Дата сообщения: 24.06.2009 15:08

Цитата:
Drop Field


А! Это и есть УДАЛИТЬ! Бл...! (Извиняюсь!)
Автор: data man
Дата сообщения: 24.06.2009 15:25
Kursist
Может стоит переключить интерфейс IBExperta'а на русский ?
P.S. Здесь cсылка лежит более новый перевод, чем в инсталле.
Автор: Kursist
Дата сообщения: 24.06.2009 15:38
data man
в настройках язык интерфейса только English (Default)

Ещё вопрос:
У меня по закрытию формы проиходит отсоединение от базы данных:
IBDatabase1.Close;
А почему в Дельфи, по возвращению в среду IBDatabase1.Connected=TRUE
, это свойство не должно переходить в FALSE?


Добавлено:
IBExpert
Опять натолкнулся на проблему:
Пытаюсь связать 2 таблицы (ORDERS и CLIENTS),

Вот такой скрипт получается:

alter table ORDERS
add constraint FK_ORDERS_1
foreign key (CLIENTS_NAME)
references CLIENTS(NAME)

This operation is not defined for system tables.
unsuccessful metadata update.
could not find UNIQUE or PRIMARY KEY constraint in table CLIENTS with specified columns.

Это что? Название моей таблицы CLIENTS совпало с названием системной таблицы? Разве у системных таблиц нет каких-то префиксов?
Автор: data man
Дата сообщения: 24.06.2009 15:49
Kursist
Инсталлируешь это.
Потом в папке IBExpert'а Languages заменяешь Russian.lng на это.
А самый последний IBExpert лежит здесь, меняется очень часто.


Цитата:
это свойство не должно переходить в FALSE?

Конечно не должно ! Как среда узнает, что программа изменила ?
Может она вообще винт отформатировала - за всем не уследишь

Автор: Kursist
Дата сообщения: 24.06.2009 15:56
Обозвал таблицу CLIENTS теперь ее удалить даже не могу! Выдает сообщение, что системную таблицу удалять нельзя! (А почему при создании таблицы не проверялось ее название на идентичность с другими таблицами!?)
И что делать?
Автор: data man
Дата сообщения: 24.06.2009 15:56
Английским-же по белому написано:

Цитата:
could not find UNIQUE or PRIMARY KEY constraint in table CLIENTS with specified columns.

Чтобы связать таблицы нужно, чтобы в таблице CLIENTS был УНИКАЛЬНЫЙ ключ.

Лучше добавить автоинкрементные поля ID обе таблицы и связывать по ним.

Таких системных таблиц нет.
Автор: jonikDk
Дата сообщения: 24.06.2009 15:58
Kursist
я погляжу ты совсем не хочешь читать книги и ссылки которые тебе давали. Зря ты так.
Там все жевано пережевано... Учись учиться, а не терять время попусту на форумах.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

Предыдущая тема: Сравнение двух строк


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.