(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Модуль преобразования величин для подстановки в SQL-запрос

Источник: codingclub
Максименко Юрий

Предлагаю Вашему вниманию Модуль преобразования величин для подстановки в SQL-запрос с моего сайта. Для тех, кто хотел бы разобраться и, возможно, внести усовершенствования, сделаю парочку пояснений.

Назначение функции sqlReplace()
Существует набор символов, имеющих специаьное значение в SQL, но которые могут оказаться и в Ваших текстовых данных. Самый заметный среди таких [проблемных] символов - апостроф. То есть если Вы, например, хотите ввести в выражение запроса название McDonald′s, то, чтоб не получить ошибку, должны обработать вхождение апострофа. Так, для MS Access Вы должны будете заменить один апостроф двумя, а для MySQL поставить перед апострофом обратный слэш.
НО если Вы просто примените для этого функцию Replace(), то совершите ошибку, которая Вам аукнется, например, когда Вы попытаетесь программно сохранить выражение запроса в поле таблицы. Надеюсь, Вам понятно, что в случае Replace() Вы получите McDonald′′s.
Функция sqlReplace() осуществляет замену корректно, без повторного [квочения] строки.

Поддержка нескольких СУБД
В число параметров функций ToSQL() и dateToSQL() входит параметр platform. Он-то и позволяет Вам перейти на другую СУБД, не переписывая те участки, в которых происходит собирание запросов. Пишете новый case в ToSQL() и dateToSQL(), заменяете принятый по уочанию Access на новую платформу - и все запросы теперь собираются в синтаксисе новой платформы

Option Compare Database
Option Explicit
′==================================================
′Для подстановки даты и времени строкой в запрос SQL.
′platform - СУБД, для которой составляется выражение

Function dateToSQL(ByVal Date_ As Date, Optional ByVal platform As String) As String
If platform = "" Then platform = "Access"
Select Case platform
Case "Access"
dateToSQL = "#" & Trim(str(Month(Date_))) & "/" & Trim(str(Day(Date_))) & "/" & Trim(str(Year(Date_)))
dateToSQL = dateToSQL & " " & Trim(str(Hour(Date_))) & ":" & Trim(str(Minute(Date_))) & ":" & Trim(str(Second(Date_)))
dateToSQL = dateToSQL & "#"
Case "MySQL"
dateToSQL = "′" & Year(Date_) & "-" & Month(Date_) & "-" & Day(Date_) & " " & Hour(Date_) & ":" & Minute(Date_) & ":" & Second(Date_) & "′"
Case Else
End Select
End Function

′==================================================
′Заменяет в строке strToSQL спецсимвол specChar на replace - для вставки текстовой константы в запрос SQL
′Отличается от обычной замены тем, что не заменяет спецсимвол specChar, если он уже ранее заменялся на replace
′Примеры:
′sqlReplace("McDonald′s")="McDonald′′s"
′sqlReplace("McDonald′′s")="McDonald′′s" !!! заметьте - не "McDonald′′′′s" !!!
′sqlReplace("McDonald′s","′","′")="McDonald′s" !!! заметьте - не McDonald′′′′s

Function sqlReplace(ByVal strToSQL As String, Optional ByVal specChar As String, Optional ByVal replace As String) As String
Dim Pos, r, s As Integer

If specChar = "" Then specChar = "′"
If replace = "" Then replace = "′′"
strToSQL = " " & strToSQL ′ на случай начала строки с specChar

s = Len(specChar)
r = Len(replace): Pos = 2
Do While Len(strToSQL) >= Pos
If (Mid(strToSQL, Pos, s) = specChar) And (Mid(strToSQL, Pos, 2) <> replace) And (Mid(strToSQL, Pos - 1, 2) <> replace) Then

strToSQL = Left(strToSQL, Pos - 1) & replace & Mid(strToSQL, Pos + 1)
Pos = Pos + r
Else
Pos = Pos + 1
End If

Loop

sqlReplace = Mid(strToSQL, 2) ′Убираем пробелы, которые подставили в начале
End Function

′===================================================
′Преобразование величины для подстановки в запрос SQL

Public Function ToSQL(ByVal Value, Optional platform As String) As String

If IsNull(Value) Then Value = ""

If platform = "" Then platform = "Access"
Select Case platform
Case "Access"

Select Case VarType(Value)

Case vbDate
ToSQL = dateToSQL(Value)
Case vbString
ToSQL = "′" & sqlReplace(Value) & "′"
Case vbInteger, vbLong, vbSingle, vbDouble, vbCurrency
ToSQL = Trim(str(Value))
Case vbBoolean
ToSQL = IIf(Value, "-1", "0")
End Select
Case Else

End Select
End Function

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 27.05.2008 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office для дома и учебы 2019 (лицензия ESD)
Microsoft Office 365 Бизнес. Подписка на 1 рабочее место на 1 год
Microsoft 365 Business Basic (corporate)
Microsoft Windows Professional 10, Электронный ключ
Microsoft 365 Apps for business (corporate)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Программирование в AutoCAD
Новые материалы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100