|
C++ ADO к MSSQL и rs->Fields->GetItem()->Type
|
|||
---|---|---|---|
#18+
Добрый день. Не уверен, что правильно выбрал раздел, но если что перенесут... Вопрос такой. Из проги на С через ADO подключаюсь к БД MSSQL сервера, делаю запрос, ну и получаю RecordSet. Я хочу узнать какой тип данных для каждого столбика результирующего рекордсета. Делаю я это через rs->Fields->GetItem(1)->Type... И что интересно для целочисленных типов (adTinyInt, adSmallInt, adInteger, adBigInt, adUnsignedTinyInt, adUnsignedSmallInt, adUnsignedInt, adUnsignedBigInt) все возвращается корректно и для дробных (adSingle, adDouble, adCurrency) - тоже все ОК, а вот для дат (adDate, adDBDate, adDBTimeStamp) почему-то нет... Столбики дат почему-то возвращают тип (adVarWChar, adVarChar)? Кто-нибудь сталкивался может быть? Есть решение, чтобы нормальный тип определить? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 17:29 |
|
C++ ADO к MSSQL и rs->Fields->GetItem()->Type
|
|||
---|---|---|---|
#18+
Badhabit, Тип данных проектируется еще на стадии составления запроса. Или школьная задачка? В самой бд какой тип поля? В запросе не меняешь тип? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 18:18 |
|
C++ ADO к MSSQL и rs->Fields->GetItem()->Type
|
|||
---|---|---|---|
#18+
BadhabitИз проги на С через ADO подключаюсь к БД MSSQL сервера Для этого есть как минимум два пути: ADO->OLE DB->ODBC->Native Client и ADO->OLE DB->Native Client. Для начала определись какой из них ты используешь. Потом тестовыми программками сможешь определить где именно тип преобразуется не так как ты ожидаешь. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 18:49 |
|
C++ ADO к MSSQL и rs->Fields->GetItem()->Type
|
|||
---|---|---|---|
#18+
Badhabit Столбики дат почему-то возвращают тип (adVarWChar, adVarChar)? Возвращают куда и как? В смысле какой функцией ты читаешь эти даты? У ADO (как и у всех остальных интерфейсов) есть общий принцип: тип переменной куда читаем данные желательно чтобы совпадал с типом поля откуда читаем. Если не совпадают - интерфейс пытается сконвертировать из типа поля в тип переменной (обычно успешно, но...) А если интерфейс не знает как сконвертировать тип поля в тип переменной - делается универсальная конвертация в текст. То что у тебя интерфейс выдает текст - значит что ты пытаешься читать поле в неподходящий тип переменной. https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/datatypeenum?view=sql-server-ver15 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 20:33 |
|
C++ ADO к MSSQL и rs->Fields->GetItem()->Type
|
|||
---|---|---|---|
#18+
White OwlВозвращают куда и как? Это очень интересный вопрос: куда возвращает значение метод класса и как этот метод класса может догадаться, что слева от знака присваивания стоит переменная "неправильного" типа... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 20:59 |
|
C++ ADO к MSSQL и rs->Fields->GetItem()->Type
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov White OwlВозвращают куда и как? Это очень интересный вопрос: куда возвращает значение метод класса и как этот метод класса может догадаться, что слева от знака присваивания стоит переменная "неправильного" типа... О привязке переменных к резалтсету слышал? Вот о ней и речь шла. Хотя да, если конвертация вообще не возможна, то bind() упадет с ошибкой. А вообще использовать ADO в С++ это геморрой, проблемы и вообще глупость. ADO придуман для VB и там он прекрасен. А в С++ надо использовать ODBC, а если хочется классов, то взять один из сотен врапперов (лично мне нравится nanodbc). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2021, 01:30 |
|
|
Start [/forum/topic.php?fid=57&gotonew=1&tid=2017154]: |
0ms |
get settings: |
18ms |
get forum list: |
7ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
23ms |
get topic data: |
6ms |
get first new msg: |
4ms |
get forum data: |
1ms |
get page messages: |
160ms |
get tp. blocked users: |
2ms |
others: | 304ms |
total: | 529ms |
0 / 0 |