powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / FAQ: Формирование строки SQL-запроса в VBA - Final release
3 сообщений из 3, страница 1 из 1
FAQ: Формирование строки SQL-запроса в VBA - Final release
    #32236646
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ниже будет опубликован полный текст Фак\'а просьба не постить ничего в этот тред, а писать сюда
...
Рейтинг: 0 / 0
FAQ: Формирование строки SQL-запроса в VBA - Final release
    #32236683
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FAQ: Формирование строки SQL-запроса в VBA - Final release \r
\r
1. Использование чисел \r
\r
SQL: \r
Код: plaintext
1.
2.
SELECT *\r
FROM Table\r
WHERE (((Table.Quanty)= 12 . 197 ));
VBA v1: \r
Код: plaintext
1.
2.
3.
4.
Dim q As Single\r
q =  12 . 197 \r
strSQL =  "SELECT * "  _\r
  &  "FROM Table "  _\r
  &  "WHERE (((Table.Quanty)="  & q &  "));" 
VBA v2: \r
Код: plaintext
1.
2.
3.
4.
Dim q As String\r
q =  "12 , 197 "\r
strSQL =  "SELECT * "  _\r
  &  "FROM Table "  _\r
  &  "WHERE (((Table.Quanty)="  & Str(q) &  "));" 
Примечание: \r
VBA v1 - для целых чисел. Для дробных чисел это частный случай, только когда системным разделителем является точка.\r

VBA v2 - более правильный вариант, т.к. в классическом программировании допускается соединять только строки со строками, тогда как VBA v1 использует неявное преобразование типов, хотя нареканий на этот способ для целых чисел не было. (Пример приведён для случая, когда системным разделителем является запятая.)\r

Иногда также используют для преобразования функцию CStr(), но она не всегда применима, т.к. возвращает число в виде строки, где оно записывается через системный разделитель, тогда как SQL в качестве разделителя воспринимает только точку.\r

NB! При использовании нетипичных системных разделителей вышеприведённые примеры могут не работать, в этих случаях надо программно заменять системный разделитель на точку. Ниже приводится функция, возвращающая системный разделитель.\r
Код: plaintext
1.
2.
3.
Function\r
GetDecimalSeparator() As String\r
  GetDecimalSeparator = Format( 0 #,  "." )\r
End Function
Также следует учесть, что в этом случае некоторые стандартные действия Access могут не работать.\r
\r
2. Использование строк \r
\r
SQL: \r
Код: plaintext
1.
2.
SELECT *\r
FROM Table\r
WHERE (((Table.Name)= "All" ));
VBA v1: \r
Код: plaintext
1.
2.
3.
4.
Dim q As String\r
q =  "All" \r
strSQL =  "SELECT * "  _\r
  &  "FROM Table "  _\r
  &  "WHERE (((Table.Quanty)="  "" & DoubleQuote(q) & "  ""));" 
Примечание: \r

где DoubleQuote() - функция, удваивающая кавычки .\r
Пример: \r
условие выборки: a"a\'s\r
SQL: WHERE field= "a""a\'s" \r
VBA v1: strWhere = "WHERE field=""" & "a""""a\'s" & """" \r
\r
VBA v2: \r
Код: plaintext
1.
2.
3.
4.
Dim q As String\r
q =  "All" \r
strSQL =  "SELECT * "  _\r
  &  "FROM Table "  _\r
  &  "WHERE (((Table.Quanty)=\'" & DoubleApostrophe(q) & "\'));" 
Примечание: \r

где DoubleApostrophe() - функция, удваивающая апострофы .\r
Пример: \r
условие выборки: a"a\'s\r
SQL: WHERE field= "a""a\'s" \r
VBA v2: strWhere = "WHERE field=\'" & "a""a\'\'s" & "\'" \r
\r
3. Использование дат \r
\r
SQL: \r
Код: plaintext
1.
2.
SELECT *\r
FROM Table\r
WHERE (((Table.TimeOpen)=# 3 / 31 / 2003   11 : 17 : 19 #));
VBA v1: \r
Код: plaintext
1.
2.
3.
4.
Dim q As Date\r
q = Now\r
strSQL =  "SELECT * "  _\r
  &  "FROM Table "  _\r
  &  "WHERE (((Table.Quanty)=#"  & Format(q,  "mm/dd/yy hh:mm:ss" ) &  "#));" 
VBA v2: \r
Код: plaintext
1.
2.
3.
4.
Dim q As Date\r
q = Now\r
strSQL =  "SELECT * "  _\r
  &  "FROM Table "  _\r
  &  "WHERE (((Table.Quanty)=#"  & Format(q,  "mm\\/dd\\/yy hh:mm:ss" ) &  "#));" 
Примечание: \r

Microsoft JET SQL оперирует датами в американском формате, т.е. именно в вышеуказанном виде Месяц/День/Год.\r

Рекомендуется почитать здесь: http://www.sql.ru/faq/faq_topic.aspx?fid=103 о способах хранения даты/времени.\r

NB! Не стоит пользоваться преобразованием даты в Integer (или Long), т.к. в Access\'е и в SQL Server\'е одной и той же дате соответствуют разные числа и при сравнении можно получить неожиданный результат.\r
\r
Обсуждение в форуме
...
Рейтинг: 0 / 0
FAQ: Формирование строки SQL-запроса в VBA - Final release
    #32236817
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Использование чисел \r
\r
SQL: \r
Код: plaintext
1.
2.
SELECT *\r
FROM Table\r
WHERE (((Table.Quanty)= 12 . 197 ));
VBA v1: \r
Код: plaintext
1.
2.
3.
4.
Dim q As Single\r
q =  12 . 197 \r
strSQL =  "SELECT * "  _\r
  &  "FROM Table "  _\r
  &  "WHERE (((Table.Quanty)="  & q &  "));" 
VBA v2: \r
Код: plaintext
1.
2.
3.
4.
Dim q As String\r
q =  "12 , 197 "\r
strSQL =  "SELECT * "  _\r
  &  "FROM Table "  _\r
  &  "WHERE (((Table.Quanty)="  & Str(q) &  "));" 
Примечание: \r
VBA v1 - для целых чисел. Для дробных чисел это частный случай, только когда системным разделителем является точка.\r

VBA v2 - более правильный вариант, т.к. в классическом программировании допускается соединять только строки со строками, тогда как VBA v1 использует неявное преобразование типов, хотя нареканий на этот способ для целых чисел не было. (Пример приведён для случая, когда системным разделителем является запятая.)\r

Иногда также используют для преобразования функцию CStr(), но она не всегда применима, т.к. возвращает число в виде строки, где оно записывается через системный разделитель, тогда как SQL в качестве разделителя воспринимает только точку.\r

NB! При использовании нетипичных системных разделителей вышеприведённые примеры могут не работать, в этих случаях надо программно заменять системный разделитель на точку. Ниже приводится функция, возвращающая системный разделитель.
Код: plaintext
1.
2.
Function GetDecimalSeparator() As String\r
  GetDecimalSeparator = Format( 0 #,  "." )\r
End Function
Также следует учесть, что в этом случае некоторые стандартные действия Access могут не работать.\r
\r
2. Использование строк \r
\r
SQL: \r
Код: plaintext
1.
2.
SELECT *\r
FROM Table\r
WHERE (((Table.Name)= "All" ));
VBA v1: \r
Код: plaintext
1.
2.
3.
4.
Dim q As String\r
q =  "All" \r
strSQL =  "SELECT * "  _\r
  &  "FROM Table "  _\r
  &  "WHERE (((Table.Quanty)="  "" & DoubleQuote(q) & "  ""));" 
VBA v2: \r
Код: plaintext
1.
2.
3.
4.
Dim q As String\r
q =  "All" \r
strSQL =  "SELECT * "  _\r
  &  "FROM Table "  _\r
  &  "WHERE (((Table.Quanty)=\'" & DoubleApostrophe(q) & "\'));" 

VBA v1: - где DoubleQuote() - функция, удваивающая кавычки .\r
Пример: \r
условие выборки: a"a\'s\r
SQL: WHERE field= "a""a\'s" \r
VBA v1: strWhere = "WHERE field=""" & "a""""a\'s" & """" \r

VBA v2: - где DoubleApostrophe() - функция, удваивающая апострофы .\r
Пример: \r
условие выборки: a"a\'s\r
SQL: WHERE field= "a""a\'s" \r
VBA v2: strWhere = "WHERE field=\'" & "a""a\'\'s" & "\'" \r
\r
3. Использование дат \r
\r
SQL: \r
Код: plaintext
1.
2.
SELECT *\r
FROM Table\r
WHERE (((Table.TimeOpen)=# 3 / 31 / 2003   11 : 17 : 19 #));
VBA v1: \r
Код: plaintext
1.
2.
3.
4.
Dim q As Date\r
q = Now\r
strSQL =  "SELECT * "  _\r
  &  "FROM Table "  _\r
  &  "WHERE (((Table.Quanty)=#"  & Format(q,  "mm/dd/yy hh:mm:ss" ) &  "#));" 
VBA v2: \r
Код: plaintext
1.
2.
3.
4.
Dim q As Date\r
q = Now\r
strSQL =  "SELECT * "  _\r
  &  "FROM Table "  _\r
  &  "WHERE (((Table.Quanty)=#"  & Format(q,  "mm\\/dd\\/yy hh:mm:ss" ) &  "#));" 
Примечание: \r

Microsoft JET SQL оперирует датами в американском формате, т.е. именно в вышеуказанном виде Месяц/День/Год.\r

Рекомендуется почитать здесь: http://www.sql.ru/faq/faq_topic.aspx?fid=103 о способах хранения даты/времени.\r

NB! Не стоит пользоваться преобразованием даты в Integer (или Long), т.к. в Access\'е и в SQL Server\'е одной и той же дате соответствуют разные числа и при сравнении можно получить неожиданный результат.\r
\r
Топик, в котором создавался данный FAQ
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / FAQ: Формирование строки SQL-запроса в VBA - Final release
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]