• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Как изменить тип поля в документе?

seoman2

Green Team
17.02.2010
504
1
BIT
45
как изменить тип поля в документе?
В базе в документах содержится текстовое поле ДАТА_РЕГИСТРАЦИИ , хочу поменять его на тип Date/Time.
Есть свойство item.Type, но оно отдает значение.
 
H

hosm

пройтись агентом по документам и перезаполнить поле нужной датой. Если документ открывается в уи и если поле такое есть на форме - убедиться, что у него тип дата/время, а не текст...
 

seoman2

Green Team
17.02.2010
504
1
BIT
45
to OKEN, у меня поле ДАТА_РЕГИСТРАЦИИ текстовое, как мне агентом преобразовать его в тип Date/Time, если можно пример кода?
 
O

Omh

1. Cdat если всё в порядке с форматом даты (где месяц/где день)
2. Pаспилить на куски + DateNumber
Я бы выбрал второй вариант.

З.Ы. Хоть я и не OKEN
 
N

Nalula

to seoman2, перед записью в поле, преобразовать текст в дату (CDAT)
 

seoman2

Green Team
17.02.2010
504
1
BIT
45
еще раз , у меня в базе есть к примеру 1000 документов , у них есть поле ДАТА_РЕГИСТРАЦИИ (тип Text) в нём содержится 21.04.2010(вот такой формат даты), теперь вот задача - как агентом изменить поле ДАТА_РЕГИСТРАЦИИ с типа Text на тип Date/Time.
 
A

amigolinx

дык тип поля сам и изменится, если конвертнуть текст при помощи CDat и перезаписать в это же поле как советуют товарищи, разве не?
 
N

Nalula

пример кода

Код:
Dim s As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument

Set db = s.CurrentDatabase
Set dc = db.UnprocessedDocuments

If dc.Count <> 0 Then
Set doc = dc.GetFirstDocument
While Not doc Is Nothing			
Call doc.ReplaceItemValue ("ДАТА_РЕГИСТРАЦИИ " , Cdat (doc.GetItemValue ("ДАТА_РЕГИСТРАЦИИ ")(0)))
Call doc.Save (True , False)
Set doc = dc.GetNextDocument (doc)
Wend				
End If
 
H

hosm

amigolinx ты прав. но если такой документ потом открыть по форме, где есть редактируемре или вычисляемое поле с таким именем и типом текст и сохранить, оно сохранится, как текст.

seoman2 и в чем проблемы?
 

seoman2

Green Team
17.02.2010
504
1
BIT
45
есть метод appendItemValue(itemName$,value)
itemName$ - имя поля
value - значение,
и вот в хелпе указао - "Тип данных создаваемого поля зависит от типа параметра value"- что собственно не совсем понятно будет ли 21.04.2010 восприниматься как дата или может как текст ..
Вообщем щас попробуй как посоветовал тов. Nalula
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
seoman2
есть метод appendItemValue(itemName$,value)
мой вам совет - держаться подальше от этого метода ;)
есть большой шанс задвоить итемс

Call doc.ReplaceItemValue ("ДАТА_РЕГИСТРАЦИИ " , Cdat (doc.GetItemValue ("ДАТА_РЕГИСТРАЦИИ ")(0)))
сначала проверку на то, является ли значение датовым иначе Cdat вызовет ошибку
и перед реплейсем именно удалить итем, иначе полнотекстовый индекс в разных версиях домино может плохо сообразить из-за того что индекс итема не изменился
 

maliy

Green Team
20.03.2007
180
2
BIT
44
to ToxaRat что вы имели ввиду "перед реплейсем именно удалить итем"?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
nvy
истину глаголишь :)

Добавлено: И обязательно сделать это со всеми доками что есть в базе.
Иначе весёлый индексер схватывает первый док и по нему определяет какой тип поля, игнорируя то, что все другие доки в этой базе имеют совершенно другой тип поля - а это сказывается на результатай поиска
 

seoman2

Green Team
17.02.2010
504
1
BIT
45
вообщем по совету ToxaRat сделал вот так:
Dim dd As Variant
dd = CurDoc.GetItemValue("ДАТА_РЕГИСТРАЦИИ")
Call CurDoc.RemoveItem("ДАТА_РЕГИСТРАЦИИ" )
Call CurDoc.ReplaceItemValue ("ДАТА_РЕГИСТРАЦИИ" , Cdat (dd(0)))
Все классно , вот только дату преддставляет вот в такой ввиде - 29.04.2010 00:00:00
Как избавиться от 00:00:00 ?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
seoman2
если в виде/поле то подправь там формат отображения и не заморачивайся :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!