(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 365 для Дома 32-bit/x64. 5 ПК/Mac + 5 Планшетов + 5 Телефонов. Подписка на 1 год.
Microsoft Office 365 Профессиональный Плюс. Подписка на 1 рабочее место на 1 год
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год.
Microsoft 365 Business Basic (corporate)
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 - ПО, книги, документация, курсы обучения
CASE-технологии
Программирование на Microsoft Access
eManual - электронные книги и техническая документация
Утиль - лучший бесплатный софт для Windows
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100