Array
(
)

Iniciando Stored Procedure Sql Server 2008

Leomatriz
   - 23 ago 2009

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.

Objetivo: quero que essa procedure incremente automaticamente o codCliente. (atualmente ele é digitado manualmente na aplicação.)

#Código

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
   - 23 ago 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

#Código

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´;
#Código
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 Identity 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.