odbc

ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Добрый день!

Наконец-то дошли руки разобраться с Subj. Разбирался по
письмам А.Бирюкова.
Уткнулся в проблему:
Выполняю запрос на MSSQL.Запрос возвращает один столбец. Тип
данных столбца
получаю из функции SQLDescribeCol. Если тип данных SQL_INTEGER, то все
нормально, получаю столбец чисел. Если же SQL_VARCHAR , то SQLBindCol
возвращает SQL_ERROR и, соответственно, результат запроса -
пустые строчки.
В чем может быть проблема?


С уважеием,
Олейников Виктор. ovv@inbox.ru

(Добавление)

Здравствуйте Виктор!

Данных мало, что бы сказать что то вразумительное.
1.А какую ошибку возвращает SQLError?
2. А что ты подставляеш в SQLBindCol для данной колонки?

--
С уважением Бирюков Александр
mailto:baa@dionis.ru

(Добавление)

Добрый день, Александр!

1. szSqlState (4-й параметр QLError) вернулось S1003;
szErrorMsg (6-й параметр) Program type out of range

2. SQLBindCol(hsmt, 1, SQL_VARCHAR, ADDRESS(ПриемныйБуфер), 0,
ADDRESS(ДлинаРезультата))
В таблице поле описано как varchar(50)


С уважеием,
Олейников Виктор

(Добавление)

Виктор!

В 3 параметре SQLBindCol указывется тип данных С, а не SQL сервера.
Т.е. надо было указать SQL_C_CHAR.
Этот параметр отвечает - в какой тип данных надо конвертить входные данные.

--
С уважением Бирюков Александр

(Добавление)

Не помогло...
SQLBindCol перестал говорить об ошибке, но результат прежний - пустые
строки.

И SQL_VARCHAR (SQL_С_VARCHAR) я не сам придумал - это я так написал чтоб
было видно какое значение передается, а подставляю я туда значение,
получаемое для этой колонки из SQLDescribeCol - pfSqlType (6-й параметр).
Или я и тут не прав?

С уважеием,
Олейников Виктор

(Добавление)

SELF.RetCode = SQLBindCol(SELF.hstmt,class_i,SELF.QCol.ColType,!
SELF.QCol.Rezult,SELF.QCol.Size,SELF.QCol.pcbValue)

где
SELF.hstmt - handle курсора
class_i - номер колонки в SELECT
SELF.QCol.ColType = SQL_C_CHAR

SELF.QCol.pcbValue - диначмически созданный &LONG (для неблочного курсора)
Для блочного:
SELF.QCol.pcbValue = malloc(CHOOSE(SELF.BlockRow=0,1,SELF.BlockRow) * 4) !
BlockRow - количество записей в блоке

SELF.QCol.Rezult - приёмный буфер
SELF.QCol.Size - размер приёмного буфера

Andrew Myalin
andrew@arsis.ru
http://mavcla.arsis.ru (MAV Direct ODBC)
IRC: IRC.RINET.RU:6669, Channel #Clarion, AndrewM
ICQ: 10659412
Yahoo group: clarion@yahoogroups.com

(Добавление)

Неправ!
SQLDescribeCol возвращает какой SQL тип данных для данного столбца в
результате.
А ты должен по данному типу определиться в какой Си тип данных надо
конвертить этот столбец.
Например, если возвращается поле с типом DECIMAL, то в Си такого типа нет.
В таком случае, либо конвертят в строку(SQL_C_CHAR) или специальную группу.

--
С уважением Бирюков Александр
Написал: ClaList(2)
Гость

Сообщение Гость »

Люди помогите!
Кто-нибудь работал с MySQl 32352. Как использовать SEND через ODBC.
Написал: elen(92)
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Вопрос к знатокам OABC API

Сообщение Andrew™ »

Один вопрос меня очень даже давно мучает, т к ни как не могу найти ответа на него

есть хранимая процедура с INPUT и OUTPUT параметрами, если в качестве параметров простые поля (определённого размера), а не image, text, которе BLOB'ы, То всё отрабатывается правильно, как только в качестве входного параметра присутсвует image, например, то OUTPUT параметры не работают, глядел что получается профайлером мелкософовским, так в результате на ODBC'шный {calll procname(?,?,?)} он формирует неправильный EXEC, т е нету там вааще понятия output. Хотя все INPUT в процедуру попадают правильно.

ODBC трасса показывает что всё Ok, а на самом деле ничего не Ok, может это мои руки, а может есть где почитать про это, искал, не нашёл.

может кто то либо знает решение, либо знает где почитать о данной проблеме?
softcreator
Ветеран движения
Сообщения: 78
Зарегистрирован: 04 Август 2005, 9:35
Контактная информация:

Сообщение softcreator »

Угу, есть такое дело. Если убрать в декларации ХП из возвращаемого параметра ключевое слово OUTPUT - планировщик после парсера скушает молча и без воплей. При замене входящего блоб-поля на обычное - сразу же получаем несоответсвие формального и актуального декларируемого параметров. Едиственное, что радует - возможность вернуть значение из ХП через RETURN
Ответить