Изменить значения выводимого запроса!

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Изменить значения выводимого запроса!

Сообщение sergey-911 » 30.03.2005 (Ср) 0:42

Уважаемые!
Подскажите, как написать запрос, который в определенных столбцах таблицы возвращал бы в клиент те данные самой таблицы, а эквивалентные значения. К примеру не True/False, а да/нет и тп.
Нужно для того, чтобы в клиенте заполнять таблицу не в цикле ручками, а через DataSource.
Буду признателен любой информации.
БД - SQL!
:D
С уважением, Сергей.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 30.03.2005 (Ср) 0:50

BOL -> CASE, described.
Код: Выделить всё
-- Example:
select CASE Column1
  WHEN 'True' THEN 'да'
  ELSE 'нет'
END as [NewColumn1],
...

Только применительно к твоему примеру это коряво, негибко и вообще неправильно. Правильно - сделать специальную таблицу с локализацией/подменой того, что ты хочешь преобразовать перед возвратом на клиент. Ну и в запросе кидать на нее джойн. Ибо никто не знает, клиент из какой страны тебе встретится в следующий раз.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 30.03.2005 (Ср) 11:37

Ennor писал(а):Правильно - сделать специальную таблицу с локализацией/подменой того, что ты хочешь преобразовать перед возвратом на клиент. Ну и в запросе кидать на нее джойн. Ибо никто не знает, клиент из какой страны тебе встретится в следующий раз.


Не - правильней пользоваться свойством Format колонки Grid-a.
Да и проще оно... :lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 30.03.2005 (Ср) 11:51

Andrey Fedorov писал(а):Не - правильней пользоваться свойством Format колонки Grid-a.
Да и проще оно... :lol:

Для простой подмены - да. Но когда у тебя идет замена не строки на строку, а ID справочной позиции меняется на ее описание... В данном случае все равно справочник в БД лежит, так что иначе и не сделать.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 30.03.2005 (Ср) 12:03

Ennor писал(а):
Andrey Fedorov писал(а):Не - правильней пользоваться свойством Format колонки Grid-a.
Да и проще оно... :lol:

Для простой подмены - да. Но когда у тебя идет замена не строки на строку, а ID справочной позиции меняется на ее описание... В данном случае все равно справочник в БД лежит, так что иначе и не сделать.


Что-то не понял что ты имеешь в виду.

В данном случае нужный результат достигается простым использованием свойства колонки Format. Больше при этом ничего не нужно. Работать будет на всех языках корректно. Зачем еще какие-то таблицы в базе для этой цели?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 30.03.2005 (Ср) 12:11

В данном конкретном случае - замене True на Да - формата достаточно. Но в общем случае реализации некой подстановки на основе других данных, не попадающих в выборку - нет, нужен справочник.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 30.03.2005 (Ср) 12:13

Ennor писал(а):В данном конкретном случае - замене True на Да - формата достаточно. Но в общем случае реализации некой подстановки на основе других данных, не попадающих в выборку - нет, нужен справочник.


Ну тогда его и применять.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 30.03.2005 (Ср) 17:38

Спасибо за интересные ответы. Справочник создавать не хочу, т.к. У меня в одном случае "1" - это "Да", в другом случае - "Доступ открыт", в третим еще что-то. Хочу понять, как это работает в синтаксисе SQL, создать хранимую процедуру, типо этой
Код: Выделить всё
CREATE PROCEDURE [dbo].sp_AllUsers
--Процедура отображения пользователей в системе

@where  varchar(8000) = NULL   --Условие поиска


AS

DECLARE @system varchar(10)   --Сообщение о входе в систему

SELECT [User].Login, [User].Fam + ' ' + LEFT([User].Nam, 1)
    + '.' + LEFT([User].Last, 1) + '.' AS [User], Service.Service,


   (REPLACE([User].Dopusk, '1', 'Открыт')) +
   (REPLACE([User].Dopusk, '0', 'Закрыт'))As [System],

   
    [User].DUZ, Dopusk.Dop1, Dopusk.Dop2, Dopusk.Dop3,
    Dopusk.Dop4, Dopusk.Dop5, Dopusk.Dop6, Dopusk.Dop7,
    Dopusk.Dop8, Dopusk.Dop9, Dopusk.Dop10,
    [User].User_ID
FROM dbo.[User] INNER JOIN
    dbo.Dopusk ON
    dbo.[User].User_ID = dbo.Dopusk.User_ID INNER JOIN
    dbo.Service ON
    dbo.Dopusk.Service_ID = dbo.Service.Service_ID


Но выводит эта байда не "Открыт"/ "Закрыт", а "Открыт0"/ "1Закрыт", как Вы уже догадались.

Помогите разобраться здесь
Код: Выделить всё
-- Example:
SELECT CASE Column1
  WHEN 'True' THEN 'да'
  ELSE 'нет'
END AS [NewColumn1],
...

или здесь
Код: Выделить всё
Не - правильней пользоваться свойством Format колонки Grid-a.
С уважением, Сергей.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 30.03.2005 (Ср) 17:46

Метод заполнения грида в клиенте описан здесь
http://bbs.vbstreets.ru/viewtopic.php?p=108005#108005
, если кому интересно.
С уважением, Сергей.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 31.03.2005 (Чт) 1:17

Ennor
Спасибо тебе, добрый человек. Если бы не ты, так сидел бы до сканчания века и ждал, пока рак на горе свиснет. Вот, что состружилось в итоге:
Код: Выделить всё
SELECT     dbo.[User].Login, dbo.[User].Fam + ' ' + LEFT(dbo.[User].Nam, 1) + '.' + LEFT(dbo.[User].[Last], 1) + '.' AS [User], dbo.Service.Service,
                      CASE dbo.[User].Dopusk WHEN '1' THEN 'да' ELSE 'нет' END AS [System], dbo.[User].DUZ, dbo.Dopusk.Dop1, dbo.Dopusk.Dop2,
                      dbo.Dopusk.Dop3, dbo.Dopusk.Dop4, dbo.Dopusk.Dop5, dbo.Dopusk.Dop6, dbo.Dopusk.Dop7, dbo.Dopusk.Dop8, dbo.Dopusk.Dop9,
                      dbo.Dopusk.Dop10, dbo.[User].User_ID
FROM         dbo.[User] INNER JOIN
                      dbo.Dopusk ON dbo.[User].User_ID = dbo.Dopusk.User_ID INNER JOIN
                      dbo.Service ON dbo.Dopusk.Service_ID = dbo.Service.Service_ID

Осталось разобраться со свойством Format таблицы vsFlexGrid.

А еще в этом объекте интересная особенность.
Код: Выделить всё
VSFlexGrid1.BindToArray
срабатывает быстрее, чем
Set VSFlexGrid1.DataSource
Минус - не срабатывается сортировка. Почему - не знаю.


Хотя, возможно, к этому форуму отошения вопрос не имеет.
http://bbs.vbstreets.ru/viewtopic.php?p=108005#108005
С уважением, Сергей.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 31.03.2005 (Чт) 7:26

Надо сказать что некоторые Grid-ы позволяют формировать поле на лету, то есть при чтении записи они выдают соответствующее событие, в котором можно самостоятельно сформировать значение нужного поля (например, по какому-то выражению из полей таблицы или еще как). У Janus GridEx это событие FetchData. У VSFlexGrid возможно тоже что-то такое есть...

VSFlexGrid1.BindToArray
срабатывает быстрее, чем
Set VSFlexGrid1.DataSource
Минус - не срабатывается сортировка. Почему - не знаю.


Тут ничего не скажу - видимо это какая-то особенность VSFlexGrid - я с ним работал за все времяч не более 10 минут...

Janus нормально сортируется/группируется будучи основанным как на массиве, так и на Recordset-e...

Вообще если записей в выборке много (более десятка тысяч) и сортировка/группировка выполняется Grid-ом то тормоза вполне могут быть - на это ведь нужно время...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 31.03.2005 (Чт) 22:38

У Janus GridEx это событие FetchData.

Спасибо за ответ. Если сможешь выложи свою библиотеку "Janus GridEx" в топик! В VSFlexGrid поля тоже генерятся автоматом, а еще при нажатии на клавишу в ячейке - происходит поиск в столбце; при клике - сортировка восьмью видами по столбцу. В общем, куча всяких примочек, не могу с Format разобраться и понять, почему при заолнении методом "VSFlexGrid1.BindToArray" сортировка не работает. А так - очень качественная сетка. За ентот грид бешенных денег разработчики ждут. Не знаю, почему тебе не понравился?
С уважением, Сергей.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 01.04.2005 (Пт) 7:23

sergey-911 писал(а):Если сможешь выложи свою библиотеку "Janus GridEx" в топик!


Не смогу - он не мой :(

sergey-911 писал(а):За ентот грид бешенных денег разработчики ждут. Не знаю, почему тебе не понравился?


Ну вообще-то за любой нормальный компонент (точнее за сделанную работу) разработчики денежку хотят.

А чем не нравится VSFlexGrid? Тем что с ним сложней работать, а время зачастую это деньги. Просто у Janus-a мне больше понравился дизайнер, и хорошо продумана объектная модель. VSFlexGrid имеет свои прелести, но, на мой взгляд, они не перевешивают. Впрочем это дело вкуса, а о нем не спорят...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 01.04.2005 (Пт) 21:59

Не смогу - он не мой

Жаль! Попробую найти в инете!
С уважением, Сергей.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList