столбцы данных в VB.net - PullRequest
       21

столбцы данных в VB.net

0 голосов
/ 18 июня 2019

check this image

У меня есть 7 таблиц COA, как показано на рисунке. Что мне нужно, так это то, что при открытии баланса goto - (отрицательный), тип должен автоматически показывать знак CR, и всякий раз, когда этот счет становится положительным +, он должен автоматически изменяться на DR.

EDIT
из комментариев:

/****** Script for SelectTopNRows command from SSMS ******/ 
SELECT TOP 1000    
       [AccountID] ,
       [Account_Title] ,
       [opening_balance] ,
       [Account_group] ,
       [Group_subHead] ,
       [Accounts_categories] ,
       [type] 
 FROM [dbo_main].[dbo].[COA]

1 Ответ

0 голосов
/ 18 июня 2019

у вас есть несколько вариантов, как это сделать, какой из них подходит вам лучше всего, только вы можете знать

Обратите внимание, что все решения предполагают, что AccountID является первичным ключом таблицы COA, если это не так, вам придется внести корректировки

Без сомнения, будет больше вариантов, я только что упомянул несколько, которые приходят на ум.

первая опция: изменить запрос, чтобы он вычислял правильное значение для столбца Type, и, таким образом, сохранение значения в базе данных больше не требуется

SELECT TOP 1000    
       [AccountID] ,
       [Account_Title] ,
       [opening_balance] ,
       [Account_group] ,
       [Group_subHead] ,
       [Accounts_categories] ,
       case when [opening_balance] < 0 then 'CR' else 'DR' end as Type
 FROM [dbo_main].[dbo].[COA]

второй параметр: Измените схему таблицы, чтобы столбец Type был вычисляемым столбцом

alter table [dbo_main].[dbo].[COA] drop column type

alter table [dbo_main].[dbo].[COA] 
add Type as case when [opening_balance] < 0 then 'CR' else 'DR' end

третий вариант: написать триггер, который сохраняет значение в столбце Type правильно

create trigger tr_UI_dbo_main on [dbo_main].[dbo].[COA]
for update, insert
as
begin
      set nocount on

      update [dbo_main].[dbo].[COA]
      set    type = 'CR'
      where  AccountID in (select AccountID from inserted)
      and    Opening_balance < 0

      update [dbo_main].[dbo].[COA]
      set    type = 'DR'
      where  AccountID in (select AccountID from inserted)
      and    Opening_balance >= 0
end

четвертый вариант: Написать код в вашем клиенте VB, который изменяет текст в сетке данных
К сожалению, я не знаю VB, поэтому вам придется посмотреть, как это сделать самостоятельно

пятый вариант: написать представление и использовать это представление вместо непосредственного запроса к таблице. Это также означает, что больше нет смысла хранить значение Type в вашей таблице, как и первый параметр

create view vw_COA as
SELECT [AccountID] ,
       [Account_Title] ,
       [opening_balance] ,
       [Account_group] ,
       [Group_subHead] ,
       [Accounts_categories] ,
       case when [opening_balance] < 0 then 'CR' else 'DR' end as Type
 FROM [dbo_main].[dbo].[COA]

и используйте вид в вашем клиенте вот так

SELECT top 1000
       [AccountID] ,
       [Account_Title] ,
       [opening_balance] ,
       [Account_group] ,
       [Group_subHead] ,
       [Accounts_categories] ,
       Type
 FROM [dbo_main].[dbo].vw_COA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...