imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 21.11.2005, 23:14     # 1
Raven B.
Member
 
Аватар для Raven B.
 
Регистрация: 12.07.2004
Адрес: Очень странное место.
Сообщения: 328

Raven B. Известность не заставит себя ждатьRaven B. Известность не заставит себя ждать
Помогите найти фунцию. (приступ идиотизма) (VBA, Access)

Доброго времени суток.

Не могу отыскать подходящую ф-ю в MSDN и хелпах.
Ф-я должна обрабатывать строку с SQL запросом и заменять "небезопасные символы" (например "'" на"\'") и т.д.
Можно конечно и самому написать, но в данном случае это не лутшее решение. Такая функция есть 99%.
Поможете найти ?
Raven B. вне форума  
Старый 22.11.2005, 23:27     # 2
aBc
Junior Member
 
Регистрация: 16.01.2004
Сообщения: 89

aBc Путь к славе только начался
По одному Replace на каждую пару замены.
aBc вне форума  
Старый 23.11.2005, 09:32     # 3
LightImage
Junior Member
 
Регистрация: 16.10.2002
Адрес: Россия-матушка
Пол: Male
Сообщения: 96

LightImage Нимб уже пробиваетсяLightImage Нимб уже пробивается
Raven B.
Ты хочешь предотвратить sql-инъекцию? Стандартных функций для этого не припомню. Вообще имхо надо не sql запрос обрабатывать, а те строки, из которых он составляется. "Опасными" будут знаки кавычек, которые используются в запросе для обозначения строковых литералов (в Access я использую исключительно ", хотя допускается и '); и достаточно заменить одну кавычку на две в той строке, которая используется в запросе. Например:
Код:
 s = "SELECT * FROM T WHERE T.str_f LIKE """ & mystr & """"
Здесь в строке mystr надо "задвоить" кавычки. Для этого используем такую функцию:
Код:
Public Function DoubleQuotesInStr(ByVal str As String) As String
' Заменить каждый знак двойной кавычки ('"') в строке str на два таких знака ('""')
Dim i As Integer
    i = 1
    Do
        i = InStr(i, str, """", vbBinaryCompare)
        If i > 0 Then
            str = Mid(str, 1, i) & """" & Mid(str, i + 1)
            i = i + 2
        Else
            Exit Do
        End If
    Loop
    DoubleQuotesInStr = str
End Function
Код, создающий текст запрос, перепишется так:
Код:
 s = "SELECT * FROM T WHERE T.str_f LIKE """ & _
  DoubleQuotesInStr(mystr) & """"
Можешь также использовать запросы с параметрами, они, насколько помню, не подвержены sql-инъекции.
__________________
1 миллибайт = 1/1024 байта
LightImage вне форума  
Старый 23.11.2005, 13:43     # 4
Raven B.
Member
 
Аватар для Raven B.
 
Регистрация: 12.07.2004
Адрес: Очень странное место.
Сообщения: 328

Raven B. Известность не заставит себя ждатьRaven B. Известность не заставит себя ждать
Спасибо огромное за функцию.
Что ж если нет стандартной функции то нет... ничего не подеалешь =(
Вообще проблема была не в безопасности.
БД локальная.
Проблема была в том что запросы у меня выглядят как:

Код:
DoCmd.RunSQL ("INSERT INTO pest_type_n_t ( pest_type_n ) VALUES ('" & proff_in.Value & "');")
И если туда попадает " ' " то все "падает".
Спасибо еще раз. Буду копатся.
Raven B. вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 05:56.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.