Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Возникла такая проблема: я создаю динамический курсор по запросу вида "SELECT * FROM table ORDER BY col_name, id", и мне нужно установить курсор на строку, где id (первичный ключ) равен N. Извлечь эту строку сразу ("SELECT ... WHERE id = N") невозможно, так как нужно сохранить возможность перемещаться назад-вперед по всей таблице, просто начальной позицией нужно сделать определенную строку как я писал выше. Возможно ли это реализовать с помощью ODBC? Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 23:34 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
Никогда не понимал в чем смысл динамических курсоров. Намного проще и надежнее делать отдельные запросы с малым количеством возвращаемых строк. Но если очень хочется, то смотри в сторону "закладок". В теории, это работает так: Когда ты еще только создаешь клиентский курсор, ставишь ему атрибут SQL_ATTR_USE_BOOKMARK. Потом уже посылаешь свое "select * from table". Тогда у курсора в нулевой колонке будет хранится уникальное значение (сгенерированное самим ODBC). Ты сможешь его читать через SQLGetData(stmt, 0, ....). А уже зная какой уникальный номер получила та или иная строка курсора, можно будет на них быстро прыгать через SQLFetchScroll(SQL_FETCH_BOOKMARK). И нет, задать самому чтобы закладка равнялась полю ID нельзя. Тебе придется сначала пробежать по всему курсору и составить словарь "#закладки<=>ID". Сам я такое извращение не делал, так что тонкостей не расскажу. Да и работать это будет далеко не везде. Не все СУБД позволяют свободное хождение по курсору. А те которые позволяют, часто оставляют в DNS возможность запрета таких курсоров. Так что ты сильно рискуешь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 00:00 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
White OwlНамного проще и надежнее делать отдельные запросы с малым количеством возвращаемых строк. Увы, но SQL не предоставляет возможности передвигаться по всей таблице с помощью функций вида GetNext/GetPrev иначе как с помощью курсора... Но однако, SQL хранит таблицы ключей, неужели к ним никак нельзя получить доступ в пределах курсора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 00:09 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
RedCatXWhite OwlНамного проще и надежнее делать отдельные запросы с малым количеством возвращаемых строк. Увы, но SQL не предоставляет возможности передвигаться по всей таблице с помощью функций вида GetNext/GetPrev иначе как с помощью курсора... Нет ни одной задачи которая требовала бы передвигаться по всей таблице. Вообще, нет таких задач на свете. Все что нужно, прекрасно и более надежно решается через "select ... where id=?" и "update ... where id=?". Клиентские курсоры это изначально дурная идея. С точки зрения клиента это плохо потому что ненадежно. Сеть глюканула - курсор поломался, все что пользователь изменял в этом курсоре ухнуло в никуда. А с точки зрения сервера, такие курсоры требуют долгоживущих транзакций, что в свою очередь может привести к коллизиям, либо потребует выключения изоляции. Что в обоих случаях хреново. RedCatXНо однако, SQL хранит таблицы ключей, неужели к ним никак нельзя получить доступ в пределах курсора?Можно конечно. SQLGetData(stmt, номер_колонки_с_ключом, ...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 00:17 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
RedCatXДоброго времени суток! Возникла такая проблема: я создаю динамический курсор по запросу вида "SELECT * FROM table ORDER BY col_name, id", и мне нужно установить курсор на строку, где id (первичный ключ) равен N. Извлечь эту строку сразу ("SELECT ... WHERE id = N") невозможно, так как нужно сохранить возможность перемещаться назад-вперед по всей таблице, просто начальной позицией нужно сделать определенную строку как я писал выше. Возможно ли это реализовать с помощью ODBC? Заранее спасибо! это офтопик опция называется Scrollable cursorsDECLARE cursor_name sensitivity SCROLL CURSOR FOR SELECT ... FROM ... и поддерживается всеми СУБД. Вероятнее всего в ODBC не поддерживатеся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 01:14 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
RedCatXWhite OwlНамного проще и надежнее делать отдельные запросы с малым количеством возвращаемых строк. Увы, но SQL не предоставляет возможности передвигаться по всей таблице с помощью функций вида GetNext/GetPrev иначе как с помощью курсора... Но однако, SQL хранит таблицы ключей, неужели к ним никак нельзя получить доступ в пределах курсора? Вы не путайте хранение и курсор. Результат выполения select никакого отношения к хранению не имеет. результат запраса может быть собран из 10 таблиц хранязихся на 5 разных серверах.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 01:19 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
onstat-RedCatXДоброго времени суток! Возникла такая проблема: я создаю динамический курсор по запросу вида "SELECT * FROM table ORDER BY col_name, id", и мне нужно установить курсор на строку, где id (первичный ключ) равен N. Извлечь эту строку сразу ("SELECT ... WHERE id = N") невозможно, так как нужно сохранить возможность перемещаться назад-вперед по всей таблице, просто начальной позицией нужно сделать определенную строку как я писал выше. Возможно ли это реализовать с помощью ODBC? Заранее спасибо! это офтопик опция называется Scrollable cursorsDECLARE cursor_name sensitivity SCROLL CURSOR FOR SELECT ... FROM ... и поддерживается всеми СУБД. Вероятнее всего в ODBC не поддерживатеся.Ты путаешь серверные курсоры и клиентские. Те о которых ту думаешь это серверные, и они действительно офтопик (и кстати далеко не все СУБД умеют делать SCROLL курсоры). А клиентские курсоры о которых говорит RedCatX это совершенно отдельный вид курсора, практически разделенный на две части - один виртуальный курсор на сервере, а все управление и fetch из него делается на клиенте. Эти курсоры тоже могут быть как одно-направленными, так и свободно бегающими. И это тоже зависит от СУБД и поддерживается не везде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 02:15 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
вообще, понятие "курсор" только в рамках технологий, связанных с СУБД имеет три разных значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 10:05 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
RedCatXДоброго времени суток! Возникла такая проблема: я создаю динамический курсор по запросу вида "SELECT * FROM table ORDER BY col_name, id", и мне нужно установить курсор на строку, где id (первичный ключ) равен N. Извлечь эту строку сразу ("SELECT ... WHERE id = N") невозможно, так как нужно сохранить возможность перемещаться назад-вперед по всей таблице, просто начальной позицией нужно сделать определенную строку как я писал выше. Возможно ли это реализовать с помощью ODBC? Заранее спасибо! ты лучше расскажи, зачем это тебе нужно, а мы может быть тебе тогда скажем, как это надо делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 10:11 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
MasterZivты лучше расскажи, зачем это тебе нужно, а мы может быть тебе тогда скажем, как это надо делать. Есть старое приложение (без исходников) работающее с базой данных Btrieve. Нужно перевести это приложение с Btrieve на MS SQL Server, но исходников нет, переписывать с нуля - не вариант, остается один выход: создать мегакостыль транслирующий вызовы Btrieve в SQL. Этим я и занимаюсь. А функции вида GetNext/GetPrev позволяющие обходить весь файл (таблицу в SQL) - основа Btrieve. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 21:58 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
RedCatXостается один выход: создать мегакостыль транслирующий вызовы Btrieve в SQL. Этим я и занимаюсь. А функции вида GetNext/GetPrev позволяющие обходить весь файл (таблицу в SQL) - основа Btrieve. Тогда не парься с курсорами, а тупо вычитывай результат запроса в массив и уже в нём навигуйся хоть до позеленения. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 22:15 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovRedCatXостается один выход: создать мегакостыль транслирующий вызовы Btrieve в SQL. Этим я и занимаюсь. А функции вида GetNext/GetPrev позволяющие обходить весь файл (таблицу в SQL) - основа Btrieve. Тогда не парься с курсорами, а тупо вычитывай результат запроса в массив и уже в нём навигуйся хоть до позеленения. Если таблица большая, то такое вычитывание может занять много времени и много памяти. А еще, та программа сделана так, что если в течение секунды после открытия файла не получит данные, то намертво зависнет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 22:33 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
RedCatXНужно перевести это приложение с Btrieve на MS SQL Server, но исходников нет, переписывать с нуля - не вариант, остается один выход: создать мегакостыль транслирующий вызовы Btrieve в SQL. подменой wbtrv32.dll ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 22:40 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
Изопропилподменой wbtrv32.dll ? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 22:53 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
кой какие идеи - https://msdn.microsoft.com/en-us/library/ms715420(v=vs.85).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2015, 23:06 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
RedCatXDimitry Sibiryakovпропущено... Тогда не парься с курсорами, а тупо вычитывай результат запроса в массив и уже в нём навигуйся хоть до позеленения. Если таблица большая, то такое вычитывание может занять много времени и много памяти. А еще, та программа сделана так, что если в течение секунды после открытия файла не получит данные, то намертво зависнет.Ну.... я бы все-же не извращался, а занялся бы или поиском альтернативы, либо написал бы аналог с нуля. В итоге это будет проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2015, 00:45 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
Изопропилкой какие идеи - https://msdn.microsoft.com/en-us/library/ms715420(v=vs.85).aspx я чувствую, ты в теме... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2015, 00:46 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
RedCatX, имитируй все тогда в посрочном режиме. задавай какой то порядок на строках таблицы, и построчно каждую запись вычитывай из бд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2015, 00:51 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
RedCatXЕсть старое приложение (без исходников) работающее с базой данных Btrieveсочувствую, чё. Жуткая жуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2015, 01:04 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
MasterZivя чувствую, ты в теме... к счастью - нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2015, 13:37 |
|
||
|
ODBC: Поиск по первичному ключу внутри курсора
|
|||
|---|---|---|---|
|
#18+
RedCatXMasterZivты лучше расскажи, зачем это тебе нужно, а мы может быть тебе тогда скажем, как это надо делать. Есть старое приложение (без исходников) работающее с базой данных Btrieve. Нужно перевести это приложение с Btrieve на MS SQL Server, но исходников нет, переписывать с нуля - не вариант, остается один выход: создать мегакостыль транслирующий вызовы Btrieve в SQL. Этим я и занимаюсь. А функции вида GetNext/GetPrev позволяющие обходить весь файл (таблицу в SQL) - основа Btrieve. Хрень тормозная получится. Ты пытаешься файл-сервер заменить клиент-сервером. Без смены архитектуры приложения это невозможно. Плюсы того что есть потеряешь, а плюсы MS SQL использовать не сможешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2015, 14:30 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=49&tid=2019079]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 139ms |

| 0 / 0 |
