Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание подстановочных полей  (Прочитано 12926 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sal
Гость
« : 27-12-2004 08:28 » 

Вопрос такой. Есть грид, из которого данные заносятся в Interbase. Есть поле времени, ну допустим запишем туда 13:00. Вопрос в следующем: как сделать подстановку, чтобы по умолчанию в этом столбце грида уже было допустим 00:00 и необходимо было ввести только 4 числа, знак разделения подставился бы автоматически.
Записан
baldr
Команда клуба

ru
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #1 : 27-12-2004 12:18 » 

Используй TMaskEdit. Или, еще лучше, TDateTimePicker с коротким форматом времени.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
sal
Гость
« Ответ #2 : 28-12-2004 06:25 » 

Ок. Уже понял. Есть еще один вопрос. Как мне сделать так, чтобы при создании новой записи/строки в таблице (Interbase) её ID создавался автоматически. К примеру, последний номер будет 58, после чего мы создаем новую запись и ей присваивается номер 59. Насколько я понял есть 2 возможности реализации. Непосредственно в Interbase через генераторы и средствами Delphi. Что лучше и как это реализовать?
Записан
baldr
Команда клуба

ru
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #3 : 28-12-2004 08:07 » 

Сделай поле уникальным и автоинкрементным. Это оно и есть. Настраивается когда ты создаешь таблицу.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
sal
Гость
« Ответ #4 : 28-12-2004 08:15 » 

все хорошо, только где? В Interbase или Delphi?
Записан
baldr
Команда клуба

ru
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #5 : 28-12-2004 09:07 » 

В Interbase, если таблицу создаешь там.
(Бывает, но редко, что таблицу создают запросом. Тогда, естественно, при создании указывают в Делфе)
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 28-12-2004 19:14 » 

InterBase не поддерживает автоинкрементный тип поля. Используйте генератор+триггер "before insert" на соответствующее поле. Генератор лучше тем, что работает вне контекста транзакций. Средствами Делфи можно решать только в том случае, если у вас монопольный доступ к базе данных.
« Последнее редактирование: 28-12-2004 20:06 от Oldy » Записан

С уважением, Oldy.
sal
Гость
« Ответ #7 : 29-12-2004 06:08 » 

Спасибо за ответ. Но не могли бы вы поподробнее описать процедуру создания связки генератор+триггер
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 29-12-2004 10:02 » 

CREATE TABLE MyTable (
ID integer NOT NULL PRIMARY KEY
NAME varchar(20)
);

CREATE GENERATOR Gen_MyTable_ID;

CREATE TRIGGER MyTable_ID FOR MyTable
BEFORE INSERT POSITION 0
AS BEGIN
NEW.ID = GEN_ID(GEN_MyTable_ID, 1)
END;
« Последнее редактирование: 29-12-2004 10:09 от Oldy » Записан

С уважением, Oldy.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #9 : 29-12-2004 22:44 » 

только при такой реализации придётся жёстко завершать транзакцию с переоткрытием таблицы (CommitRetaining не поможет), иначе новые значения ID не будут видны.
Записан

sal
Гость
« Ответ #10 : 30-12-2004 07:44 » 

Мне удалось создать тригер и генератор и всё заработало, но на уровне базы. Но есть одна большая проблема. Delphi пишет, что ключевое поле должно быть обязательно заполнено. Это и логично, так как в самой базе напротив ключевого поля стоит, что это обязательное поле. Так фишка в том, что не получится создать КЛЮЧЕВОЕ ПОЛЕ и не сделать его не ОБЯЗАТЕЛЬНЫМ. Где же истина Улыбаюсь
Записан
sal
Гость
« Ответ #11 : 30-12-2004 07:45 » 

x77, так может ты предложишь свой вариант, как это лучше реализовать.
Записан
sal
Гость
« Ответ #12 : 30-12-2004 08:26 » 

Ведь посудите сами, это просто классика жанра!!! Должен же быть какой то классический вариант. Улыбаюсь
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 30-12-2004 11:37 » 

Простите, но мне кажется, что вы смешали два жанра. То есть пытаетесь работать с SQL сервером навигационыым способом. Делайте вставку в таблицу SQL - запросом (для ключевого поля - NULL), а не из грида и будет вам счастье.
В гриде-же, весьма возможно, нужно написать какой нибудь обработчик на изменения соответствующего поля. И тоже можно ожидать счастья. Улыбаюсь
Записан

С уважением, Oldy.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #14 : 31-12-2004 09:01 » 

sal, найди в свойствах поля Required и поставь в FALSE. должо работать. кроме того, если ты работаешь через IBX, то там для поля можно указывать генератор. при вставке у тебя будет автоматически выполнен запрос вида insert into table1 (field1, field2) values (gen_id (указанный_генератор, 1), :field2).

кстати, Oldy, любое действия над таблицей в дельфях всё равно выльется в выполнение того ли иного запроса Улыбаюсь жанр смешиваем не мы, а БагЛанд, которые глючные бдешные компоненты, со воими сраными буферами, сделал предками всех прочих компонент для работы с базами данных. в т.ч. и с теми, где эта буферизация сто лет не нужна. для работы с иб я всегда ползую TIbSql, который унаследован от TComponent а не от TDataSet. есс-но, от db-aware контролов пришлось отказаться. но выйгрыш по скорости просто фантастический, + не приходится возиться с глюками гридов и прочими прелестями.
Записан

Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 31-12-2004 13:15 » 

х77, я полностью с тобой  согласен. Наверное потому, что мне по долгу службы приходится работать с таблицами  в десятки миллионов записей я не связываюсь ни с гридами и с компонентами-наследниками от TDataSet. Более того, постарался о них забыть. Улыбаюсь А вот на API ни как не перелезу, больно много переделывать Жаль
Записан

С уважением, Oldy.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines