Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Универсальный селект для ODBC / 9 сообщений из 9, страница 1 из 1
31.03.2006, 15:46
    #33638015
m43
m43
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Универсальный селект для ODBC
Подскажите, пожалуйста, можно ли написать селект на выборку первых N записей из таблицы, который бы правильно работал на большинстве баз?
Заранее спасибо!
...
Рейтинг: 0 / 0
31.03.2006, 18:56
    #33638518
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Универсальный селект для ODBC
Код: plaintext
1.
2.
3.
4.
5.
SQLExecDirect(hStmt, "SELECT * FROM MyTable ORDER BY 1, 2, 3", SQL_NTS);
for(i= 0 ; i<N; i++) {
    SQLFetch(hStmt);
    /// SQLGetData() или еще что-нибудь
}
SQLCancel(hStmt);
Абсолютная универсальность :)
...
Рейтинг: 0 / 0
31.03.2006, 19:08
    #33638544
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Универсальный селект для ODBC
White Owl wrote:
> SQLExecDirect(hStmt, "SELECT * FROM MyTable ORDER BY 1, 2, 3", SQL_NTS);
> for(i=*0*; i<N; i++) {
> SQLFetch(hStmt);
> /// SQLGetData() или еще что-нибудь
> }
> SQLCancel(hStmt);
>
> Абсолютная универсальность :)
и как минимум 2 ошибки, ага? :-)

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
31.03.2006, 22:04
    #33638728
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Универсальный селект для ODBC
lockyи как минимум 2 ошибки, ага? :-)
Где?
...
Рейтинг: 0 / 0
31.03.2006, 22:28
    #33638751
madgol
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Универсальный селект для ODBC
White Owl
Код: plaintext
1.
2.
3.
4.
5.
SQLExecDirect(hStmt, "SELECT * FROM MyTable ORDER BY 1, 2, 3", SQL_NTS);
for(i= 0 ; i<N; i++) {
    SQLFetch(hStmt);
    /// SQLGetData() или еще что-нибудь
}
SQLCancel(hStmt);
Абсолютная универсальность :)
А если N - сотни тысяч?
Лучше написать класс с потомками для каждого диалекта
...
Рейтинг: 0 / 0
02.04.2006, 17:57
    #33639776
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Универсальный селект для ODBC
White Owl wrote:
>Где?
> SQLExecDirect(hStmt, "SELECT * FROM MyTable ORDER BY 1, 2, 3", SQL_NTS);
не все сервера поддерживают ORDER BY 1,2,3

> for(i=*0*; i<N; i++) {
> SQLFetch(hStmt);
а если число строк в выборке меньше N?

> /// SQLGetData() или еще что-нибудь
> }
> SQLCancel(hStmt);
>
> Абсолютная универсальность :)
а-ха!

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
03.04.2006, 10:45
    #33640447
m43
m43
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Универсальный селект для ODBC
White Owl
Код: plaintext
1.
2.
3.
4.
5.
SQLExecDirect(hStmt, "SELECT * FROM MyTable ORDER BY 1, 2, 3", SQL_NTS);
for(i= 0 ; i<N; i++) {
    SQLFetch(hStmt);
    /// SQLGetData() или еще что-нибудь
}
SQLCancel(hStmt);
Абсолютная универсальность :)
неа, так не пойдет, слишком долго работает, если много записей и задана сортировка по какой-либо колонке.
...
Рейтинг: 0 / 0
03.04.2006, 18:51
    #33642014
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Универсальный селект для ODBC
lockyне все сервера поддерживают ORDER BY 1,2,3
А зачем использовать такой кривой сервер? Кстати, напомни, какой именно сервер не умеет сортировать по номерам колонок в резалтсете?

locky> for(i=*0*; i<N; i++) {
> SQLFetch(hStmt);
а если число строк в выборке меньше N?
Тогда SQLFetch() вернет SQL_NO_DATA и ты сделаешь break циклу.
А почему ты не прицепился к отсутствию проверки на ошибки?


m43неа, так не пойдет, слишком долго работает, если много записей и задана сортировка по какой-либо колонке.? О чем ты говоришь? Кто и где долго работает? Твой сервер долго делает сортировку по order by? Или твой драйвер ODBC не умеет сбрасывать остатки резалтсета пока он весь не выкачан?
...
Рейтинг: 0 / 0
03.04.2006, 19:15
    #33642068
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Универсальный селект для ODBC
White Owl wrote:
> locky
> не все сервера поддерживают ORDER BY 1,2,3
>
>
> А зачем использовать такой кривой сервер? Кстати, напомни, какой именно
> сервер не умеет сортировать по номерам колонок в резалтсете?
Ну, зачем такой кривой - фиг его знает, но хотять то универсально. А
какой не поддерживает - ну... есть наверное, такие.
>

> locky
> > for(i=*0*; i<N; i++) {
> > SQLFetch(hStmt);
> а если число строк в выборке меньше N?
>
>
> Тогда SQLFetch() вернет SQL_NO_DATA и ты сделаешь break циклу.
> А почему ты не прицепился к отсутствию проверки на ошибки?
К этому и прицепился, собственно.

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Универсальный селект для ODBC / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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