Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Функция возвращает странное...  [new]
Dyadya Zed
Member

Откуда:
Сообщений: 32
Есть такая ф-ция в Access XP:

Public Const LANG_DEFAULT = &H400
Public Const LANG_ENGLISH_US = &H409
Public Const LANG_RUSSIAN = &H419
Public Const LANG_UKRAINIAN = &H422

Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type

Declare Function GetDateFormat Lib "kernel32" Alias "GetDateFormatA" (ByVal Locale As Long, ByVal dwFlags As Long, lpDate As SYSTEMTIME, ByVal lpFormat As String, ByVal lpDateStr As String, ByVal cchDate As Long) As Long

Public Function GetStringFromDate(lLangID As Long, dtDate As Variant, strFormat As String) As String
Dim stSysDate As SYSTEMTIME
Dim strResult As String * 256
Dim lBufSize As Long, lRetVal As Long

GetStringFromDate = ""
If Not IsDate(dtDate) Then Exit Function

stSysDate.wDay = Day(dtDate)
stSysDate.wMonth = Month(dtDate)
stSysDate.wYear = Year(dtDate)

lBufSize = 256

lRetVal = GetDateFormat(lLangID, 0, stSysDate, strFormat, strResult, lBufSize)
If lRetVal <> 0 Then GetStringFromDate = strResult
End Function


В базу все выдает отлично..
Результат ф-ции такой "17 липня, 2003"

Когда пытаюсь данные экспортировать через объекты офиса в Word XP (как в книге Гетца написано), всё передается нормально, но поле обрабатываемое этой ф-цией в результате выдает после текста "17 липня, 2003" штук 100-200 квадратиков...

Как с этим бороться??? Хееелп!
4 июн 04, 16:41    [723194]     Ответить | Цитировать Сообщить модератору
 Re: Функция возвращает странное...  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
Стринга из API функций возвращается в формате PSrting, т.е. оканчивается Chr(0)

надо ее преобразовать, откинуть то, что сзади

Function StringFromSz(szTmp As String) As String
    '  Если строка оканчивается нулями, вернуть усеченную строку.

Dim ich As Integer ich = InStr(szTmp, Chr$(0)) If ich Then StringFromSz = Left$(szTmp, ich - 1) Else StringFromSz = szTmp End If End Function

В вашей функции
...
lRetVal = GetDateFormat(lLangID, 0, stSysDate, strFormat, strResult, lBufSize)
If lRetVal <> 0 Then GetStringFromDate = StringFromSz(strResult)
End Function

?
4 июн 04, 16:51    [723229]     Ответить | Цитировать Сообщить модератору
 Re: Функция возвращает странное...  [new]
Dyadya Zed
Member

Откуда:
Сообщений: 32
Огромное спасибо, помогло!!!!
Пытался бороться через Trim, не помогало..
4 июн 04, 16:59    [723266]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить