Iniciando Stored Procedure Sql Server 2008
Olá..
Iniciante no fórum.
Estou iniciando o estudo de stored procedures utilizando o Sql Server 2009 em conjunto com o Delphi 2009. (onde faço a criação de telas simples para verificar o funcionamento das mesmas via aplicação.).
Segue a primeira que adaptei, onde ela faz a inclusão, alteração e exclusão de registros em um BD simples.
[b:6d7268f2b1]Objetivo: quero que essa procedure incremente automaticamente o codCliente. (atualmente ele é digitado manualmente na aplicação.)[/b:6d7268f2b1]
Alguem tem uma dica?
*meu foco é o incremento via procedure mesmo não utilizando a programação no delphi.
Obrigado.
Iniciante no fórum.
Estou iniciando o estudo de stored procedures utilizando o Sql Server 2009 em conjunto com o Delphi 2009. (onde faço a criação de telas simples para verificar o funcionamento das mesmas via aplicação.).
Segue a primeira que adaptei, onde ela faz a inclusão, alteração e exclusão de registros em um BD simples.
[b:6d7268f2b1]Objetivo: quero que essa procedure incremente automaticamente o codCliente. (atualmente ele é digitado manualmente na aplicação.)[/b:6d7268f2b1]
CREATE PROCEDURE [dbo].[sp_CLIENTES] (@Tipo varchar(1), @CodCliente int, @Nome varchar(50), @Endereco varchar(50), @CodCidade int, @nascimento datetime ) AS -- Inicio da tarefa selecionada na aplicação. Begin -- Condição para Inclusão if @Tipo = ´I´ begin insert into CLIENTES(Nome, Endereco ,CodCidade, Nascimento ) values (@Nome, @Endereco ,@CodCidade, @nascimento) end; -- Condição para Alteração if @Tipo = ´A´ begin update Clientes set Nome = @Nome, Endereco = @Endereco, CodCidade = @CodCidade, Nascimento = @nascimento where CodCliente = @CodCliente; end; -- Condição para Exclusão if @Tipo = ´E´ begin delete from Clientes where CodCliente= @CodCliente; end; end GO
Alguem tem uma dica?
*meu foco é o incremento via procedure mesmo não utilizando a programação no delphi.
Obrigado.
Leomatriz
Curtidas 0
Respostas
Leomatriz
23/08/2009
seria a solução na criação da tabela?
*vi que funciona eu inserindo os dados via insert no proprio sql
porém na aplicação e na procedure como ficaria..alguem ajuda?
Segue os codigos:
Tabela: Clientes
Codigo Delphi:
procedure TCadClientes.btnIncluirClick(Sender: TObject);
begin
dm.SQLStoredProc1.params[0].Asstring := ´I´;
dm.SQLStoredProc1.params[2].AsString := edNome.Text;
dm.SQLStoredProc1.params[3].AsString := edEndereco.Text;
dm.SQLStoredProc1.params[4].Asinteger := dm.mCidadesCodCidade.AsInteger;
dm.SQLStoredProc1.params[5].Asdatetime := DateTimePicker1.Date;
dm.SQLStoredProc1.ExecProc;
end;
essa linha estava recebendo um valor digitado manualmente na aplicação como adicionou o [b:c5da71ea86] Identity[/b:c5da71ea86] na criação da tabela não será mais necessario digitar o valor, como farei p/ que ele não de o erro atual:
---------------------------
Debugger Exception Notification
---------------------------
Project cadastroIgor.exe raised exception class TDBXError with message ´SQL State: 42000, SQL Error Code: 544
Cannot insert explicit value for identity column in table ´Clientes´ when IDENTITY_INSERT is set to OFF.
´.
---------------------------
Break Continue Help
---------------------------
tenho que remover esse Tedit(edCodigo) e chamar o identity de alguma forma?
obrigado.
*vi que funciona eu inserindo os dados via insert no proprio sql
porém na aplicação e na procedure como ficaria..alguem ajuda?
Segue os codigos:
Tabela: Clientes
Create TABLE [dbo].[Clientes]( [CodCliente] [int] identity NOT NULL, [Nome] [char](30) NOT NULL, [Endereco] [varchar](80) NOT NULL, [CodCidade] [int] NOT NULL, [Nascimento] [datetime] NULL, CONSTRAINT [PK_Clientes] PRIMARY KEY CLUSTERED ( [CodCliente] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO
Codigo Delphi:
procedure TCadClientes.btnIncluirClick(Sender: TObject);
begin
dm.SQLStoredProc1.params[0].Asstring := ´I´;
dm.SQLStoredProc1.params[1].Asinteger := StrToInt(edCodigo.Text);
dm.SQLStoredProc1.params[2].AsString := edNome.Text;
dm.SQLStoredProc1.params[3].AsString := edEndereco.Text;
dm.SQLStoredProc1.params[4].Asinteger := dm.mCidadesCodCidade.AsInteger;
dm.SQLStoredProc1.params[5].Asdatetime := DateTimePicker1.Date;
dm.SQLStoredProc1.ExecProc;
end;
essa linha estava recebendo um valor digitado manualmente na aplicação como adicionou o [b:c5da71ea86] Identity[/b:c5da71ea86] na criação da tabela não será mais necessario digitar o valor, como farei p/ que ele não de o erro atual:
---------------------------
Debugger Exception Notification
---------------------------
Project cadastroIgor.exe raised exception class TDBXError with message ´SQL State: 42000, SQL Error Code: 544
Cannot insert explicit value for identity column in table ´Clientes´ when IDENTITY_INSERT is set to OFF.
´.
---------------------------
Break Continue Help
---------------------------
tenho que remover esse Tedit(edCodigo) e chamar o identity de alguma forma?
obrigado.
GOSTEI 0