Добавлено: 24 Декабрь 2003, 19:09
Добрый день!
Наконец-то дошли руки разобраться с 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)
Наконец-то дошли руки разобраться с 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)