-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


Пользовательская функция в базе ACCESS

Воскресенье, 03 Мая 2015 г. 21:15 + в цитатник
В таблице есть поля, содержащие текст в формате "параметр=значение". Например:
ALTNAME
Параметр1=Значение1
Параметр2=Значение2
Параметр3=Значение3

Я хотел сделать в ACCESS так называемый ЗАПРОС, разбивающий эти списки и возвращающий значения параметров как отдельные поля.

Сделал на VBA функцию:
Public Function ValueFromList(StrList As String, StrParam As String) As String
    ValueFromList = ""
    Dim P1, P2 As Long
    P1 = InStr(1, StrList, StrParam, vbTextCompare)
    P2 = InStr(P1 + 1, StrList, vbCrLf, vbTextCompare)
    If P1 <= 0 Then Exit Function
    ValueFromList = Mid(StrList, P1 + Len(StrParam) + 1, P2 - 1 - P1 - Len(StrParam))
End Function


В ACCESS использовал так:
SELECT 
ValueFromList(CERTIFICATS.ALTNAME,"1.2.643.3.61.502710.1.7") AS KPP,
ValueFromList(CERTIFICATS.ALTNAME,"1.2.643.3.61.502710.1.5") AS SPZ,
ValueFromList(CERTIFICATS.ALTNAME,"1.2.643.3.61.502710.1.8") AS GMU
FROM CERTIFICATS

НО ЖЕСТКО ОБЛОМАЛСЯ ((( когда вызвал запрос из программы на Delphi.
Получил ошибку: Неопределенная функция 'ValueFromList' в выражении. Ясно, что извне не доступен VBA.

Что можно придумать, чтобы не писать для каждого параметра порнуху типа этой:
SELECT 
SWITCH(InStr(1, CERTIFICATS.ALTNAME, "1.2.643.3.61.502710.1.7=", 1), 
  MID(CERTIFICATS.ALTNAME, InStr(1, CERTIFICATS.ALTNAME, "1.2.643.3.61.502710.1.7=", 1)+Len("1.2.643.3.61.502710.1.7="), 
  InStr(InStr(1, CERTIFICATS.ALTNAME, "1.2.643.3.61.502710.1.7=", 1)+Len("1.2.643.3.61.502710.1.7="), 
  CERTIFICATS.ALTNAME, Chr(13) + Chr(10), 1)+Len(Chr(13) + Chr(10))-InStr(1, CERTIFICATS.ALTNAME, "1.2.643.3.61.502710.1.7=",1)
  +Len("1.2.643.3.61.502710.1.7="))) AS KPP
FROM CERTIFICATS;

http://www.sql.ru/forum/1154928/polzovatelskaya-funkciya-v-baze-access


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку