Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2018, 16:04   #1
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию VBA Access Регулярные выражения

Доброго времени суток
Мне нужно найти в таблице записи, не соответствующие общему виду нужного типа данных, а затем удалить их. Я хочу попробовать использовать регулярные выражения. Ранее их использовать не приходилось. Сориентируйте пожалуйста
Код:
Dim db As DAO.Database, rs As DAO.Recordset
Dim pole As String
Dim regex As New RegExp
regex.Glodal = False
regex.Pattern = "\w*-"   'Колличество цифр от 1 до 3 и символ "-"
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Table")
rs.MoveLast
rs.MoveFirst
   While Not rs.EOF
   pole = rs.Fields("Поле 1").Value
   ...                                 'удалить запись при несоответствии патерну

Последний раз редактировалось Ethex; 11.04.2018 в 16:41.
Ethex вне форума Ответить с цитированием
Старый 12.04.2018, 08:24   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Ethex Посмотреть сообщение
Мне нужно найти в таблице записи, не соответствующие общему виду нужного типа данных, а затем удалить их.
Код:
Sub ggg()
    Dim db As DAO.Database, rs As DAO.Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("SELECT * FROM Table WHERE not([Поле 1] like ""*###-*"")")
    rs.MoveLast
    Debug.Print rs.RecordCount
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE * FROM Table WHERE not([Поле 1] like ""*###-*"")"
    DoCmd.SetWarnings True
    Set rs = db.OpenRecordset("SELECT * FROM Table WHERE not([Поле 1] like ""*###-*"")")
    rs.MoveLast
    Debug.Print rs.RecordCount
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 12.04.2018, 15:19   #3
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
"*###-*"
А шаблон, который я написал не подойдёт?
Код:
"\w*-"      'ну или + вместо *
Ethex вне форума Ответить с цитированием
Старый 17.04.2018, 14:27   #4
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию

Нужный результат достигнут таким образом:
Код:
Public Sub clearTable()   
Dim db As DAO.Database, rs As DAO.Recordset
Dim tbn As String, fld As String
Dim regex As New RegExp
regex.Global = False
regex.Pattern = "\w+-"
tbn = Dir(Me.Поле0)
tbn = Left(tbn, InStrRev(tbn, ".") - 1)
tbn = Replace(tbn, ".", "")
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM [" & tbn & "]")
rs.MoveLast
rs.MoveFirst
  Do While (Not rs.EOF)
    If IsNull(rs.Fields("field").Value) Then
    rs.Delete
    Else:
    fld = rs.Fields("field").Value
      If regex.Test(fld) = False Then
      rs.Delete
      End If
    End If
  rs.MoveNext
  Loop
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End Sub
Ethex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения Fahman Общие вопросы Delphi 6 15.02.2014 08:35
Аналог "правильного" trim() и регулярные выражения в VBA Smaragdov Microsoft Office Excel 13 21.03.2012 16:12
Поддерживает ли VBA регулярные выражения? Suppir Microsoft Office Word 19 04.09.2011 00:19
Поддерживает ли MS Access регулярные выражения? Саня Microsoft Office Access 2 13.11.2010 00:12
Регулярные выражения Adamant Общие вопросы C/C++ 1 26.11.2007 19:44