Текстовое значение ColdFusion / HTML к дате Oracle в формате: 'dd-mmm-yyyy' - PullRequest
0 голосов
/ 02 декабря 2011

Как бы вы взяли значение текстового поля в форме и, используя ColdFusion, преобразовали его в формат 'dd-mmm-yyyy', а затем передали его в базу данных Oracle. Это для домашнего задания. Вот последнее, что я попробовал:

со страницы вывода:

<cfset date = lsParseDateTime(VISIT_DATE)>
<cfset myDate = DateFormat(#date#, "dd-mmm-yyyy")>  
<cfinsert name="insert_vet" datasource="ORCL" username="xxxx" password="xxxx"
tablename="VISIT"
formfields="VISIT_ID, #myDate#, VISIT_COMMENTS, VISIT_TOTAL, ROCEDURE_ID, 
            ANIMAL_ID, VET_ID, CLIENT_ID">

Вот исключение, которое я получаю:

Invalid column name, 10-Feb-2006, was specified.

Ответы [ 4 ]

1 голос
/ 02 декабря 2011

Ваша ошибка лежит здесь:

formfields="VISIT_ID, #myDate#, VISIT_COMMENTS, VISIT_TOTAL, ROCEDURE_ID, 

Ожидается, что вы передадите имена полей в теге insert.

... а что вы передаете?

Значение из # myDate #, которое равно «10-Фев-2006». Тег вставки просматривает список отправленных вами полей формы и говорит: «Да, поля FORM с именем« 10 -Feb-2006 », ERROR нет».

Замените # myDate # именем поля <INPUT>, и все будет в порядке.

1 голос
/ 02 декабря 2011

formfields = "VISIT_ID, # myDate #,

Чтобы ответить на ваш вопрос, formfields должно содержать имя вашего поля, но вместо этого вы передаете его значение. Чтобы сделать то, что вы просите, вам просто нужно изменить значение переменной FORM.VISIT_DATE перед cfinsert.

ie <cfset FORM.VISIT_DATE = "... some new value ...">

дд-ммм-гггг ', а затем передать его в базу данных Oracle

Тем не менее .. VISIT_DATE это столбец даты / времени? Если это так, забудьте о том, как ваша IDE отображает значения на экране. Это не имеет значения. Внутренне значения даты / времени хранятся в виде чисел, а не строк. Ваша IDE просто отображает эти числа в более удобном для человека формате, например, «12 декабря 2011 года» или «2011-12-01». При изменении столбцов даты / времени всегда используйте дату объекты , а не строки. См. Ответ Джейсона для одного подхода, который совместим с cfinsert.

0 голосов
/ 18 сентября 2015

вы можете использовать метод ORacle TO_CHAR, чтобы получить формат, который вы хотите

пример

select to_char(current_timestamp, 'DD-MON-YYYY') from dual;

RETURN 18-SEP-2015
0 голосов
/ 02 декабря 2011

больше, чем использовать DateFormat, используйте createODBCDate().

<cfset myDate = createODBCDate(date)>  

Это преобразует вашу дату в формат, который может быть передан в любую БД, включая Oracle

Ошибка, которую выполучают, потому что вы пытаетесь передать значение даты в виде таблицы столбцов.

Лично я не использую cfinsert .. Я бы сделал (и предпочел) что-то вроде этого.

<cfquery name="insert_vet" datsource="#ds#">
  INSERT INTO visit (visit_id, myDate, visit_comments)
  VALUES (<cfqueryparam value="#form.visit_id#" cfsqltype="cf_sql_integer" >,
            <cfqueryparam value="#createODBCDate(form.myDate)#" cfsqltype="cf_sql_date" >,
            <cfqueryparam value="#form.visit_comments#" cfsqltype="cf_sql_varchar" >)
</cfquery>

Вам не нужно использовать <cfqueryparam для запуска, но поместите их перед запуском, чтобы предотвратить SQL-инъекцию.

Редактировать 1 Похоже, чтополучить немного из-под контроля .. возможно, вернитесь к чистому сценарию и начните с простого SQL-оператора вставки и посмотрите, что это даст вам ..

<cfquery name="insert_vet" datsource="???" username="???" password="???">
  INSERT INTO visit (visit_id, myDate, visit_comments)
  VALUES (#form.visit_id#,#createODBCDate(form.myDate)#, #form.visit_comments#)
</cfquery>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...