C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Добавить много записей
GIZMO
Отправлено: 13.01.2005, 10:46


Машинист паровоза

Группа: Участник
Сообщений: 174



Привет!
Есть IB6 + IBX5 + BCB5, а также две таблицы следующей структуры (упрощенно)
CODE

CREATE TABLE "TABLE1"
(
 "ID" INTEGER NOT NULL,
 "NAME" CHAR(30) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
PRIMARY KEY ("ID")
);
CREATE TABLE "TABLE2"
(
 "NUM" INTEGER NOT NULL,
 "ID" INTEGER NOT NULL,
 "CODE" INTEGER NOT NULL,
 "NAME" CHAR(30) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
PRIMARY KEY ("NUM")
);

нужно вставлять в таблицу TABLE2 записи "в массовом порядке" (не по одной). Полям ID, NAME должны присваиваться значения по результатам выборки из TABLE1, NUM присваивается уникальное значение, а CODE — для каждой вставляемой группы записей свое (допустим для одной партии 1, для др. 2) и должно вводится "извне". Делаю:
CODE

INSERT INTO TABLE2 (ID, NAME)
SELECT ID, NAME
FROM TABLE1
WHERE<...>;

с NUM, ID, NAME все понятно, а как быть с CODE?
AVC
Отправлено: 13.01.2005, 12:49


Ветеран

Группа: Модератор
Сообщений: 1583



Чем определяется группа?
Вариант — вставлять Null и заполнять в триггере генератором.
GIZMO
Отправлено: 13.01.2005, 15:32


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (AVC @ 13/01/2005, 13:51)
Чем определяется группа?
Вариант — вставлять Null и заполнять в триггере генератором.

Группа определяется WHERE.

Как передать в триггер значение напр. из Edit?
olegenty
Отправлено: 13.01.2005, 15:45


Ветеран

Группа: Модератор
Сообщений: 2412



не в триггер ты его будешь передавать, а поле заполнять при вставке, либо параметр передавать запросу на insert/хранимой процедуре

в триггере же всё просто, значение вставляемого поля = NEW.<имя поля>.
например, поле X можно заполнить так:
CODE

IF (NEW.X IS NULL) THEN
   NEW.X = GEN_ID(<ИМЯ ГЕНЕРАТРА>, <ШАГ, ПО УМОЛЧАНИЮ = 1>)
AVC
Отправлено: 13.01.2005, 15:46


Ветеран

Группа: Модератор
Сообщений: 1583



Если у вас группа определяется Where, то значит все добавляемые строки принадлежат одной группе и, значит, можно писать так
INSERT INTO TABLE2 (ID, NAME, code)
SELECT ID, NAME, номер_группы
FROM TABLE1
WHERE<...>;

QUOTE

Как передать в триггер значение напр. из Edit?

Естественным способом никак. Но можно найти обходные пути.
GIZMO
Отправлено: 14.01.2005, 10:46


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (AVC @ 13/01/2005, 16:48)
Если у вас группа определяется Where, то значит все добавляемые строки принадлежат одной группе и, значит, можно писать так
INSERT INTO TABLE2 (ID, NAME, code)
SELECT ID, NAME, номер_группы
FROM TABLE1
WHERE<...>;

Все с ручника снял!
Почему-то решил, что праметр в INSERT+SELECT передать нельзя.
Я с БД только неделю назад начал работать так, что возможно еще какое-то время глупые вопросы будут от меня поступать. Извиняюсь...
avc*
Отправлено: 14.01.2005, 11:36


Не зарегистрирован







Ничего. Со всеми бывает. smile.gif

Вернуться в Работа с базами данных в C++Builder