Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Запрос на добавление одной записи без исходной таблицы Аксесс2010  [new]
Игорь С
Member

Откуда: Iндепендна Юкрейна
Сообщений: 515
Здравствуйте.
В Аксессе 97 добавлял одну запись запросом без исходной таблицы (см. рис), обращаяся к этому запросу из ВБА
DoCmd.OpenQuery "ДобавлениеЗаписи", acNormal, acAdd


В Акс.2010 требует исходную таблицу. Единственное в чем отличие (от примера в Акс.97) - это в данном случае таблица, в которую требуется добавить запись - является источником данных активной формы .
После анализа этой таблицы, формируютя значения полей новой записи.

Ввиду того, что значения полей новой записи последовательно формируются пользователем с помощью запросов, которые запрещают ввести несовместимые данные нельзя (или трудно) открыть доступ к новой запси в форме и заполнить ее.

Подскажите, действительно ли появилось ограничение? Или что-то я забыл?

К сообщению приложен файл. Размер - 9Kb
28 май 19, 14:18    [21895721]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление одной записи без исходной таблицы Аксесс2010  [new]
Кривцов Анатолий
Member

Откуда:
Сообщений: 330
Игорь С, вероятно в режиме SQL ваш запрос выглядит так:
INSERT INTO [ИМя таблицы] (Поле1, Поле2, Поле3, Поле4) SELECT Функ1(), Функ2(), Функ3(), Функ4() 
Если А97 это и позволял, то это было отклонение от правил (была другая версия JET).
Для этой цели существует конструкция вида:
INSERT INTO [ИМя таблицы] (Поле1, Поле2, Поле3, Поле4) VALUES Функ1(), Функ2(), Функ3(), Функ4() 


Но что вам мешает в форме выполнить 4 функции - получить в переменных 4 значения - добавить запись в Recordset формы?
28 май 19, 14:39    [21895760]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление одной записи без исходной таблицы Аксесс2010  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6260
или даже так
CurrentDb.Execute "INSERT INTO tbl(ctl,ctl1,ctl2) VALUES ('" & Me.полеТекст & "'," & Me.полеЧисло & ",'" & Me.полеДата & "')"
28 май 19, 16:06    [21895902]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление одной записи без исходной таблицы Аксесс2010  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4366
sdku, а если Null нужно вставить вместо любого значения?
28 май 19, 16:27    [21895913]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление одной записи без исходной таблицы Аксесс2010  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6260
Панург,
если Null-фиг сработает
или обеспечить доступ к кнопке после заполнения всех полей
или менять текст запроса в зависимости от заполнения полей
или использовать RS
короче есть варианты(лично я использовал бы рекордсет)
28 май 19, 17:25    [21895963]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление одной записи без исходной таблицы Аксесс2010  [new]
Игорь С
Member

Откуда: Iндепендна Юкрейна
Сообщений: 515
Кривцов Анатолий


Но что вам мешает в форме выполнить 4 функции - получить в переменных 4 значения - добавить запись в Recordset формы?


Вот спасибо.

Я и сам подумал про рекордсет. Но прочему в Рекордсет формы? Может быть прямо в Рекордсет таблицы (открыть и добавить)? (Ведь Рекордсет формы построен на достаточно сложном запросе и там может случиться что-нибуть непредвиденное ...)
28 май 19, 20:47    [21896060]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление одной записи без исходной таблицы Аксесс2010  [new]
Игорь С
Member

Откуда: Iндепендна Юкрейна
Сообщений: 515
Братцы!

На домашнем компьютере, тот же запрос, такой же Аксесс 2010 (из того же файла) сработал. Вот SQL (почищен от проверок на Нулл).

INSERT INTO Project_Contract ( COD_Contract, COD_Project )
SELECT f_Processed_code() AS CC, f_Int() AS CP, *;
28 май 19, 21:07    [21896067]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление одной записи без исходной таблицы Аксесс2010  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4366
Игорь С, всё же правильно писать данный запрос так
INSERT INTO [ИмяТаблицы] (Поле1, Поле2, ...)  VALUES (Значение1, Значение2, ...)
Оба списка (полей и значений) должны быть симметричны и заключены в скобки.
Я предпочитаю такие запросы делать с параметрами - не надо парится с разными знаками (ковычками, диезами, запятыми-точками) и можно при надобности присваивать Null.
29 май 19, 04:46    [21896190]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление одной записи без исходной таблицы Аксесс2010  [new]
Кривцов Анатолий
Member

Откуда:
Сообщений: 330
Игорь С
Но прочему в Рекордсет формы? Может быть прямо в Рекордсет таблицы (открыть и добавить)? (Ведь Рекордсет формы построен на достаточно сложном запросе и там может случиться что-нибуть непредвиденное ...)
Если Рекордсет формы позволяет добавлять записи, то новая запись сразу видна в форме, Requery не потребуется.
Но можно и в Рекордсет таблицы. В любом случае это проще и надежнее чем запрос типа Insert...Values.
sdku
или даже так
CurrentDb.Execute "INSERT INTO tbl(ctl,ctl1,ctl2) VALUES ('" & Me.полеТекст & "'," & Me.полеЧисло & ",'" & Me.полеДата & "')"
В моем примере функции вызываются в самом запросе и при правильном типе возвращаемого значения все работает. А в вашем примере значения подставляются в текст запроса и тут начинается коррида - формат даты, "." - десятичный разделитель, вероятные кавычки внутри текста и Null.
Поэтому через Рекордсет (к тому же пустой) - лучшая альтернатива.

ЗЫ. Кстати, в запрос можно вставлять и Null как слово "Null", например:
... & NZ(Me.полеТекст,"Null") & ...
29 май 19, 10:45    [21896411]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление одной записи без исходной таблицы Аксесс2010  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6260
Кривцов Анатолий
...Поэтому через Рекордсет (к тому же пустой) - лучшая альтернатива...
sdku
....короче есть варианты(лично я использовал бы рекордсет)
рекордсет-наше фсё
29 май 19, 11:40    [21896514]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить