Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 CREATE TYPE Boolean  [new]
AndrF
Member

Откуда:
Сообщений: 2196
Собственно в чем дело - есть старая программа на Access. Древняя, огромная и дурнонаписанная. Но более-менее работает. Табличная часть разбросана по разным mdb-шкам. Хочется все таблицы из mdb-шек перетащить на MS SQL. Запросы там не дюже крутонавороченные - через присоединенные таблицы работать будет. Пока основная из предвидимых проблем связана с полями типа Boolean. Просмотреть все их включения в коде и программе - нереально. А тупо использовать bit нельзя, так как возможны ошибки, ибо 1<>True. Соответственно выходит, что на основе bit нужно создать свой тип Boolean, который будет работать именно как Access-овский.

То что это можно сделать с помощью CREATE TYPE и CLR я понимаю, но никогда прежде это делать не приходилось... Может у кого есть полноценный пример создания хоть какого-то типа подобным образом? Чтобы поменьше времени на разборки ушло...
17 дек 15, 09:26    [18571352]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
Glory
Member

Откуда:
Сообщений: 104751
AndrF
Соответственно выходит, что на основе bit нужно создать свой тип Boolean, который будет работать именно как Access-овский.

А как ваш тип поменят синтаксис то ?С ним станет возможно написать запрос с where ...and MyBoolean... ?
17 дек 15, 09:30    [18571369]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
AndrF
Member

Откуда:
Сообщений: 2196
Glory
А как ваш тип поменят синтаксис то ?С ним станет возможно написать запрос с where ...and MyBoolean... ?


Если запрос вывалится с ошибкой, то его несложно и поправить - подобные места обнаружатся и исправятся довольно быстро. Хуже если никакой ошибки не произойдет, а программа будет выполняться неверно.
17 дек 15, 09:43    [18571416]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
AndrF
Member

Откуда:
Сообщений: 2196
Glory
А как ваш тип поменят синтаксис то ?С ним станет возможно написать запрос с where ...and MyBoolean... ?


Сейчас проверил в Access-е - вроде все должно работать.

В общем, bit желательно для Accessу выдать как smallint со значением Nhet равным -1... Аж не знаю насколько это возможно...
17 дек 15, 09:54    [18571441]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
Glory
Member

Откуда:
Сообщений: 104751
AndrF
Если запрос вывалится с ошибкой, то его несложно и поправить - подобные места обнаружатся и исправятся довольно быстро.

Т.е. переписать на MyBoolean =1 или MyBoolean =0 ?
И чем это будет отличаться от простого bit ?
17 дек 15, 09:55    [18571445]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
AndrF
Member

Откуда:
Сообщений: 2196
Glory
Т.е. переписать на MyBoolean =1 или MyBoolean =0 ?
И чем это будет отличаться от простого bit ?


Нет.

MyBoolean = -1 и MyBoolean = 0. Где MyBoolean для Accessa имеет тип Integer (sql-ный smallint).
17 дек 15, 09:58    [18571450]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
правильный проходящий.
Guest
AndrF,
вы не задавались вопросом "а как работал Access с MS SQL в до .Net-овские времена?" И никаких типов не создавали, однако.
Короче, вы ищете кошку там, где ее нет. Не надо никаких типов, надо просто пользоваться типом bit, в котором ДРАЙВЕРЫ доступа сами производят необходимую конвертацию типов, превращая 1 в истину и 0 в ложь.
17 дек 15, 10:00    [18571458]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
Glory
Member

Откуда:
Сообщений: 104751
AndrF
Нет.

MyBoolean = -1 и MyBoolean = 0. Где MyBoolean для Accessa имеет тип Integer (sql-ный smallint).

Да хоть минус миллион
На серверной стороне в запросе все равно придется писать _выражение_, а не просто тип ставить.
17 дек 15, 10:00    [18571459]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
AndrF
Member

Откуда:
Сообщений: 2196
правильный проходящий.
AndrF,
Короче, вы ищете кошку там, где ее нет. Не надо никаких типов, надо просто пользоваться типом bit, в котором ДРАЙВЕРЫ доступа сами производят необходимую конвертацию типов, превращая 1 в истину и 0 в ложь.


Черт, точно - проверил - так и есть. Давно не работал с Access-ом - сказывается.

В принципе, на первый взгляд, вроде все как надо, правда NULL выводится как False.

Ушел дальше проверять...
17 дек 15, 10:16    [18571515]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
AndrF
Member

Откуда:
Сообщений: 2196
[quot Glory]
AndrF
Нет.
На серверной стороне в запросе все равно придется писать _выражение_, а не просто тип ставить.


Пока не до запросов на сервере. Работа через присоединенные таблицы, используя DAO.

--------------------------------

Проверяю - в таблицу пишу (в MSSM):

ID Bool
1 1
2 NULL
3 0
4 1

Access при открытии таблицы отображает это дело как:

ID Bool
1 -1
2 0
3 0
4 -1

При выполнении кода

    Dim r As DAO.Recordset
    Set r = CurrentDb.OpenRecordset("dbo__Test", dbOpenSnapshot)
    Do Until r.EOF
        Debug.Print r!ID, r!Bool
        r.MoveNext
    Loop


Выводит:

1 True
2 False
3 False
4 True

Однако при выполнении запроса

SELECT ID, Bool
FROM _Test
WHERE not Bool


Выводит лишь

3 0

Но это решаемо - просто надо запретить NULL значения...
17 дек 15, 10:30    [18571579]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
Glory
Member

Откуда:
Сообщений: 104751
AndrF
Работа через присоединенные таблицы, используя DAO.

А MSSQL тут тогда причем ?
17 дек 15, 10:34    [18571608]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
AndrF
Member

Откуда:
Сообщений: 2196
Glory
AndrF
Работа через присоединенные таблицы, используя DAO.

А MSSQL тут тогда причем ?


Таблицы будут жить на нем. Программу приходится поддерживать и развивать. Хотелось бы уйти с нее (ибо кривизна неимоверная), конечно, но неизвестно когда это получится... Но хоть новые части хочется делать по нормальному, ну и избавиться от лишних MDB-шек.
17 дек 15, 10:37    [18571635]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
Glory
Member

Откуда:
Сообщений: 104751
AndrF
Таблицы будут жить на нем.

Железная логика.
А еще сервер и программа установлены на Windows. Так что можно еще спросить в форуме по Windows.
А также при работе сервера и программы используются процессор, оперативная память и жесткий диск. Так что спросить еще можно в форуме по настройке оборудования
...
17 дек 15, 10:40    [18571657]     Ответить | Цитировать Сообщить модератору
 Re: CREATE TYPE Boolean  [new]
AndrF
Member

Откуда:
Сообщений: 2196
Glory
AndrF
Таблицы будут жить на нем.

А также при работе сервера и программы используются процессор, оперативная память и жесткий диск. Так что спросить еще можно в форуме по настройке оборудования...


Меня вообще-то интересовал конкретный вопрос взаимодействия Access-a и MS SQL, с которым, как я считал, возможны проблемы.

В итоге пока выяснил что есть одна проблема, но вполне решаемая - полям bit надо запретить NULL значения.
17 дек 15, 10:44    [18571700]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить