powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Преобразование типа в ODBC. Как отключить?
4 сообщений из 4, страница 1 из 1
Преобразование типа в ODBC. Как отключить?
    #34348288
MoVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток всем!

Есть клиент-серверная архитектура вида:

VFP6 <-> ODBC <-> PostgreSQL (Linux)



На PostgreSQL имеется таблица с необходимыми индексами следующего вида:

CREATE TABLE проводки (
КОД SERIAL,
* * *
ДОККОД INT NOT NULL,
* * *
);



На VFP6 создан параметризованный просмотр, имеющий к примеру следующий код:

SELECT * FROM проводки WHERE ДОККОД=?pnDocNum



Обращение к данным на PostgreSQL сервер происходит по команде:

pnDocNum = 1234 && Определяем код конкретного документа
REQUERY()



На сервер поступает такой запрос:

SELECT * FROM проводки WHERE ДОККОД='1234'::float8

Запрос выполняется очень долго, т.к. где-то в глубинах VFP6 или драйвера ODBC происходит преобразование типа константы 1234 к типу float8,
что как я думаю вызывает преобразование значений ДОККОД из типа INT в тип float8 в таблице <проводки> в момент выполнения запроса.

А если выполнить на сервере запрос

SELECT * FROM проводки WHERE ДОККОД=1234,

то он выполняется мгновенно.



Как убрать это преобразование констант к типу float8?

Заранее всем спасибо!
...
Рейтинг: 0 / 0
Преобразование типа в ODBC. Как отключить?
    #34350372
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через параметр числовые данные ВСЕГДА конвертируются в числа с плавающей точкой.

Если необходимо явно передать целочисленное значение или число с фиксированным положением точки, то придется отказаться от параметра и формировать текст запроса явно.

Код: plaintext
1.
2.
lcString = "SELECT * FROM проводки WHERE ДОККОД="+TransForm(m.pnDocNum)
=SqlExec("номер соединения",m.lcString)

Или же использовать явные команды конвертации самого сервера. Не знаю, есть ли такие в PostgreSQL, но в синтаксисе FoxPro это нечто вроде

Код: plaintext
SELECT * FROM проводки WHERE ДОККОД=INT(?pnDocNum)

Преобразование в действительный тип данных не может являтся причиной замедления выполнения запроса. Однако это может являться причиной некорректной обработки (выборки).
...
Рейтинг: 0 / 0
Преобразование типа в ODBC. Как отключить?
    #34356550
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМЧерез параметр числовые данные ВСЕГДА конвертируются в числа с плавающей точкой.

Где об этом почитать можно? Мне надо доку нужным людям под нос подсунуть.
...
Рейтинг: 0 / 0
Преобразование типа в ODBC. Как отключить?
    #34356734
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kruchinin Pahan ВладимирМЧерез параметр числовые данные ВСЕГДА конвертируются в числа с плавающей точкой.

Где об этом почитать можно? Мне надо доку нужным людям под нос подсунуть.
Нигде. Это было обнаружено опытным путем. Правда, для MS SQL

http://forum.foxclub.ru/read.php?29,144755,144755#msg-144755

Но, судя по вопросу, это касается и PostgreSQL

Возможно, что-то на эту тему есть в описании собственно ODBC драйвера. Там должно быть написано во что (в какое представление) он конвертирует числовые данные.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Преобразование типа в ODBC. Как отключить?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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