powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка в INSERT (не понимает формат даты)
22 сообщений из 22, страница 1 из 1
Ошибка в INSERT (не понимает формат даты)
    #38784150
Фотография enakenenaken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
INSERT INTO jurnal (datetime, pc_name, subject)
VALUES(  
Format("22.10.2014", "dd.mm.yyyy")
, 1
, 1
), 1, 1)



Привет всем! Пишет ошибку при запуске данного запроса. Указывает на дату. ЧЯДНТАК?
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #38784151
Фотография enakenenaken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INSERT INTO jurnal (datetime, pc_name, subject)
VALUES(
Format("22.10.2014", "dd.mm.yyyy")
, 1
, 1
)

уточняю
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #38784167
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ФАК.
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #38784176
Фотография enakenenaken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П-Л,

а это не из ФАКа?
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #38784197
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторне понимает формат датыКто не понимает?
Тот, кто принимает, или тот, кто передает?
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #38784217
Ну, во-первых, Format("22.10.2014", "\#mm\/dd\/yyyy\#")
А во-вторых, не устаю повторять, что INSERT INTO ... VALUES - гнилой запрос! Это вы на дату наступили, а еще есть дробные числа, Null, строки с кавычками внутри...
Проще, надежнее и нагляднее:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
With CurrentDB.OpenRecordset("SELECT * FROM jurnal WHERE 0=1")
  .AddNew
  ![datetime]="22.10.2014"
  ![pc_name]=1
  ![subject]=1
  .Update
End With
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #38784443
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Анатолий ( Киев ) ![datetime]="22.10.2014"

Только не так. Так будет преобразовано к дате случайным образом.
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #38784451
Владимир СанычАнатолий ( Киев ) ![datetime]="22.10.2014"

Только не так. Так будет преобразовано к дате случайным образом.
Если представление даты соответствует системному, то все будет правильно.
Код: vbnet
1.
2.
?CDate("22.10.2014")
22.10.14 

Хотя, конечно, я с Вами согласен. Надежнее - DateSerial и т.п.
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #38784519
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enakenenaken
Код: plsql
1.
Format("22.10.2014", "dd.mm.yyyy")

а в FAQ написано "mm\/dd\/yy"
Код: vbnet
1.
2.
?Format("22.10.2014", "dd.mm.yyyy")
22.10.2014
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Ошибка в INSERT (не понимает формат даты)
    #39602788
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев )Ну, во-первых, Format("22.10.2014", "\#mm\/dd\/yyyy\#")
А во-вторых, не устаю повторять, что INSERT INTO ... VALUES - гнилой запрос! Это вы на дату наступили, а еще есть дробные числа, Null, строки с кавычками внутри...
Проще, надежнее и нагляднее:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
With CurrentDB.OpenRecordset("SELECT * FROM jurnal WHERE 0=1")
  .AddNew
  ![datetime]="22.10.2014"
  ![pc_name]=1
  ![subject]=1
  .Update
End With



Анатолий, а можете подсказать, таким образом запрос на обновление можно сделать?
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #39602796
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо
Код: vbnet
1.
  .AddNew

поставь
Код: vbnet
1.
  .Edit

и будет тебе счастье.
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #39602799
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MokeevP, что же Вы приводите рекордсет, а спрашиваете про запрос?
В запросе надо вместо INSERT поставить UPDATE.
И не путайте. Запросы для рекордсетов всегда формируются через SELECT.
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #39602846
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JossMokeevP, что же Вы приводите рекордсет, а спрашиваете про запрос?
В запросе надо вместо INSERT поставить UPDATE.
И не путайте. Запросы для рекордсетов всегда формируются через SELECT.

Спасибо!
Честно скажу, с терминами я дружу очень плохо пока что...
то есть, если говорить предметно, то рекордсет на изменение будет иметь вид
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
With CurrentDB.OpenRecordset("SELECT * FROM jurnal WHERE pc_name=1")    'то есть, теоретически запрос на 1 запись
  .edit
  ![datetime]="22.10.2014"
  ![pc_name]=4
  ![subject]=1
  .Update                         'вот этот апдейт что значит?
End With
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #39602868
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
  .Update


Это значит "записать все произведённые изменения в таблицу" Все вот эти действия
Код: vbnet
1.
2.
3.
  ![datetime]="22.10.2014"
  ![pc_name]=1
  ![subject]=1

Это только подготовка к записи.
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #39602871
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эти действия
Код: vbnet
1.
2.
3.
  ![datetime]="22.10.2014"
  ![pc_name]=1
  ![subject]=1

только показывают, каким полям какие значения Вы хотите присвоить. А само присвоение выполняется по команде Update
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #39602916
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
MokeevP
Код: vbnet
1.
  ![datetime]="22.10.2014"


Вот так делать нельзя. Здесь в поле типа дата-время заносится значение типа текст. Преобразование будет выполнено автоматически, и не всегда так, как мы хотели. В данном примере еще ничего, а вот какое-нибудь "01.02.03" может быть преобразовано в дату 6 разными способами. На самом деле надо писать вот так:

Код: vbnet
1.
  ![datetime]=#10/22/2014#
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #39602970
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СанычMokeevP
Код: vbnet
1.
  ![datetime]="22.10.2014"


Вот так делать нельзя. Здесь в поле типа дата-время заносится значение типа текст. Преобразование будет выполнено автоматически, и не всегда так, как мы хотели. В данном примере еще ничего, а вот какое-нибудь "01.02.03" может быть преобразовано в дату 6 разными способами. На самом деле надо писать вот так:

Код: vbnet
1.
  ![datetime]=#10/22/2014#



К счастью, мне совершенно не нужно в программу писать конкретную дату
К сожалению, мне нужно тащить даты из Excel, там они хранятся соответственно + бонусом может быть время (т.е. в ячейке записано что-то вроде 49123,123982675... Подробнее про мою проблему

И ещё по теме рекордсетов - а как мне с их помощью можно быстренько значения вытащить и переменной присвоить?
И снова - куда читать про рекордсеты чтобы понять? справку не понял
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #39603013
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MokeevPИ снова - куда читать про рекордсеты чтобы понять? справку не понялТак я же тебе приводил конкретную книгу! Тоже не понял? Там очень квалифицированно написано.
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #39608554
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПанургMokeevPИ снова - куда читать про рекордсеты чтобы понять? справку не понялТак я же тебе приводил конкретную книгу! Тоже не понял? Там очень квалифицированно написано.
Я её читаю, но очень медленно... если не затруднит, подскажите, можно ли всё таки таким же подходом с With сделать такой запрос на извлечение данных?

И, по теме, уважаемые знатоки и знающие, как правильно с датами разобраться? Из фака подчерпнул вышенаписанную информацию и родит такой фрагмент:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
    sql = "select ID, IDobj, tp_wrk, tp_stg, "                                  'выбираем столбцы ID записи, ID объекта, тип работы, тип этапа
    sql = sql + "pln_date from pln_main "                                       'выбираем столбцы с датой из таблицы pln_main
    sql = sql + "where ("                                                       'где
    sql = sql + "((IDobj) = " + CStr(tn.Cells(nLne, nCln1)) + ") and "          'ID объекта равен из ячейки
    sql = sql + "((tp_wrk) = 1) and "                                           'тип работы равен 1,
    sql = sql + "((tp_stg) = 1) and "                                           'тип этапа работ 1
    sql = sql + "((pln_date) = #"                                               'дата равна ...
    sql = sql + CStr(Format(tn.Cells(nLne, nCln5), "mm\/dd\/yy"))               'значению из ячейки приведённому к формату ММ.ДД.ГГГГ
    sql = sql + "#))"                                                           'конец строки запроса
    Set SQL_RS = CurrentDb.OpenRecordset(sql)
    m = SQL_RS.EOF                                                              'присваиваем переменной значение да/нет в отношении найдена такая запись или нет
        SQL_RS.Close
    Set SQL_RS = Nothing
    q = CStr(tn.Cells(nLne, nCln2))                                         'на всякий случай преобразовываем код объекта в текст
    q = Replace(q, " ", "")                                                 'и убираем из него пробелы
                                                                                'далее проверяем соответственно
                                                                                    'код соответствует маске кода ##-##/##-##/##-##
                                                                                    'в столбце "Нитка" таблицы источника стоит 1
                                                                                    'ID соответствует маске ######
On Error GoTo lblErr5

        If m = True _
        And q Like "##-##/##-##/##-##" _
        And tn.Cells(nLne, nCln3) = 1 _
        And tn.Cells(nLne, nCln6) Like "обсл*" _
        And (tn.Cells(nLne, nCln1) Like "######" _
        Or Not IsEmpty(tn.Cells(nLne, nCln1))) Then                             'если всё верно то
        
        With CurrentDb.OpenRecordset("SELECT * FROM Pln_main")                  'запускаем запрос на выборку
            .AddNew                                                             'прикручиваем новую запись с параметрами:
            ![Type_obj] = 1                                                     'тип объекта 1
            ![IDobj] = CStr(tn.Cells(nLne, nCln1))                              'ID объекта из ячейки
            ![Tp_wrk] = 1                                                       'тип работы 1
            ![Tp_stg] = 1                                                       'тип этапа работ 1
            ![pln_date] = CStr(Format(tn.Cells(nLne, nCln5), "mm\/dd\/yy"))     'плановая дата из таблицы источника в формате ММ.ДД.ГГГГ
            ![auth] = 1                                                         'Организация ответственная за производство работ
            ![indx] = CStr(tn.Cells(nLne, 1))                                   
            ![insrt_by] = 1                                                     
            ![insrt_date] = CStr(Now())                                         
            .Update                                                            
        End With



Смысл программы: прочесать таблицу Excel, если есть такие позиции в БД - игнорировать, иначе - добавить
Иииии... оно так не работает! Даты наипроизвольнейшим образом конвертируются и потом не ищутся первым запросом! А при добавлении случается дубликат
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #39608602
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эмпирическим путём выяснил, что когда ищу нужно делать мм.дд.гггг:
MokeevP
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
    sql = "select ID, IDobj, tp_wrk, tp_stg, "                                  'выбираем столбцы ID записи, ID объекта, тип работы, тип этапа
    sql = sql + "pln_date from pln_main "                                       'выбираем столбцы с датой из таблицы pln_main
    sql = sql + "where ("                                                       'где
    sql = sql + "((IDobj) = " + CStr(tn.Cells(nLne, nCln1)) + ") and "          'ID объекта равен из ячейки
    sql = sql + "((tp_wrk) = 1) and "                                           'тип работы равен 1,
    sql = sql + "((tp_stg) = 1) and "                                           'тип этапа работ 1
    sql = sql + "((pln_date) = #"                                               'дата равна ...
    sql = sql + CStr(Format(tn.Cells(nLne, nCln5), "mm\/dd\/yy"))               'значению из ячейки приведённому к формату ММ.ДД.ГГГГ
    sql = sql + "#))"                                                           'конец строки запроса



а когда уже вношу - дд.мм.гггг:
MokeevP
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
           If m = True _
        And q Like "##-##/##-##/##-##" _
        And tn.Cells(nLne, nCln3) = 1 _
        And tn.Cells(nLne, nCln6) Like "обсл*" _
        And (tn.Cells(nLne, nCln1) Like "######" _
        Or Not IsEmpty(tn.Cells(nLne, nCln1))) Then                             'если всё верно то
        
        With CurrentDb.OpenRecordset("SELECT * FROM Pln_main")                  'запускаем запрос на выборку
            .AddNew                                                             'прикручиваем новую запись с параметрами:
            ![Type_obj] = 1                                                     'тип объекта 1
            ![IDobj] = CStr(tn.Cells(nLne, nCln1))                              'ID объекта из ячейки
            ![Tp_wrk] = 1                                                       'тип работы 1
            ![Tp_stg] = 1                                                       'тип этапа работ 1
            ![pln_date] = CStr(Format(tn.Cells(nLne, nCln5), "dd\/mm\/yy"))     'плановая дата из таблицы источника в формате ММ.ДД.ГГГГ
            ![auth] = 1                                                         'Организация ответственная за производство работ
            ![indx] = CStr(tn.Cells(nLne, 1))                                   
            ![insrt_by] = 1                                                     
            ![insrt_date] = CStr(Now())                                         
            .Update                                                            
        End With



Почему так происходит понимаю всё равно с трудом
в экселе даты хранятся дд.мм.гггг
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #39608612
MokeevP
Код: vbnet
1.
2.
3.
...
![pln_date] = CStr(Format(tn.Cells(nLne, nCln5), "mm\/dd\/yy"))     'плановая дата из таблицы источника в формате ММ.ДД.ГГГГ
...



Даты наипроизвольнейшим образом конвертируются и потом не ищутся первым запросом! А при добавлении случается дубликат В этой строке собака порылась. Не нужно никаких преобразований. Просто присваивайте полю значение ячейки, т.е.:
![pln_date] = tn.Cells(nLne, nCln5)
Числовой эквивалент даты/времени в ячейке Excel, таблице Access и в VBA одинаковый.
Если вам не нужна составляющая времени, то:
![pln_date] = DateValue(tn.Cells(nLne, nCln5))

А вообще, есть несколько замечаний к коду.
1. Не надо закрывать и снова открывать Recordset, ведь он лежит на одной таблице.
Если эта процедура выполняется в цикле по строкам, то его со всеми записями нужно открыть перед циклом и закрыть после. А для каждой стоки выполнять метод FindFirst со строкой поиска, что после where в вашем примере и при св-ве NoMatch = True (не найдена) и других проверках добавлять запись.
2. При конкатенации строки вместо "+" используйте "&", тогда и CStr не нужна. Символ "+" используется в других специальных случаях.
...
Рейтинг: 0 / 0
Ошибка в INSERT (не понимает формат даты)
    #39608627
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ) В этой строке собака порылась. Не нужно никаких преобразований. Просто присваивайте полю значение ячейки, т.е.:
![pln_date] = tn.Cells(nLne, nCln5)
Числовой эквивалент даты/времени в ячейке Excel, таблице Access и в VBA одинаковый.
Небольшое уточнение - то есть даты в Access тоже по-денно посчитаны с 1 января 1900 года как в excel?
Анатолий ( Киев )Если вам не нужна составляющая времени, то:
![pln_date] = DateValue(tn.Cells(nLne, nCln5))
cstr(tn.cells(nLne, nCln5)) в помойку и забыть как страшный сон? Меня этот вариант вроде-бы устраивает. Или это криминал?

Анатолий ( Киев )1. Не надо закрывать и снова открывать Recordset, ведь он лежит на одной таблице.
Если эта процедура выполняется в цикле по строкам, то его со всеми записями нужно открыть перед циклом и закрыть после. А для каждой стоки выполнять метод FindFirst со строкой поиска, что после where в вашем примере и при св-ве NoMatch = True (не найдена) и других проверках добавлять запись.
Огромное спасибо за замечания! С конкатенацией учту обязательно (хотя понимания почему нужно делать именно так, а не эдак нет, ну да и хрен с ним!). А вот с recordset`ами беда - я категорически плохо понимаю как это сделать, как с ними работать. Можно ли Вас попросить изобразить принципиальный пример такой конструкции с рекордсетом и условием? Прошу

Аще, мне бы, в идеале, ещё и обратную проверку сделать - просмотреть таблицу в Access, сравнить с Excel, чего нет - поставить галочку и название файла, иначе next. Можете помочь?
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка в INSERT (не понимает формат даты)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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