|
|
|
Запрос на добавление в одной таблице
|
|||
|---|---|---|---|
|
#18+
Есть таблицa table (ID - ключ, name, type1, type2). Она забита записями. Необходимо выбрать из таблицы все записи где - (type1<>1) and (type1<>2) - type2=3 Не удаляя старые записи добавить выбранные записи в ету же таблицу : - новым значением ключа - с типом type2=4 - c name = name+"зап. часть" - type1 - без изменения. Пробую - так, не то. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 13:21:06 |
|
||
|
Запрос на добавление в одной таблице
|
|||
|---|---|---|---|
|
#18+
Забыл, "зап. часть" Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 13:23:12 |
|
||
|
Запрос на добавление в одной таблице
|
|||
|---|---|---|---|
|
#18+
nixon1Забыл, "зап. часть" Код: plaintext 1. 2. 3. 4. Твой запрос не пойдет, т.к. 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 не счетчик? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 13:53:48 |
|
||
|
Запрос на добавление в одной таблице
|
|||
|---|---|---|---|
|
#18+
Поле ID просто числовое. А увеличение значение ключа на единицу стоит в форме в которой вводяться нровые позиции (в свойстве Значение по умолчанию "=Nz(DMax("ID";"Table");0)+1". а запрос не работает.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 15:31:53 |
|
||
|
Запрос на добавление в одной таблице
|
|||
|---|---|---|---|
|
#18+
nixon1Поле ID просто числовое. А увеличение значение ключа на единицу стоит в форме в которой вводяться нровые позиции (в свойстве Значение по умолчанию "=Nz(DMax("ID";"Table");0)+1". а запрос не работает.. А что пишет? Где ругается? Очепятка: GROUP BY table.ID,table.name,table.type1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 15:39:46 |
|
||
|
Запрос на добавление в одной таблице
|
|||
|---|---|---|---|
|
#18+
Вместо 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 15:51:10 |
|
||
|
Запрос на добавление в одной таблице
|
|||
|---|---|---|---|
|
#18+
Гость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... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 16:09:01 |
|
||
|
Запрос на добавление в одной таблице
|
|||
|---|---|---|---|
|
#18+
Гость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 пишет - "нарушение уникальности поля" - ключа.. Процедуру прописываю в одном из модулей, и когда её в коде вызываю то ошибка - "Функция неизвестна". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 17:30:06 |
|
||
|
Запрос на добавление в одной таблице
|
|||
|---|---|---|---|
|
#18+
Дело в том что поле ID имеет просто числовой тип (и ключ). Те кто строил базу до меня отказались от типа "счетчик". А увеличение ID на единицу происходит из формы в которой и заполняют ету таблицу. Значение етого поля в форме по умолчанию "=Nz(DMax("ID";"Table");0)+1". Делаю так: Код: plaintext 1. 2. 3. 4. 5. Делаю тоже самое но добавляя в другую пустую таблицу: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 18:35:29 |
|
||
|
Запрос на добавление в одной таблице
|
|||
|---|---|---|---|
|
#18+
А там случаем какой-нить левый индекс по другим полям не затесался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 19:03:44 |
|
||
|
Запрос на добавление в одной таблице
|
|||
|---|---|---|---|
|
#18+
nixon1Дело в том что поле ID имеет просто числовой тип (и ключ). Те кто строил базу до меня отказались от типа "счетчик". А увеличение ID на единицу происходит из формы в которой и заполняют ету таблицу. Значение етого поля в форме по умолчанию "=Nz(DMax("ID";"Table");0)+1". Делаю так: Код: plaintext 1. 2. 3. 4. 5. Делаю тоже самое но добавляя в другую пустую таблицу: Код: plaintext 1. 2. 3. 4. 5. Кстати, в последнем запросе GROUP BY не надо. А как происходит вызов запроса? Есть форма на основе таблицы table, пользователь вводит в форму данные, генерируется ID к введенным записям. А потом как вы поступаете с нужным запросом? Вызываете из формы или вручную? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 20:14:38 |
|
||
|
Запрос на добавление в одной таблице
|
|||
|---|---|---|---|
|
#18+
Да, действительно 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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 20:57:22 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32716610&tid=1671400]: |
0ms |
get settings: |
10ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 335ms |

| 0 / 0 |
