Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-1096248576
Артем К.
2004-09-27 05:29
2004.10.10
Здравствуйте, Мастера. Как разбить строку на лексемы?


3-1094990342
Snip
2004-09-12 15:59
2004.10.10
IB и Boolean (TDBCheckBox)


14-1095931679
Petr V. Abramov
2004-09-23 13:27
2004.10.10
Кафе "Бульварное" снова открылось


9-1084737397
Жириновский_
2004-05-16 23:56
2004.10.10
как лучше сделать бой в рпг?


3-1095238349
Донской
2004-09-15 12:52
2004.10.10
BOF или EOF имеет значение true в adodataset.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский