Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на добавление в одной таблице / 12 сообщений из 12, страница 1 из 1
29.09.2004, 13:21:06
    #32716519
nixon1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на добавление в одной таблице
Есть таблицa table (ID - ключ, name, type1, type2).
Она забита записями.
Необходимо выбрать из таблицы все записи где
- (type1<>1) and (type1<>2)
- type2=3
Не удаляя старые записи добавить выбранные записи в ету же таблицу :
- новым значением ключа
- с типом type2=4
- c name = name+"зап. часть"
- type1 - без изменения.

Пробую - так, не то.
Код: plaintext
1.
2.
3.
4.
INSERT INTO table ( ID, name, type1, type2)
SELECT Max(table.ID)+ 1 , table.name+" ", table.type1, 4 
FROM table
WHERE (((table.type1)<> 1 )) OR (((table.type1)<> 2 )) AND (table.type2= 3 ) ;
Спасибо.
...
Рейтинг: 0 / 0
29.09.2004, 13:23:12
    #32716524
nixon1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на добавление в одной таблице
Забыл, "зап. часть"

Код: plaintext
1.
2.
3.
4.
INSERT INTO table ( ID, name, type1, type2)
SELECT Max(table.ID)+ 1 , table.name+"зап. часть ", table.type1, 4 
FROM table
WHERE (((table.type1)<> 1 )) OR (((table.type1)<> 2 )) AND (table.type2= 3 ) ;
...
Рейтинг: 0 / 0
29.09.2004, 13:53:48
    #32716610
Ort84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на добавление в одной таблице
nixon1Забыл, "зап. часть"

Код: plaintext
1.
2.
3.
4.
INSERT INTO table ( ID, name, type1, type2)
SELECT Max(table.ID)+ 1 , table.name+"зап. часть ", table.type1, 4 
FROM table
WHERE (((table.type1)<> 1 )) OR (((table.type1)<> 2 )) AND (table.type2= 3 ) ;


Твой запрос не пойдет, т.к. SELECT содержит статическую функцию,а GROUP BY нет. Попробуй:

INSERT INTO table ( ID, name, type1, type2)
SELECT Max(table.ID)+1, table.name+"зап. часть ", table.type1,4
FROM table
WHERE (((table.type1)<>1)) OR (((table.type1)<>2)) AND (table.type2=3)
GROUP BY table.ID,table.name,table.type2;

А что, у тебя ID не счетчик?
...
Рейтинг: 0 / 0
29.09.2004, 15:31:53
    #32716951
nixon1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на добавление в одной таблице
Поле ID просто числовое. А увеличение значение ключа на единицу стоит в форме в которой вводяться нровые позиции (в свойстве Значение по умолчанию "=Nz(DMax("ID";"Table");0)+1".

а запрос не работает..
...
Рейтинг: 0 / 0
29.09.2004, 15:39:46
    #32716985
Ort84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на добавление в одной таблице
nixon1Поле ID просто числовое. А увеличение значение ключа на единицу стоит в форме в которой вводяться нровые позиции (в свойстве Значение по умолчанию "=Nz(DMax("ID";"Table");0)+1".

а запрос не работает..

А что пишет? Где ругается?
Очепятка: GROUP BY table.ID,table.name,table.type1
...
Рейтинг: 0 / 0
29.09.2004, 15:51:10
    #32717022
Гость1234
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на добавление в одной таблице
Вместо Max(table.ID)+1 надо вставить что-то типа (Select Max(table.ID) From Table)+Table.ID
Потому как все вышеприведенные конструкции выдавали Id равный Id существующей записи.
То что я предложил страдает одним недостатком id будет сильно расти.
Если требуется сделать приращение 1, то лучше
сделать так
INSERT INTO table ( ID, name, type1, type2)
SELECT (Select Max(table.ID) From Table)+Plus(), table.name+"зап. часть ", table.type1,4
FROM table
WHERE (((table.type1)<>1)) OR (((table.type1)<>2)) AND (table.type2=3)
GROUP BY table.ID,table.name,table.type1

Где Plus это функция увеличивающая переменную, обнуленную перед выполнением запроса
Public Id as Integer

Public function Plus()
Id=Id+1
Plus=Id
end function
...
Рейтинг: 0 / 0
29.09.2004, 16:09:01
    #32717073
Ort84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на добавление в одной таблице
Гость1234Вместо Max(table.ID)+1 надо вставить что-то типа (Select Max(table.ID) From Table)+Table.ID
Потому как все вышеприведенные конструкции выдавали Id равный Id существующей записи.
То что я предложил страдает одним недостатком id будет сильно расти.
Если требуется сделать приращение 1, то лучше
сделать так
INSERT INTO table ( ID, name, type1, type2)
SELECT (Select Max(table.ID) From Table)+Plus(), table.name+"зап. часть ", table.type1,4
FROM table
WHERE (((table.type1)<>1)) OR (((table.type1)<>2)) AND (table.type2=3)
GROUP BY table.ID,table.name,table.type1

Где Plus это функция увеличивающая переменную, обнуленную перед выполнением запроса
Public Id as Integer

Public function Plus()
Id=Id+1
Plus=Id
end function

Странно, у меня выполняется просто с Max(table.ID)+1. Никаких повторяющихся ID...
...
Рейтинг: 0 / 0
29.09.2004, 17:30:06
    #32717363
nixon1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на добавление в одной таблице
Гость1234Вместо Max(table.ID)+1 надо вставить что-то типа (Select Max(table.ID) From Table)+Table.ID
Потому как все вышеприведенные конструкции выдавали Id равный Id существующей записи.
То что я предложил страдает одним недостатком id будет сильно расти.
Если требуется сделать приращение 1, то лучше
сделать так
INSERT INTO table ( ID, name, type1, type2)
SELECT (Select Max(table.ID) From Table)+Plus(), table.name+"зап. часть ", table.type1,4
FROM table
WHERE (((table.type1)<>1)) OR (((table.type1)<>2)) AND (table.type2=3)
GROUP BY table.ID,table.name,table.type1

Где Plus это функция увеличивающая переменную, обнуленную перед выполнением запроса
Public Id as Integer

Public function Plus()
Id=Id+1
Plus=Id
end function

Далаю все именно так:

автор
Вместо Max(table.ID)+1 надо вставить что-то типа (Select Max(table.ID) From Table)+Table.ID

пишет - "нарушение уникальности поля" - ключа..

Процедуру прописываю в одном из модулей, и когда её в коде вызываю то
ошибка - "Функция неизвестна".
...
Рейтинг: 0 / 0
29.09.2004, 18:35:29
    #32717583
nixon1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на добавление в одной таблице
Дело в том что поле ID имеет просто числовой тип (и ключ). Те кто строил базу до меня отказались от типа "счетчик". А увеличение ID на единицу происходит из формы в которой и заполняют ету таблицу. Значение етого поля в форме по умолчанию "=Nz(DMax("ID";"Table");0)+1".

Делаю так:
Код: plaintext
1.
2.
3.
4.
5.
INSERT INTO table ( ID, name, type1, type2)
SELECT (Select Max(table.ID) From Table)+Table.ID, table.name+"зап. часть ", table.type1, 4 
FROM table
WHERE (((table.type1)<> 1 )) OR (((table.type1)<> 2 )) AND (table.type2= 3 )
GROUP BY table.ID,table.name,table.type1
Появляеться ошибка нарушения уникальности поля.

Делаю тоже самое но добавляя в другую пустую таблицу:
Код: plaintext
1.
2.
3.
4.
5.
INSERT INTO table_111 ( ID, name, type1, type2)
SELECT (Select Max(table.ID) From Table)+Table.ID, table.name+"зап. часть ", table.type1, 4 
FROM table
WHERE (((table.type1)<> 1 )) OR (((table.type1)<> 2 )) AND (table.type2= 3 )
GROUP BY table.ID,table.name,table.type1
Добавление происходит.
...
Рейтинг: 0 / 0
29.09.2004, 19:03:44
    #32717633
Гость1234
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на добавление в одной таблице
А там случаем какой-нить левый индекс по другим полям не затесался?
...
Рейтинг: 0 / 0
29.09.2004, 20:14:38
    #32717719
Ort84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на добавление в одной таблице
nixon1Дело в том что поле ID имеет просто числовой тип (и ключ). Те кто строил базу до меня отказались от типа "счетчик". А увеличение ID на единицу происходит из формы в которой и заполняют ету таблицу. Значение етого поля в форме по умолчанию "=Nz(DMax("ID";"Table");0)+1".

Делаю так:
Код: plaintext
1.
2.
3.
4.
5.
INSERT INTO table ( ID, name, type1, type2)
SELECT (Select Max(table.ID) From Table)+Table.ID, table.name+"зап. часть ", table.type1, 4 
FROM table
WHERE (((table.type1)<> 1 )) OR (((table.type1)<> 2 )) AND (table.type2= 3 )
GROUP BY table.ID,table.name,table.type1
Появляеться ошибка нарушения уникальности поля.

Делаю тоже самое но добавляя в другую пустую таблицу:
Код: plaintext
1.
2.
3.
4.
5.
INSERT INTO table_111 ( ID, name, type1, type2)
SELECT (Select Max(table.ID) From Table)+Table.ID, table.name+"зап. часть ", table.type1, 4 
FROM table
WHERE (((table.type1)<> 1 )) OR (((table.type1)<> 2 )) AND (table.type2= 3 )
GROUP BY table.ID,table.name,table.type1
Добавление происходит.

Кстати, в последнем запросе GROUP BY не надо.
А как происходит вызов запроса? Есть форма на основе таблицы table, пользователь вводит в форму данные, генерируется ID к введенным записям. А потом как вы поступаете с нужным запросом? Вызываете из формы или вручную?
...
Рейтинг: 0 / 0
29.09.2004, 20:57:22
    #32717746
Ort84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на добавление в одной таблице
Да, действительно
INSERT INTO table ( ID, name, type1, type2)
SELECT Max(table.ID)+1, table.name+"зап. часть ", table.type1,4
FROM table
WHERE (((table.type1)<>1)) OR (((table.type1)<>2)) AND (table.type2=3)
GROUP BY table.ID,table.name,table.type2;

нарушает уникальность. Проглючило меня...

А вот почему у тебя происходит нарушение уникальности в
INSERT INTO table ( ID, name, type1, type2)
SELECT (Select Max(table.ID) From Table)+Table.ID, table.name+"зап. часть ", table.type1,4
FROM table
WHERE (((table.type1)<>1)) OR (((table.type1)<>2)) AND (table.type2=3)

не пойму...А самое первое значение ID в table случайно не равно 0?
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на добавление в одной таблице / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]