Добрый день!
 
 Наконец-то дошли руки разобраться с 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, может это мои руки, а может есть где почитать про это, искал, не нашёл.
может кто то либо знает решение, либо знает где почитать о данной проблеме?
- 
				softcreator
 - Ветеран движения
 - Сообщения: 78
 - Зарегистрирован: 04 Август 2005, 9:35
 - Контактная информация:
 
Угу, есть такое дело. Если убрать в декларации ХП из возвращаемого параметра ключевое слово OUTPUT - планировщик после парсера скушает молча и без воплей. При замене входящего блоб-поля на обычное - сразу же получаем несоответсвие формального и актуального декларируемого параметров. Едиственное, что радует - возможность вернуть значение из ХП через RETURN
			
			
									
						