IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Помогите найти фунцию. (приступ идиотизма) (VBA, Access) (https://www.imho.ws/showthread.php?t=96282)

Raven B. 21.11.2005 23:14

Помогите найти фунцию. (приступ идиотизма) (VBA, Access)
 
Доброго времени суток.

Не могу отыскать подходящую ф-ю в MSDN и хелпах.
Ф-я должна обрабатывать строку с SQL запросом и заменять "небезопасные символы" (например "'" на"\'") и т.д.
Можно конечно и самому написать, но в данном случае это не лутшее решение. Такая функция есть 99%.
Поможете найти ?

aBc 22.11.2005 23:27

По одному Replace на каждую пару замены.

LightImage 23.11.2005 09:32

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-инъекции.

Raven B. 23.11.2005 13:43

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

Код:

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


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

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