Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Записать в таблицу
 
 автор: Krusz   (03.10.2011 в 14:35)   личное сообщение
 
 

пытаюсь внести запись в таблицу
for i=1 to n
DoCmd.RunSQL "insert into temp Values ('" & a(0, i - 1) & "','" & a(1, i - 1) & "','" & a(2, i - 1) & "','" & a(3, i - 1) & "')"
next i

все бы хорошо, но а(3, i-1) может буть пустым значение Null, а может содержатьь дату.
если содержит дату ,то никаких проблем и запись идет.
но когда a(3,i-1) принимает значение Null выдает ошибку (небыло добавленно записей и т.д и т.п.)

в таблице куда идет запись поле имеет формат Date.
как можно записать в поле формата date значение null?
если просто убираю а(3, i-1) , то ругается, что число полей не совпадает.

  Ответить  
 
 автор: osmor   (03.10.2011 в 14:44)   личное сообщение
 
 

разрешите пустые значения в этом поле

  Ответить  
 
 автор: krusz   (03.10.2011 в 14:46)   личное сообщение
 
 

разрешены
еще одно уточнение, когда принмает значение null ругается на преобразование типа данных

  Ответить  
 
 автор: kot_k_k   (03.10.2011 в 15:03)   личное сообщение
 
 

попробуй nz(a(i-3),Null)

  Ответить  
 
 автор: Krusz   (03.10.2011 в 15:08)   личное сообщение
 
 

таже ошибка
значение Null присвоенно следующему количеству полей -1 (ошибка преобразования типа)

  Ответить  
 
 автор: Explorer   (03.10.2011 в 17:11)   личное сообщение
 
 

а в поле таблицы Null разрешен?

  Ответить  
 
 автор: Анатолий (Киев)   (03.10.2011 в 17:24)   личное сообщение
 
 

В вашем случае запрос пытается вставить пустую строку, а не Null.
Можно сделать так: NZ(a(3,i-1),'Null'), но мой вам совет - не используйте запрос INSERT...VALUES.
Это сплошной гемор с десятичным разделителем и форматом даты, борьба с Null (как у вас) и необходимость дублирования внутри текста обрамляющих символов (в вашем случае - апостроф).
Гораздо удобнее - открыть Recordset и добавить запись туда без этих хлопот. К тому же так можно легко получить значение ID-счетчика добавленной записи.

ЗЫ. А еще советую забыть, что есть такой метод DoCmd.RunSQL.и использовать Execute.

  Ответить  
 
 автор: Krusz   (07.10.2011 в 09:07)   личное сообщение
 
 

Спасибо за подсказку.
а можно пояснить почему Execute лучше чем Docmd.RunSQL?

  Ответить  
 
 автор: Анатолий (Киев)   (07.10.2011 в 10:05)   личное сообщение
 
 

Хотя бы потому, что с RunSQL нужно отключать/включать сообщения. При этом есть вероятность, что останется отключенным, и тогда даже при интерактивной работе в БД вы можете случайно удалить или не сохранить что-нибудь нужное - предупреждений не будет.

К тому же объект DoCmd есть только в Аксе, а DAO и ADO можно использовать в других приложениях.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList