Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 как сделать select * from tbl, кроме одного поля?  [new]
наутилус
Member

Откуда: UA
Сообщений: 1263
т.е. выбрать изз таблицы все поля кроме одного указаного? возможно такое сделать sql-запросом?
12 июл 03, 12:19    [259672]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
IgorM
Member

Откуда: Тула - Москва, транзит
Сообщений: 633
В Access имхо стандартных возможностей для этого нет. Динамический запрос не подойдет?
12 июл 03, 13:20    [259681]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Сорри за запрещенный вопрос, но зачем это нужно? Может, можно решить задачу другим способом? Взять все поля, а потом скрыть одно из них уже в форме (или для чего оно нужно)?
12 июл 03, 13:39    [259689]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Или такой вариант: написать программу, которая будет честно строить длинный селект, в котором будут перечислены все поля кроме одного.
12 июл 03, 13:44    [259691]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
наутилус
Member

Откуда: UA
Сообщений: 1263
2IgorM
например? =)

2Владимир Саныч
не запрещённый =) работаю не с формой.
Или такой вариант:
чесно говоря возникла такая мысль, но надо быстро и сейчас.
а для чего это нужно.. вот: есть таблица со счётчиком и кучей полей (около 20). надо сделать копию определённой записи. когда открываю таблицу, выделяю запись, копирую её в новую всё ок(значение счётчика автоматом обновляется) когда пытаюсь сделать
CurrentDb.Execute "insert into тЗаявления select * from тЗаявления  where (idZ=1);"

он мне говорит что невозможно добавить запись по причине нарушения уникальность ключа.
вот и хотелось бы сделать что-то вроде
select * кроме id.... =)
в принципе уже сделал, но извратно.
сначала копирую нужную запись в новую временную таблицу, потом во временной таблице удаляю поле счётчика, и уже потом из временной переписываю запись в исходную таблицу.
12 июл 03, 14:05    [259698]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
20 полей - это не куча. Куча - это 100 и больше. По-моему, написать ручками селект из 19 полей было бы гораздо быстрее, чем ждать ответа из форума. И никакая временная таблица не нужна.
12 июл 03, 14:53    [259708]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9900
Согласен с Санычем. Тем более конструктор запросов для ленивых никто не отменял. 19 галочек проставить не так уж и сложно.
12 июл 03, 15:07    [259710]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Даже 19 галочек не нужно. Дабл-кликаем по заголовку прямоугольника таблицы в верхней половине построителя, это выделяет в прямоугольнике все поля (невыделенная остается первая строчка со звездочкой). Тащим мышкой все выделенное в нижнюю половину. Потом одно поле стираем.

А временная таблица - это и медленно, и ненадежно. И это плата за что? За экономию нескольких минут работы программиста.
12 июл 03, 16:04    [259723]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
наутилус
Member

Откуда: UA
Сообщений: 1263
=)) раскритиковали.... "лень двигатель прогресса".... =) этот запрос надо делать из вба по кнопочке. т.е. не разово.. а структура таблицы в принципе может поменятся.. или название полей... а потом в коде вылавливать что же и где надо поменять.. это имхо не .... вобщем ленивый я =).. поэтому и сделал.. как я думаю более универсально.
12 июл 03, 16:26    [259738]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
С момента задания вопроса прошло 4 часа. За это время можно было написать что-нибудь такое:

s = ""
With CurrentDb.OpenRecordset(...)
For Each f In .Fields
If f.Name <> "ID" Then
If s <> "" Then s = s & ","
s = & f.Name
End If
Next
.Close
End With
s = "select " & s & " from ..."

Блин четыре раза.
12 июл 03, 17:05    [259756]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
наутилус
Member

Откуда: UA
Сообщений: 1263
когда я писал вопрос, я уже решил проблему как описал в 14:05. просто заинтересовал этот вопрос. вот и задал
12 июл 03, 17:36    [259760]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Все равно на пост от 14:05 ушло время, за которое можно было написать что-то типа моего от 17:05. Разрази меня гром, это будет работать надежнее и быстрее, чем временная таблица.
12 июл 03, 18:00    [259765]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
IgorM
Member

Откуда: Тула - Москва, транзит
Сообщений: 633
Имхо для таблицы будет еще быстрее TableDef открыть.
12 июл 03, 19:42    [259793]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Согласен с IgorM.
12 июл 03, 22:45    [259834]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
наутилус
Member

Откуда: UA
Сообщений: 1263
Все равно на пост от 14:05 ушло время, за которое можно было написать что-то типа моего от 17:05.

за то время пока читаешь форум, просматриваешь почту... кофе пьешь... и т.д. можно ого-го сколько сделать =)))) я решил вопрос, но меня заинтересовало как можно ещё. вот и спросил.

Разрази меня гром, это будет работать надежнее и быстрее, чем временная таблица.

надежней и быстрей??.. почему?
13 июл 03, 10:47    [259892]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
VIG
Guest
как-то видел решение аналогичной задачи для SqlServer.
Если народу интересно ,могу поискать и опубликовать
13 июл 03, 11:16    [259893]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Быстрее - потому что одну запись в файл сделать быстрее, чем две записи и одно стирание.

Надежнее - потому что при записях в файл бывают блокировки и конфликты между сессиями, и чем меньше записей в файл, тем их меньше.
13 июл 03, 11:29    [259896]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
И кстати:

> в принципе уже сделал, но извратно.

За этой фразой разве не стояло понимание, что этот способ по каким-то причинам нежелателен?
13 июл 03, 11:44    [259898]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
наутилус
Member

Откуда: UA
Сообщений: 1263
2VIG
если можно

2Владимир Саныч
я уже где-то писал.." я только учусь". за этой фразой стояло понимание того, что я НЕ ЗНАЮ как сделать выборку всех полей кроме некоторых. но я сделал это. Было понимание, что наверное можно и лучше сделать. Наверное Ваш способ лучше =). когда в следующий раз возникнет такой вопрос, я уже буду знать КАК это можно сделать несколькими способами. =) эт называется.. "из-за дурной головы ногам покоя нет"... т.е. "рукам" =))))
13 июл 03, 12:07    [259904]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
Прошу на "ты", мне так понятнее. :^)
13 июл 03, 12:11    [259905]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
VIG
Guest
set nocount on


Declare @TableName varchar(128), @ColumnList varchar(1000)
Declare @SQL varchar(1000)
set @TableName = 'authors'

SELECT @ColumnList = COALESCE(@ColumnList + ', ', '') + column_name
FROM INFORMATION_SCHEMA.Columns
WHERE Ordinal_position <= 10
and table_name = @TableName

Set @SQL = 'Select ' + @ColumnList + ' from ' + @TableName

Exec (@SQL)

позаимствовано отсюда
13 июл 03, 12:24    [259911]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
наутилус
Member

Откуда: UA
Сообщений: 1263
2Владимир Саныч
ок =)

2VIG
сэнкс... положим. в "копилку" =)) и будем пользоваться
13 июл 03, 12:28    [259913]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9900
Быстрее - потому что одну запись в файл сделать быстрее, чем две записи и одно стирание.
А вот здесь я слегка не соглашусь. Конечно, добавить одну запись быстрее, чем добавить две и одну убить, но только если добавляют одним и тем же способом. А здесь - разными.
Добавление записи SQL-запросом и добавление той же записи через объекты DAO - две большие разницы во времени. По другому и не может быть. Делается то одно и тоже, только еще и через дополнительную прослойку в виде DAO+VBA.
Кто хочет - может провести замеры.
13 июл 03, 12:34    [259916]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
наутилус
Member

Откуда: UA
Сообщений: 1263
+ сначала надо пробежаться по всем полям (дабы выбрать название). а как вы сами говорили если полей больше 100... то может быстрее будет убить одно поле?
13 июл 03, 12:44    [259918]     Ответить | Цитировать Сообщить модератору
 Re: как сделать select * from tbl, кроме одного поля?  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40416
2 Лох:

Простая арифметика. Случай 1. Делаем что-то (например, вставляем запись либо кушаем кактус). Случай 2. Делаем точно то же самое плюс что-то еще неважно каким способом. Что быстрее? Зависит ли это от чего-то?

2 наутилус:

> если полей больше 100

Все равно. Когда приходится рисовать руками, то руки приходится беречь. А если программа, то какая разница, 20 или 2000?
13 июл 03, 13:04    [259921]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить