Добрый день!
Наконец-то дошли руки разобраться с 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)
odbc
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Вопрос к знатокам OABC API
Один вопрос меня очень даже давно мучает, т к ни как не могу найти ответа на него
есть хранимая процедура с INPUT и OUTPUT параметрами, если в качестве параметров простые поля (определённого размера), а не image, text, которе BLOB'ы, То всё отрабатывается правильно, как только в качестве входного параметра присутсвует image, например, то OUTPUT параметры не работают, глядел что получается профайлером мелкософовским, так в результате на ODBC'шный {calll procname(?,?,?)} он формирует неправильный EXEC, т е нету там вааще понятия output. Хотя все INPUT в процедуру попадают правильно.
ODBC трасса показывает что всё Ok, а на самом деле ничего не Ok, может это мои руки, а может есть где почитать про это, искал, не нашёл.
может кто то либо знает решение, либо знает где почитать о данной проблеме?
есть хранимая процедура с INPUT и OUTPUT параметрами, если в качестве параметров простые поля (определённого размера), а не image, text, которе BLOB'ы, То всё отрабатывается правильно, как только в качестве входного параметра присутсвует image, например, то OUTPUT параметры не работают, глядел что получается профайлером мелкософовским, так в результате на ODBC'шный {calll procname(?,?,?)} он формирует неправильный EXEC, т е нету там вааще понятия output. Хотя все INPUT в процедуру попадают правильно.
ODBC трасса показывает что всё Ok, а на самом деле ничего не Ok, может это мои руки, а может есть где почитать про это, искал, не нашёл.
может кто то либо знает решение, либо знает где почитать о данной проблеме?
-
- Ветеран движения
- Сообщения: 78
- Зарегистрирован: 04 Август 2005, 9:35
- Контактная информация:
Угу, есть такое дело. Если убрать в декларации ХП из возвращаемого параметра ключевое слово OUTPUT - планировщик после парсера скушает молча и без воплей. При замене входящего блоб-поля на обычное - сразу же получаем несоответсвие формального и актуального декларируемого параметров. Едиственное, что радует - возможность вернуть значение из ХП через RETURN