|
|
||||||
Использование функций базы данных в запросе19.11.2013, 16:11. Показов 1761. Ответов 19
Метки нет (Все метки)
Всем привет.
Хотел бы узнать существует ли в ADODB.Recordset всякого рода функции? Ну например я построил запрос :
Я думую такие инструменты по-любому существуют в подключении к бд. ЗЫ: извеняюсь если разрезал слух кому своей неосведомленностью в каких-то вопросах.
0
|
||||||
| 19.11.2013, 16:11 | |
|
Ответы с готовыми решениями:
19
Использование функций в SQL запросе, в частности, фильтрация данных Использование скалярных функций в запросе Использование своих функций в SQL-запросе |
|
Заблокирован
|
||||||||||||||||
| 19.11.2013, 18:28 | ||||||||||||||||
Есть еще функция:
0
|
||||||||||||||||
|
|
||||||||||||||||
| 20.11.2013, 09:42 [ТС] | ||||||||||||||||
|
Методом "тыка" таки нашел решение.
В запросе там где указывается звездочка (между словами SELECT и FROM ). Прописываются функции типа SUM, COUNT и другие. Для которых в качестве аргументов используются названия полей заключенные в квадратные скобки, пример:
А и самое главное .. результат выводиться следующим образом:
Спрашивающий, Существует ли функция, с помощью которой можно получить массив уникальных значений определенного поля?
0
|
||||||||||||||||
|
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
| 20.11.2013, 10:31 | |
|
1
|
|
|
|
||
| 20.11.2013, 15:56 [ТС] | ||
|
mobile,
Спасибо! Очень полезная функция! А может она тоже самое проделать, только по нескольким полям? И вообще есть офф сайтик где есть перечень всех этих функций с синтаксисом? Добавлено через 27 минут
0
|
||
|
Заблокирован
|
|
| 20.11.2013, 17:06 | |
|
Посмотрите тему созданную invDS в полезных примерах и кодах.
0
|
|
|
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
||||
| 20.11.2013, 17:52 | ||||
|
1
|
||||
|
Заблокирован
|
|||||||
| 20.11.2013, 17:55 | |||||||
|
mobile,
adOpenDynamic, adLockBatchOptimistic Я же сказал прочитайте статью inv.DS прекрасно и просто написано.
1
|
|||||||
|
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
| 20.11.2013, 23:20 | |
|
0
|
|
|
Заблокирован
|
|
| 21.11.2013, 07:04 | |
|
mobile, Будем смотреть в будущие !
0
|
|
|
|
||
| 21.11.2013, 09:42 [ТС] | ||
|
mobile,
1) я имел ввиду не просто уникальный список значений для каждого из столбцов, а список уникальных наборов по определенным столбцам 2) я юзаю базы Access, и пока в старом формате (mdb) 3) и не совсем понимаю разницу между adLockPessimistic и adLockBatchOptimistic.И можете кинуть ссыль на пост от invDS ?
0
|
||
|
Заблокирован
|
|
| 21.11.2013, 14:55 | |
|
Bati4eli,
Подключение к базе данных через ADODB (статья) Примеры SQL запросов к базе данных через оболочку Visual Basic да и других языков Свойства объекта ADO.Recordset, свойства CursotType, LockType, CursorLocation, параметр Options метода Open() При открытии объекта Recordset есть возможность определить еще несколько очень важных его свойств (их можно определить как напрямую перед открытием, так и как дополнительные параметры метода Open): · первое свойство - CursorType, тип курсора. Это свойство определяется только перед открытием Recordset (после открытия оно доступно только на чтение). Курсор можно представить себе как указатель на записи в Recordset. В зависимости от типа курсора мы определяем возможности работы с Recordset и производительность выполняемых операций (чем больше возможностей, тем меньше производительность, и наоборот). Какие варианты значений возможны: o adOpenForwardOnly (значение 0) - это значение используется по умолчанию. Оно оптимизировано для достижения максимальной производительности (он возможности будут минимальными). Курсор может двигаться только вперед, изменения, вносимые другими пользователями, видны не будут. o adOpenStatic (3) - тоже, что и предыдущий, за исключением того, что можно двигаться во всех направлениях; o adOpenKeyset (1) - позволяет двигаться в любом направлении, видны только изменения существующих записей другими пользователями (удаление старых и добавление новых не видны); o adOpenDynamic (2) - обеспечивает максимальные возможности: позволяет двигаться в любых направлениях, видны любые изменения в записях, производимые другими пользователями. К сожалению, провайдер Microsoft.Jet.OLEDB.4.0 этот тип курсора не поддерживает, поэтому с Access и Excel его использовать не получится. Свойство Recordset.RecordCount нормально функционирует только для курсоров типа Static и Keyset. Для курсоров типа ForwardOnly и Dynamic оно возвращает (-1), поскольку драйвер подключения не может определить количество записей. · второе важное свойство - CursorLocation. Оно определяет, где будет создан курсор - на сервере или на клиенте. По умолчанию используется значение adUseServer (2) - создавать на сервере. Есть возможность использовать значение adUseClient (3) - создавать на клиенте. В целом практически во всех ситуациях удобнее и производительнее использовать серверные курсоры, за одним исключением - в реализации серверных курсоров на разных источниках данных больше отличий, поэтому если вы планируете работать с разными источниками, есть смысл подумать о клиентских курсорах. · третье важное свойство - LockType. Это свойство определяет тип блокировок, которые будут наложены на записи на источнике, помещенные в Recordset. Можно использовать следующие значения: o adLockReadOnly (1) - записи в Recordset будут доступны только на чтение, вы не сможете их изменять. Это значение используется по умолчанию. o adLockPessimistic (2) - наиболее надежный с точки зрения целостности данных вид блокировки. Вы можете изменять записи в Recordset, но при начале изменения записи она блокируется на источнике таким образом, что другие пользователи не смогут обратиться к ней ни на чтение, ни на запись, пока вы не вызовете методы Update или CancelUpdate. adLockOptimistic (3) - это значение позволяет выиграть в производительности за счет проигрыша в надежности обеспечения целостности данных. Запись на источнике блокируется только на время выполнения метода Update. Остальные пользователи могут одновременно с вами читать и изменять данные на источнике. adLockBatchOptimistic (4) - то же самое, что обычное оптимистичное, но вместо немедленного обновления по одной записи используется пакетное обновление. В ситуации, когда изменяется большое число записей, такое решение позволяет выиграть в производительности. Первый параметр метода Open в наших примерах был именем таблицы и командой SQL (могут использоваться и другие варианты). Поскольку драйвер OLE DB не знает, чем может быть передаваемый текст, он взаимодействует с сервером баз данных, чтобы выяснить этот вопрос. На практике такое выяснение может сильно тормозить работу приложения, поэтому есть смысл перед открытием Recordset явно указать тип передаваемых данных. Это делается при помощи параметра Options, который передается этому методу. Наиболее часто используемые значения таковы: · adCmdText (1) - передаваемый текст - команда SQL; · adCmdTable (2) - сгенерировать команду SQL, которая вернет все записи из таблицы (передается только имя таблицы); · adCmdTableDirect (512) - получить все записи из таблицы напрямую (без выполнения SQL-запроса), если источник поддерживает такую операцию. · adCmdStoredProc (4) - выполнить хранимую процедуру и использовать то, что она вернет, для заполнения Recordset.
1
|
|
|
|
||||||
| 18.12.2013, 11:07 [ТС] | ||||||
|
Спрашивающий,
подскажи, пожалуйста, возможно ли такое: у меня есть база, в которой есть поля Фамилия, Имя, Отчество и например пользователей подает запрос найти *иван* .. вот каким образом построить запрос, чтобы получить все строки где есть этот иван. Пускай это будет хоть Иванов, хоть Иван, хоть Иванович. Добавлено через 19 минут как всегда разобрался сам методом тыка:
0
|
||||||
|
Заблокирован
|
|
| 21.12.2013, 19:42 | |
|
Ваш код можно хорошенько урезать.
0
|
|
|
Заблокирован
|
|
| 22.12.2013, 21:01 | |
|
Bati4eli, Вот ты каждый раз создаешь подключение к базе, потом его закрываешь. Можно открыть 1 раз и не закрывать его на протяжении всего времени работы с БД. Потом всего 1 строкой посылать запрос к БД, а не писать все по 4 строки. Зачем ты постоянно создаешь RecordSet потом выполняешь с помощью него запрос, если тебе к примеру данные вовсе не нужны, а лишь выполнить запрос только, к примеру на вставку записей в БД.
Выложи исходник, я тебе примерно покажу как.
0
|
|
|
|
||||||
| 23.12.2013, 09:52 [ТС] | ||||||
|
Вот к примеру функция использующаяся в серверной части моего приложения. Эта функция собирает по порядку части сообщений (например если оно длиной было более 255 символов). Т.е. рекордсет AD собирает все строки где Number_Part=1 (номер части сообщения равен 1), а потом AD2 находит остальные части этого сообщения.
Вообщем считаю, что по большей части занимаюсь дебилизмом и давно надо уже переходить на базы с расширением "accdb" . Кликните здесь для просмотра всего текста
0
|
||||||
|
Заблокирован
|
|
| 23.12.2013, 15:12 | |
|
Bati4eli, Тонкого клиента делать на Access это извращение.
0
|
|
| 23.12.2013, 15:12 | |
|
Помогаю со студенческими работами здесь
20
Использование псевдопеременных: bd (3,5) = s, где bd - база данных, s - элемент базы данных, тогда с 3 по 5 элементы базы данных заменить на элемент s. Ссылка в запросе на тип данных из другой базы данных
Использование данных из DateTimePicker в SQL запросе Query Программа виснет при запросе данных из базы Firebird Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|