使用前缀生成自动ID

时间:2019-01-28 17:16:57

标签: vb.net ms-access

我正在为员工建立一个数据库,我需要增加员工ID,并使用诸如“ US0001”之类的前缀

我尝试了提取后两位数字并将其添加1以获得下一个员工ID的代码。但在第11条记录时,它会中断,并表示无法创建重复记录。

    'retrieving the user_id and adding a number to it.
    Dim dr As OleDbDataReader
    'Dim da As OleDbDataAdapter
    Dim intCount As Int16 = 0
    'cn.Open()
    Dim cmddr As New OleDbCommand
    cmddr.CommandText = "SELECT user_id FROM tblusers " & _
    "WHERE user_id=(SELECT MAX(user_id) FROM tblusers)"
    cmddr.Connection = cn
    dr = cmddr.ExecuteReader
    dr.Read()
    If dr.HasRows = True Then
        Dim str As String
        str = dr.Item("user_id")
        Dim lst2 As Integer
        lst2 = str.Substring(str.Length - 2)
        txt_user_id.Text = "U0" & lst2 + 1
    Else
        txt_user_id.Text = "U01"
    End If

    dr.Close()
    'cn.Close()

我希望生成带前缀的员工ID,并且不形成重复

1 个答案:

答案 0 :(得分:0)

首先,您可以将SQL语句更改为:

public GerenciarGenericoViewModel()
        {
            InserirProdutoCommand = new RelayCommand(InserirProduto);
            ExcluirProdutoCommand = new RelayCommand(ExcluirProduto, CanExcluirProduto);

            InserirUnidadeCommand = new RelayCommand(InserirUnidade);
            ExcluirUnidadeCommand = new RelayCommand(ExcluirUnidade, CanExcluirUnidade);

            InserirEmpresaCommand = new RelayCommand(InserirEmpresa);
            ExcluirEmpresaCommand = new RelayCommand(ExcluirEmpresa, CanExcluirEmpresa);

            InserirOperadorCommand = new RelayCommand(InserirOperador);
            ExcluirOperadorCommand = new RelayCommand(ExcluirOperador, CanExcluirOperador);

            SalvarCommand = new RelayCommand(Salvar, CanSalvar);
            CancelarCommand = new RelayCommand(Cancelar);

            ListaProdutos = new ObservableCollection<Produto>(ProdutosAccess.GetProdutos());
            ListaUnidades = new ObservableCollection<UnidadeMedida>(ProdutosAccess.GetUnidadesMedida());
            ListaEmpresas = new ObservableCollection<Empresa>(ProdutosAccess.GetEmpresas());
            ListaOperadores = new ObservableCollection<Operador>(ProdutosAccess.GetOperadores());

        }

        public RelayCommand InserirProdutoCommand { get; }
        public RelayCommand ExcluirProdutoCommand { get; }

        public RelayCommand InserirUnidadeCommand { get; }
        public RelayCommand ExcluirUnidadeCommand { get; }

        public RelayCommand InserirEmpresaCommand { get; }
        public RelayCommand ExcluirEmpresaCommand { get; }

        public RelayCommand InserirOperadorCommand { get; }
        public RelayCommand ExcluirOperadorCommand { get; }

        int check = 0;

        public RelayCommand SalvarCommand { get; }
        public RelayCommand CancelarCommand { get; }

        public ObservableCollection<Produto> ListaProdutos { get; }
        public ObservableCollection<UnidadeMedida> ListaUnidades { get; }
        public ObservableCollection<Empresa> ListaEmpresas { get; }
        public ObservableCollection<Operador> ListaOperadores { get; }

        private Produto _produtoSelecionado;
        public Produto ProdutoSelecionado
        {
            get => _produtoSelecionado;
            set => Set(() => ProdutoSelecionado, ref _produtoSelecionado, value);
        }

        private UnidadeMedida _unidadeSelecionada;
        public UnidadeMedida UnidadeSelecionada
        {
            get => _unidadeSelecionada;
            set => Set(() => UnidadeSelecionada, ref _unidadeSelecionada, value);
        }

        private Empresa _empresaSelecionada;
        public Empresa EmpresaSelecionada
        {
            get => _empresaSelecionada;
            set => Set(() => EmpresaSelecionada, ref _empresaSelecionada, value);
        }

        private Operador _operadorSelecionado;
        public Operador OperadorSelecionado
        {
            get => _operadorSelecionado;
            set => Set(() => OperadorSelecionado, ref _operadorSelecionado, value);
        }

        public void InserirProduto()
        {
            ListaProdutos.Add(new Produto());
            check++;
        }

        public void ExcluirProduto()
        {
            ListaProdutos.Remove(ProdutoSelecionado);
            check++;
        }

        public bool CanExcluirProduto()
        {
            return ProdutoSelecionado != null;
        }

        public void InserirUnidade()
        {
            ListaUnidades.Add(new UnidadeMedida());
            check++;
        }

        public void ExcluirUnidade()
        {
            ListaUnidades.Remove(UnidadeSelecionada);
            check++;
        }

        public bool CanExcluirUnidade()
        {
            return UnidadeSelecionada != null;
        }

        public void InserirEmpresa()
        {
            ListaEmpresas.Add(new Empresa());
            check++;
        }

        public void ExcluirEmpresa()
        {
            ListaEmpresas.Remove(EmpresaSelecionada);
            check++;
        }

        public bool CanExcluirEmpresa()
        {
            return EmpresaSelecionada != null;
        }

        public void InserirOperador()
        {
            ListaOperadores.Add(new Operador());
            check++;
        }

        public void ExcluirOperador()
        {
            ListaOperadores.Remove(OperadorSelecionado);
            check++;
        }

        public bool CanExcluirOperador()
        {
            return OperadorSelecionado != null;
        }

        public void Salvar()
        {
            var listaProdutos = ListaProdutos.ToList();
            var listaUnidades = ListaUnidades.ToList();
            var listaEmpresas = ListaEmpresas.ToList();
            var listaOperadores = ListaOperadores.ToList();

            listaProdutos = listaProdutos.Where(x => !string.IsNullOrWhiteSpace(x.Descricao)).ToList();
            listaUnidades = listaUnidades.Where(x => !string.IsNullOrWhiteSpace(x.Descricao)).ToList();
            listaEmpresas = listaEmpresas.Where(x => !string.IsNullOrWhiteSpace(x.Descricao)).ToList();
            listaOperadores = listaOperadores.Where(x => !string.IsNullOrWhiteSpace(x.Nome)).ToList();

            ProdutosAccess.SetListProdutos(listaProdutos);
            ProdutosAccess.SetListUnidades(listaUnidades);
            ProdutosAccess.SetListEmpresas(listaEmpresas);
            ProdutosAccess.SetListOperadores(listaOperadores);

            MessageBox.Show(messageBoxText: "Dados salvos com sucesso!",
                           caption: "Gerenciar Dados", button: MessageBoxButton.OK,
                           icon: MessageBoxImage.Information);

            Sair();
        }

        public bool CanSalvar()
        {
            if (check == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        public void Cancelar()
        {
            Sair();
        }

        public void Sair()
        {
            Navigator.CloseWindowByDataContext(this);
        }
    }

select max(user_id) as max_id from tblusers 子句中不需要子查询。

当然还要从以下更改相应的行:

where

收件人:

str = dr.Item("user_id")

第二,请注意,代码的逻辑将导致以下编号顺序:

str = dr.Item("max_id")

这意味着当序列到达第十条记录时,U01 U02 U03 ... U09 U010 U011 ... 将始终返回max(user_id),直到序列到达U09

要解决此问题,您将需要在用户ID前面加上零,例如:

U090