Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выбор даты А2003
 
 автор: Scorpi   (15.05.2008 в 05:53)   личное сообщение
 
 

Всем привет, например есть строка str="Задвижки с фланцами до 10.06.2008г.". Вопрос, можно ли из строки вытянуть дату?

Пробовала через Val(str), не получается, возвращает 0 :-(

  Ответить  
 
 автор: osmor   (15.05.2008 в 08:49)   личное сообщение
 
 

положение даты всегда в конце строки?

  Ответить  
 
 автор: Scorpi   (15.05.2008 в 09:01)   личное сообщение
 
 

нет, может быть в любом месте

  Ответить  
 
 автор: osmor   (15.05.2008 в 09:11)   личное сообщение
 
 

могут ли быть другие числа кроме даты?
типа
"Задвижки 15' с фланцами до 10.06.2008г."

  Ответить  
 
 автор: Scorpi   (15.05.2008 в 09:22)   личное сообщение
 
 

да, например, "1500шт - 30.06.2008 3000шт - 31.07.2008 3000шт - 31.08.2008"
или больше 1 даты "Задвижки - 12.06.08; фланцы - 12.07.08; привод - 12.09.08", тогда надо одну, но максимальную

  Ответить  
 
 автор: osmor   (15.05.2008 в 09:55)   личное сообщение
 
 

ну тогда посимвольно разбирать строку
Mid, left, instr

  Ответить  
 
 автор: Scorpi   (15.05.2008 в 10:25)   личное сообщение
 
 

Этим и занималась, вот что получилось (сравнения на max нет)
все даты из строки в массив
dat = rs.Fields("НазвПоля)
dl = Len(dat)
pos = 0
Do While dl > 0
ReDim Preserve arr_date(pos + 1)
arr_date(pos) = Mid(dat, InStr(dat, "200") - 6, 10)
dat1 = Right(dat, Len(dat) - (InStr(dat, "200") + 3))
dl = Len(dat1)
dat = dat1
pos = pos + 1
Loop
первое попадание :
dat = Mid(rs.Fields("НазвПоля"), InStr(rs.Fields("НазвПоля"), "200") - 6, 10)

  Ответить  
 
 автор: Кабан   (15.05.2008 в 10:40)   личное сообщение
 
 

вижу примерно так


Function getdatere(s$)
Dim re As New RegExp
Dim sDatePattern$
Dim s1$, i1&
sDatePattern = "[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]"

re.Pattern = sDatePattern
If re.Test(s) = True Then
   s1 = Trim(re.Replace(s, "|здесь"))
   i1 = InStr(1, s1, "|здесь")
   If i1 <> 0 Then
        getdatere = Mid(s, i1, 10)
   Else
        getdatere = ""
   End If
Else
   getdatere = ""
End If

End Function


rtfm http://regexp.by.ru/

?getdatere("Задвижки 15' с фланцами до 10.06.2008г.")
10.06.2008

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

  Ответить  
 
 автор: Анатолий (Киев)   (15.05.2008 в 10:57)   личное сообщение
 
 


Function FindMaxDateInString(strText As String) As Date
Dim RegEx As Object, Matches As Object, i As Integer
   Set RegEx = CreateObject("VBScript.RegExp")
   RegEx.Pattern = "\d\d\.\d\d\.\d\d+"
'   regEx.IgnoreCase = True
   RegEx.Global = True         'True - все вхождения
   Set Matches = RegEx.Execute(strText)
 For i = 0 To Matches.Count - 1
  If CDate(Matches(i).Value) > FindMaxDateInString Then
    FindMaxDateInString = CDate(Matches(i).Value)
  End If
 Next
End Function


?FindMaxDateInString("1500шт - 30.06.2008 3000шт - 31.07.2008 3000шт - 31.08.08")
31.08.08

Это специально для вас.

  Ответить  
 
 автор: Кабан   (15.05.2008 в 11:10)   личное сообщение
 
 

во! я ж говорил, что где то уже есть! :)

  Ответить  
 
 автор: Scorpi   (15.05.2008 в 11:52)   личное сообщение
 
 

спасибо огромной!!!

  Ответить  
 
 автор: Scorpi   (15.05.2008 в 12:21)   личное сообщение
 
 

функция работает классно, но возникла др. проблема:

Dim tmp As String
tmp = FindMaxDateInString(rs.Fields("НазвПоля"))
If tmp <> "" Then
CurrentDb.Execute ("update импорт set ЛенаПланФ=#" + format(tmp, "yyyy\-mm\-dd") + "# where Код=" + CStr(rs.Fields("НазвПоля")))
End If
выдает ошибку "object doesn't support this prorerty or method"
А без форматирования даты update не проходит (((

др. вариант:
tmp = FindMaxDateInString(rs.Fields("ЛенаПлан"))
temp = Replace(tmp, ".", "/")
If temp <> "" Then
CurrentDb.Execute ("update импорт set ЛенаПланФ=#" + temp + "# where Код=" + CStr(rs.Fields("Код")))
End If
здесь update проходит, но часть данных в правильном формате dd.mm.yyyy, а часть в mm.dd.yyyy. (((

  Ответить  
 
 автор: Анатолий (Киев)   (15.05.2008 в 16:13)   личное сообщение
 
 

Для SQL дата должна выглядеть так: #MM/DD/YYYY#
Нужно так:
"#" & Format(date, "MM\/DD\/YYYY") & "#"
или (короче и понятнее):
Format(date, "\#MM\/DD\/YYYY\#")

Вы очень неосторожно используете "+" для конкатенации строк. Если один из элементов будет Null, то и результат будет Null, а ели типа число или дата - вылетит ошибка.
Используйте "&", тогда и CStr не понадобится.

Вместо:
Dim tmp As String
tmp = FindMaxDateInString(rs.Fields("НазвПоля"))
If tmp <> "" Then

Я бы сделал так (нет лишних преобразований дата-текст-дата):
Dim tmp As Date
tmp = FindMaxDateInString(rs.Fields("НазвПоля"))
If tmp <> 0 Then

Успехов!

  Ответить  
 
 автор: Scorpi   (16.05.2008 в 09:52)   личное сообщение
 
 

все равно на format ... ругается "object doesn't support this prorerty or method"

  Ответить  
 
 автор: Анатолий (Киев)   (16.05.2008 в 11:04)   личное сообщение
 
 

Выведите в окно отладки сформированные строки обоих вариантов и сравните. Не разберетесь - покажите их здесь.

>здесь update проходит, но часть данных в правильном формате dd.mm.yyyy, а часть в mm.dd.yyyy. (((
Во 2-м варианте у вас число и месяц поменяны местами. Когда Jet получает дату 01.05.08 - получается 5 яваря, а когда 16.05.08 (16-й месяц не существует), то "догадывается" и вносит 16 мая.

  Ответить  
 
 автор: Scorpi   (16.05.2008 в 12:20)   личное сообщение
11 Кб.
 
 

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

  Ответить  
 
 автор: Анатолий (Киев)   (16.05.2008 в 20:10)   личное сообщение
 
 

У вас кнопка называется "format", как и функция. В этом и ошибка.
А еще уберите лишние решетки ЛенаПланФ=#" + format(tmp, "\#MM\/DD\/YYYY\#") + "#
А еще у вас во всех полях "КодДМТО" Null, и в примере работать не будет. В оригинале БД там числа?

  Ответить  
 
 автор: Scorpi   (19.05.2008 в 04:56)   личное сообщение
 
 

Упс ..
Спасибо огромное, все заработало. В БД числа, поэтому все работает хорошо!!!!!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList