powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на добавление в одной таблице
12 сообщений из 12, страница 1 из 1
Запрос на добавление в одной таблице
    #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
Запрос на добавление в одной таблице
    #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
Запрос на добавление в одной таблице
    #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
Запрос на добавление в одной таблице
    #32716951
nixon1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поле ID просто числовое. А увеличение значение ключа на единицу стоит в форме в которой вводяться нровые позиции (в свойстве Значение по умолчанию "=Nz(DMax("ID";"Table");0)+1".

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

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

А что пишет? Где ругается?
Очепятка: GROUP BY table.ID,table.name,table.type1
...
Рейтинг: 0 / 0
Запрос на добавление в одной таблице
    #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
Запрос на добавление в одной таблице
    #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
Запрос на добавление в одной таблице
    #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
Запрос на добавление в одной таблице
    #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
Запрос на добавление в одной таблице
    #32717633
Гость1234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А там случаем какой-нить левый индекс по другим полям не затесался?
...
Рейтинг: 0 / 0
Запрос на добавление в одной таблице
    #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
Запрос на добавление в одной таблице
    #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
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на добавление в одной таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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