Форум: "Потрепаться";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизFireBird... Найти похожие ветки
← →
Knight © (2004-09-17 14:36) [0]У кого есть список типов данных? Ищу-ищу, а оно никак не находится...
← →
jack128 © (2004-09-17 14:40) [1]Knight © (17.09.04 14:36)
плохо ищешь. Не ужто в LANGREF.PDF нету??
← →
Knight © (2004-09-17 14:43) [2]
> jack128 © (17.09.04 14:40) [1]
> Knight © (17.09.04 14:36)
> плохо ищешь. Не ужто в LANGREF.PDF нету??
У меня такого нет... щас поищу...
← →
1008 © (2004-09-17 14:43) [3]http://www.ibase.ru/
← →
Knight © (2004-09-17 14:49) [4]
> jack128 © (17.09.04 14:40) [1]
Спасибо за имя файла...
> 1008 © (17.09.04 14:43) [3]
> http://www.ibase.ru/
Там и нашёл, Был и до этого, но видать как-то пролиснул не аккуратно... диалап, смотреть очень подробно времени нет... :)
http://www.ibase.ru/ib6.htm
← →
Knight © (2004-09-17 19:08) [5]Поясните, кому не сложно, как выбирается значение параметра PAGE_SIZE при создании базы.
← →
jack128 © (2004-09-17 19:15) [6]Knight © (17.09.04 19:08) [5]
Как бог на душу положит ;-) Обычно ставят 4к
Для начала достаточно знать, что Ib читает с диска именно страницами. То есть даже если нужно прочитать только один байт - все равно читается PAGE_SIZE байт. И если нужэно увеличеть размер базы на 1 байт, тот реально увеличение идет на PAGE_SIZE.
← →
wisekaa © (2004-09-17 19:20) [7]http://www.ibase.ru/devinfo/0116.htm
http://www.ibase.ru/devinfo/tablesize.htm
http://www.ibase.ru/devinfo/0113.htm
← →
Knight © (2004-09-17 19:36) [8]Спасибо...
IB дает 4-х варианта выбора -
1024 - сликом маленький
2048 - не такой большой
4096 - то что надо
8192 - никогда не видела чтобы работало лучше чем 4096.
Для NTFS (Windows NT) лучше всего отформатировать раздел с размером кластера 4К для размещения баз данных. Соответственно, у всех баз данных, помещаемых в таком разделе, лучше выбрать размер страницы 4К. Размер страниц 1К, 2К и 8К будет приводить к лишним чтениям с диска (1К, 2К) или лишней записи (8К).
Получается - 4096
← →
Knight © (2004-09-17 23:20) [9]Прочитал, что для русского текста нужно прописывать
- или параметром DEFAULT CHARACTER SET WIN1251 при создани базы
- или у текстового поля CHARACTER SET WIN1251 при создании таблицы
, но у меня почему-то в любом случае при создании таблицы начинает выскакивать ошибка "unsuccessful metadata update" + имя таблицы, что тут не так?
← →
jack128 © (2004-09-17 23:22) [10]а как ты базу/таблицы создаешь?? Скачай IBExpert и не мучайся.. Он free для ex ussr
← →
Knight © (2004-09-17 23:39) [11]
IBDatabase.DatabaseName:=Stockman.DBPath+Name+"\Base.fdb";
IBDatabase.Params.Clear;
IBDatabase.Params.Append("USER "SYSDBA"");
IBDatabase.Params.Append("PASSWORD "MASTERKEY"");
IBDatabase.Params.Append("PAGE_SIZE 4096");
// IBDatabase.Params.Append("DEFAULT CHARACTER SET WIN1251");
IBDatabase.CreateDatabase;
Вроде нормально создаётся...
← →
jack128 © (2004-09-18 00:21) [12]Knight © (17.09.04 23:39) [11]
кавычки для логина и пароля должны быть одинарными. и пароль - "masterkey"
← →
jack128 © (2004-09-18 00:23) [13]все таки советую обратить внимание на Ibexpert. ответ на твой вопрос я получил, анализируя скрипт этой программки. И вообще удобная вещь..
← →
Knight © (2004-09-18 09:59) [14]
> jack128 © (18.09.04 00:23) [13]
А что ответил? Про кавычки и пароль? Так кавычки и так одинаковые и с паролем с этим всё работает... только вот таблицы в базе с поддержкой русского не создаются. Если текстовое поле убрать или заменить тип, например, на INTEGER, то и таблицы создаются... почитал тут док на работе, который забыл вчера домой забрать, там пишется, что проблема возможна из-за:Проблемы с созданием БД с кодировкой WIN1251 могут быть если у Вас бета-версия Delphi. Еще одна причина - пробелы в имени каталога, в котором
находятся файлы локального IB (Program Files\Borland\Delphi X.0\IntrBase), или база данных (gdb-файл).
Но пути без пробелов и база fdb... Попробую ещё вечером установить 6-ую или 7-ую может и правда с Delphi проблема, хотя вроде не бета, но с другой стороны от пиратов можно всего ожидать :)
← →
Knight © (2004-09-18 22:50) [15]Поставил шестой... проблема с кодовой страницей пропала... а мне так нравился пятый, но пусть будет шестой, по крайней мере его ещё не успели так покромсать, в отличии от седьмого.
← →
Knight © (2004-09-20 22:58) [16]Еще вопрос... надеюсь последний :)
Как реализовать автоинкрементное поле?
← →
jack128 © (2004-09-20 23:02) [17]Knight © (20.09.04 22:58) [16]
ключевое слово "генераторы"
← →
Zacho © (2004-09-20 23:08) [18]2 Knight © :
Ответы на все твои вопросы есть на http://www.ibase.ru/develop.htm
Например, http://www.ibase.ru/devinfo/ibrusfaq.htm
http://www.ibase.ru/devinfo/generator.htm
И т.д. и т.п. ..
← →
Knight © (2004-09-20 23:58) [19]>> [18] Zacho © (20.09.04 23:08)
спасибо, это я читал... да вот на практике, что-то не получается :(
> [17] jack128 © (20.09.04 23:02)
> ключевое слово "генераторы"
То что тут надо генераторы и триггеры, это я понял, но пробую-пробую, а оно никак не работает... :(
Одно слово - Paradox, привык к типу AUTOINC :)
Создаю генератор для хранения последнего номера:CREATE GENERATOR get_ref_id;
Создаю триггер для обработки события вставки новой записи:CREATE TRIGGER set_new_ref_id FOR t_ref
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.REF_ID = GEN_ID(get_ref_id, 1);
END
А когда делаю вставку, он работает с тем значение, которое укажу...INSERT INTO t_ref VALUES ([значение для REF_ID],...);
если указанное число уникально, то вставляет число,
иначе - выдаёт ошибку.
Хотя в статье http://www.ibase.ru/devinfo/generator.htm
написано "Поскольку триггер меняет значение первичного ключа вставляемой записи,..." Почему он у меня ничего не меняет?
← →
DrPass © (2004-09-21 00:19) [20]
> А когда делаю вставку, он работает с тем значение, которое
> укажу...
А ты не указывай - для чего тебе триггер дан? Или если хочешь сам контролировать значение, убери триггер, и вместо него ручками выбирай значение из генератора (вроде select gen_id(..., 1) from rdb$database), и подставляй
← →
Knight © (2004-09-21 00:52) [21]Так не реагирует он... если делаю
insert into t_ref (ref_name,ref_desc) values ("name4","Пояснение");
Ругается, что не может присвоить REF_ID значение NULL...
← →
Knight © (2004-09-21 01:27) [22]
> DrPass © (21.09.04 00:19)
Хотелось бы с триггерами разобраться... весчь-то полезная :)
← →
P.N.P. © (2004-09-21 02:47) [23]>Knight © (21.09.04 01:27) [22]
А что с ними разбираться?
http://ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_intro_sp_trig
(правда на аглицком, но думаю будет понятно.)
← →
Knight © (2004-09-21 08:49) [24]Так я вроде понял, но не срабатывает... :(
Ладно почитаю ещё это, вечером попробую... Спасибо :)
← →
wisekaa © (2004-09-21 10:17) [25]Генератор:
CREATE GENERATOR NACHISL_GEN;
Таблица:
CREATE TABLE NACHISL (
ID INTEGER NOT NULL,
TYPE_ INTEGER DEFAULT 0 NOT NULL,
NAME VARCHAR(150) NOT NULL);
ALTER TABLE NACHISL ADD CONSTRAINT PK_NACHISL PRIMARY KEY (ID);
CREATE INDEX IDX_NACHISL_NAME ON NACHISL (NAME);
Тригер
CREATE TRIGGER INCNACHISL FOR NACHISL
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.n_id IS NULL) THEN NEW.n_id = GEN_ID(NACHISL_GEN, 1);
END;
Вставка в таблицу:
INSERT INTO nachisl (type_, name) VALUES (1, "Оклад");
Все работает.
← →
Romkin © (2004-09-21 10:28) [26]Угу. Именно
IF (NEW.n_id IS NULL) THEN NEW.n_id = GEN_ID(NACHISL_GEN, 1);
мне больше всего нравится. То есть, если значение есть - принимаем его, если не задано - генерируем. Это удобно.
← →
Romkin © (2004-09-21 11:01) [27]А, да, забыл сказать, почему удобно :)
Дело в том, что я привык получать новый ID сразу, в обработчике OnNewRecord, делая запрос select GEN_ID(NACHISL_GEN, 1) from rdb$database. И тогда триггер не будет ничего менять, и первичный ключ сразу известен, это удобно при связке мастер-деталь :)
← →
Knight © (2004-09-21 12:19) [28]> wisekaa © (21.09.04 10:17) [25]
> Генератор:
> CREATE GENERATOR NACHISL_GEN;
У меня:CREATE GENERATOR get_ref_id;
> Таблица:
> CREATE TABLE NACHISL (
> ID INTEGER NOT NULL,
> TYPE_ INTEGER DEFAULT 0 NOT NULL,
> NAME VARCHAR(150) NOT NULL);
>
> ALTER TABLE NACHISL ADD CONSTRAINT PK_NACHISL PRIMARY KEY
> (ID);
У меня:CREATE TABLE t_ref (
ref_id INTEGER NOT NULL,
ref_name VARCHAR(32) NOT NULL,
ref_desc VARCHAR(256) NOT NULL,
PRIMARY KEY (ref_id));
> Тригер
> CREATE TRIGGER INCNACHISL FOR NACHISL
> ACTIVE BEFORE INSERT POSITION 0
> AS BEGIN
> IF (NEW.n_id IS NULL) THEN NEW.n_id = GEN_ID(NACHISL_GEN, 1);
> END;
У меня:CREATE TRIGGER set_ref_id FOR t_ref
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
NEW.ref_id = GEN_ID(get_ref_id, 1);
END;
> Вставка в таблицу:
> INSERT INTO nachisl (type_, name) VALUES (1, "Оклад");
У меня:INSERT INTO t_ref (ref_name, ref_desc) VALUES
("name1", "Комментарий");
> Все работает.
А у меня Exception - NULL"у в ref_id не место...
> Romkin © (21.09.04 11:01) [27]
> А, да, забыл сказать, почему удобно :)
Удобство понятно, но когда не работает, то тут уж не до удобств, хоть бы раз сработало...
Думал генератор не создался, запустилselect GEN_ID(NACHISL_GEN, 1) from rdb$database
есть значение...
Думал, может триггера нет... попробовал создать ещё раз, тут же выскочил Exception, типа - "Куда мне второй?! Я ещё не знаю, что мне с первым делать..." :)
Кстати, может для триггеров ещё какая библиотека нужна, кроме gds.32? Хотя это-же Delphi... он бы молчать не стал, послал бы сразу и далеко %)
← →
wisekaa © (2004-09-21 12:28) [29]Не верю, колись наверное наложил ограничения дополнительные на поле или создал тригер на после вставки.
P.S. Если не лень вышли БД (можно только с этой таблицой) на wisekaapost_собака_mail.ru
← →
Romkin © (2004-09-21 12:32) [30]А вполне может быть, что это сам компонент ореть :))
ТЫ required у поля сними, да?
← →
P.N.P. © (2004-09-21 12:38) [31]А еще есть такое свойство у компонентов IBX - GeneratorField...
← →
Knight © (2004-09-21 15:57) [32]> wisekaa © (21.09.04 12:28) [29]
> Не верю,
Станиславский... блин :)
> колись наверное наложил ограничения дополнительные
Это вы, монстры, а у меня всё сверх просто.
> или создал тригер на после вставки.
Минимальные познания в английском всё же имею и BEFORE от AFTER пока отличаю %)
> P.S. Если не лень вышли БД (можно только с этой таблицой)
> на wisekaapost_собака_mail.ru
Зачем высылать? Я те прямо тут нарисую, ведь у меня база не рабоче-гиганская, а тестово-минимальная... но только вечером...
> Romkin © (21.09.04 12:32) [30]
> А вполне может быть, что это сам компонент ореть :))
А для чего тогда СУБД если компоненты за неё думают?
> ТЫ required у поля сними, да?
Это уже похоже на подпорки... такое "лишь бы заработало" меня устраивает мало :)
> P.N.P. © (21.09.04 12:38) [31]
> А еще есть такое свойство у компонентов IBX - GeneratorField...
Не видел... посмотрю
← →
wisekaa © (2004-09-21 18:30) [33]Провел эксперемент, создал базу с одной твоей таблицей!
Выводы:
Ты скорее всего вставляешь запись в таблицу через компонент TTable, при этом на стороне клиента происходит проверка на то, что поле ref_id должно иметь значение, отсуда и ошибка.
Решение:
1. Вариант - делать вставку значений через SQL
2. Вариант - добавить все поля (кроме ref_id) в IBTable (Fields Editor...)
3. Вариант - не совсем коректный, в качестве ref_id для новой записи можно подставлять 0, тогда проверка пройдет, а генератор присвоит в твоем случае (реализация триггера) новый ref_id.
P.S. Тестовый проект лежит на www.wisekaa.fatal.ru\test_knight.exe
← →
Knight © (2004-09-21 18:54) [34]> [33] wisekaa © (21.09.04 18:30)
> Провел эксперемент, создал базу с одной твоей таблицей!
> Выводы:
> Ты скорее всего вставляешь запись в таблицу
> через компонент TTable, при этом на стороне клиента происходит
С базой работаю через: TIBDatabase, TIBQuery, TIBTransaction...
> Решение:
> 1. Вариант - делать вставку значений через
> SQL
В смысле сменить TIBQuery на TIBSQL?
> 2. Вариант - добавить все поля (кроме ref_id)
> в IBTable (Fields Editor...)
Не привык использовать ни TTable, ни TIBTable.
> 3. Вариант - не совсем коректный, в качестве
> ref_id для новой записи можно подставлять 0, тогда проверка
> пройдет, а генератор присвоит в твоем случае (реализация
> триггера) новый ref_id.
Про это уже писал... не работает.
> P.S. Тестовый проект лежит на www.wisekaa.fatal.ru\test_knight.exe
Щас с частных страничек ничего кроме html и pdf не качаю... антивиря нет :)
← →
Vlad © (2004-09-21 19:04) [35]
> Knight © (21.09.04 18:54) [34]
> С базой работаю через: TIBDatabase, TIBQuery, TIBTransaction...
Просто так пробовал запустить свой запрос, ну скажем через IBExpert ?
А вобще, судя по всему правильный ответ дал Romkin © (21.09.04 12:32) [30]
у поля (TField) ref_id нужно свойство Required=false поставить
← →
Knight © (2004-09-21 19:09) [36]
> [35] Vlad © (21.09.04 19:04)
> у поля (TField) ref_id нужно свойство Required=false поставить
А это через чего? Или просто NOT NULL снять?
← →
Vlad © (2004-09-21 19:12) [37]
> Knight © (21.09.04 19:09) [36]
> Или просто NOT NULL снять?
не в коем случае. Т.е. в самой базе ничего не меняй.
Берем IBQuery, дважды по нему щелкаем мышью, появляется Fields Editor, выбираем пункт меню Add all fields. Получаем список полей. Встаем на нужное поле (ref_id) и ставим свойство required=false
← →
jack128 © (2004-09-21 19:12) [38]Knight © (21.09.04 19:09) [36]
правая кнопка по IbDataSet - Fields Editor, снова правой кнопкой "Add all fields". Далее у нужного поля в инспекторе объектов выставляешь Required=false
← →
Knight © (2004-09-21 19:20) [39]
> [38] jack128 © (21.09.04 19:12)
> Knight © (21.09.04 19:09) [36]
> правая кнопка по IbDataSet - Fields Editor, снова правой
> кнопкой "Add all fields". Далее у нужного поля в инспекторе
> объектов выставляешь Required=false
Не... это разврат... я базу конекчу по ходу дела в Runtime"е...
← →
jack128 © (2004-09-21 19:21) [40]Knight © (21.09.04 19:20) [39]
И что это меняет??
Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.031 c