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

seoman2

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

hosm

* so what *
18.05.2009
2 442
6
#3
пройтись агентом по документам и перезаполнить поле нужной датой. Если документ открывается в уи и если поле такое есть на форме - убедиться, что у него тип дата/время, а не текст...
 

seoman2

Lotus team
17.02.2010
465
1
#4
to OKEN, у меня поле ДАТА_РЕГИСТРАЦИИ текстовое, как мне агентом преобразовать его в тип Date/Time, если можно пример кода?
 

Omh

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

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

Nalula

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

seoman2

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

amigolinx

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

Nalula

#9
пример кода

Код:
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
 

hosm

* so what *
18.05.2009
2 442
6
#10
amigolinx ты прав. но если такой документ потом открыть по форме, где есть редактируемре или вычисляемое поле с таким именем и типом текст и сохранить, оно сохранится, как текст.

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

seoman2

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

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#13
seoman2
есть метод appendItemValue(itemName$,value)
мой вам совет - держаться подальше от этого метода ;)
есть большой шанс задвоить итемс

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

maliy

Well-known member
20.03.2007
164
2
#14
to ToxaRat что вы имели ввиду "перед реплейсем именно удалить итем"?
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#16
nvy
истину глаголишь :)

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

seoman2

Lotus team
17.02.2010
465
1
#17
вообщем по совету 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

Чёрный маг
Lotus team
06.11.2007
3 231
18
#19
seoman2
если в виде/поле то подправь там формат отображения и не заморачивайся :)