Stored procedure no Firebird com Delphi

Delphi

30/04/2013

Boa noite pessoal, eu novamente.

Preciso montar duas tabelas no Firebird: Funcionarios e Dependentes

Funcionários:
Matricula, Nome, Endereço, Cidade, Bairro, Número horas/mes e Valor do salario hora

Dependente:
Matricula, Nome do dependente, Filiação e Data nascimento

Create table funcionarios (matricula varchar(5) not null,
nome varchar(20),
endereco varchar(30),
cidade varchar(30),
bairro varchar(30),
horas_mes float,
valor_hora float));

Alter table funcionarios add constraint pk_matricula primary key(matricula);

Create table dependentes (matricula varchar(5) not null,
nome_dep varchar(20),
filiacao varchar(30),
data_nasc date);

Alter table dependentes add constraint fk_matricula_1 foreign key(matricula)
references funcionarios(matricula) on delete cascade on update cascade;


1ª Dúvida: O script está certo?
2ª Dúvida: Como criar um generator para adicionar 1 na Matricula do Funcionário?
3ª Dúvida: Como fazer uma store procedure para excluir o funcionário e seus respectivos dependentes?

Banco de dados: Firebird.
Frederico Brigatte***

Frederico Brigatte***

Curtidas 0

Respostas

Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Faltou na tabela dependentes, o Código do Dependente, que coloquei como integer(10) not null
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

A procedure para excluir o funcionário e seus dependentes seria assim:

CREATE PROCEDURE P_APAGA (
P_MATRICULA)
AS
begin
DELETE Func.Matricula
FROM Func
WHERE Func.Matricula = :P_MATRICULA;
end

E como faço no delphi para rodar isso e também para gerar os códigos como auto-incremento com generator?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Alguém pra ajudar?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Poxa, ninguém???????
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Puxa,preciso disso para amanhã. Alguém poderia me ajudar com isso, por favor????
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Dois dias que postei e ninguém para ajudar...
GOSTEI 0
Paulo Freire

Paulo Freire

30/04/2013

rsrsr, Vamos Frederico


try
DM.SP_CAD_ARMA.ParamByName('CODIGO_ARMA').AsString := Remove(txtCodigo.Text);
DM.SP_CAD_ARMA.ParamByName('NOME').AsString := txtNome.Text;
DM.SP_CAD_ARMA.ParamByName('EMPRESA').AsString := txtEmpresa.Text;
DM.SP_CAD_ARMA.ParamByName('PORTE').AsString := txtPorte.Text;
DM.SP_CAD_ARMA.ParamByName('CALIBRE').AsString := txtCalibre.Text;
DM.SP_CAD_ARMA.ParamByName('CPF_PROPRIETARIO').AsString := txtCPF.Text;
DM.SP_CAD_ARMA.ParamByName('CATEGORIA').AsInteger := DBLookupComboBox_CATEGORIA.KeyValue;
DM.SP_CAD_ARMA.ExecProc;

finally

//Deu tudo Certo e Grava
Application.MessageBox('Equipamento Belico Registrado com sucesso !!!','Salvar',
MB_ICONINFORMATION + mb_OK);



end;
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Paulo, obrigado pelo retorno.

O que seria esse código? Preciso de stored procedure e generator. Como que faço?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Joel, poderia me ajudar, nisso?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Estou precisando somente dos scripts que faz isso e como rodar pelo delphi
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Alguém pra ajudar, por favor?
GOSTEI 0
Paulo Freire

Paulo Freire

30/04/2013

Agora entendi, ai vai um script para criar uma procedure no IBExpert/Firebird

CREATE BAIXA_CRACHA (
CPF varchar(12),
CRACHA integer,
SITUACAO_CRACHA varchar(10),
HORA_SAIDA varchar(10))
as
BEGIN

if (EXISTS (SELECT CRACHA FROM VISITAS WHERE (
CRACHA = :CRACHA AND CPF = :CPF))) then

UPDATE VISITAS
SET
CRACHA = :CRACHA,
SITUACAO_CRACHA = :SITUACAO_CRACHA,
HORA_SAIDA = :HORA_SAIDA
WHERE (CRACHA = :CRACHA) AND (CPF = :CPF) AND VISITAS.HORA_SAIDA IS NULL;

END

GOSTEI 0
Paulo Freire

Paulo Freire

30/04/2013

Ai vai outra para inclusão

na de cima, esqueci de colocar no começo "CREATE PROCEDURE BAIXA_CRACHA"


segue exemplo

CREATE procedure VISITANTES_INS_UPD (
CPF varchar(20),
NOME varchar(60),
EMPRESA varchar(60),
TELEFONE varchar(30),
RG varchar(20),
ID_LOCAL_VISITADO integer,
VISITADO varchar(30),
QUARTEL integer,
OBS varchar(1000))
as
BEGIN
/* Procedure body */
if (EXISTS (SELECT CPF FROM VISITANTES WHERE (
CPF = :CPF))) then

UPDATE VISITANTES
SET NOME = :NOME,
EMPRESA = :EMPRESA,
TELEFONE = :TELEFONE,
RG = :RG,
ID_LOCAL_VISITADO = :ID_LOCAL_VISITADO,
VISITADO = :VISITADO,
QUARTEL = :QUARTEL,
OBS = :OBS
WHERE (CPF = :CPF);

ELSE

INSERT INTO VISITANTES(
CPF,
NOME,
EMPRESA,
TELEFONE,
RG,
ID_LOCAL_VISITADO,
VISITADO,
QUARTEL,
OBS)

VALUES(
:CPF,
:NOME,
:EMPRESA,
:TELEFONE,
:RG,
:ID_LOCAL_VISITADO,
:VISITADO,
:QUARTEL,
:OBS);


END^
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Paulo Freire,

Obrigado pelo retorno, e como que utilizo isso pelo Delphi? Sei que tem que usar o componente SQLStoredProc da guia dbExpress.
GOSTEI 0
Paulo Freire

Paulo Freire

30/04/2013

No seu DataModule coloque um componente da paleta DBexpress, se tiver usando essa tecnologia de acesso a dados claro, chamadao TSQLStoredProc, coloque a sua conexão, escolha procedure na propriedade StoreProcName,

Depois cria um botão no seu form do Delphi com o primeiro código que lhe passei la em cima.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Ok, Paulo, tem que adaptar o exemplo para o meu, certo?


Funcionários:
Matricula, Nome, Endereço, Cidade, Bairro, Número horas/mes e Valor do salario hora

Dependente:
Matricula, Nome do dependente, Filiação e Data nascimento

Poderia me dizer se está correto:
Create table funcionarios (matricula varchar(5) not null,
nome varchar(20),
endereco varchar(30),
cidade varchar(30),
bairro varchar(30),
horas_mes float,
valor_hora float));

Alter table funcionarios add constraint pk_matricula primary key(matricula);

Create table dependentes (matricula varchar(5) not null,
nome_dep varchar(20),
filiacao varchar(30),
data_nasc date);

Alter table dependentes add constraint fk_matricula_1 foreign key(matricula)
references funcionarios(matricula) on delete cascade on update cascade;
GOSTEI 0
Paulo Freire

Paulo Freire

30/04/2013

Sim, 1º cria a procedure

CREATE PROCEDURE FUNCIONARIO_INS_UPD (
MATRICULA varchar(5),
NOME varchar(20),
ENDERECO varchar(30),
CIDADE varchar(30),
BAIRRO varchar(30),
HORAS_MES FLOAT,
VALOR_HORA FLOAT)
as
BEGIN

if (EXISTS (SELECT MATRICULA FROM FUNCIONARIOS WHERE (MATRICULA = :MATRICULA))) then

UPDATE FUNCIONARIOS
SET NOME = :NOME,
ENDERECO = :ENDERECO,
CIDADE = :CIDADE,
BAIRRO = :BAIRRO,
HORA_MES = :HORA_MES,
VALOR_HORA = :VALOR_HORA

WHERE (MATRCIULA = :MATRICULA);

ELSE

INSERT INTO FUNCIONARIOS(
MATRICULA,
NOME,
ENDERECO,
CIDADE,
BAIRRO,
HORA_MES,
VALOR_HORA)

VALUES(
:MATRICULA,
:NOME,
:ENDERECO,
:CIDADE,
:BAIRRO,
:HORA_MES,
:VALOR_HORA);


END
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

2ª Dúvida: Como criar um generator para adicionar 1 na Matricula do Funcionário?
3ª Dúvida: Como fazer uma store procedure para excluir o funcionário e seus respectivos dependentes?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Paulo, obrigado pela ajuda, valeu mesmo.

Eu preciso da stored procedure somente para excluir o funcionário e seus dependentes.
GOSTEI 0
Paulo Freire

Paulo Freire

30/04/2013

Eu vi que vc deixou em cascata para exclui o funcionario, então é só criar essa procedure para excluir.


CREATE procedure FUNCIONARIO_DEL (
MATR VARCHAR(5))
as
BEGIN
DELETE FROM FUNCIOARIOS
WHERE FUNCIONARIOS.MATRICULA = :MATR;
END



Coloque um novo TSQLStoreProcedure no DataModule, colque a conexao, depois escolha a procedure FUNCIONARIO_DEL, No botão do delphi coloque isso baixo.


try

DM.SP_FUNCIONARIO_DEL.ParamByName('MATR').AsString := txtMatricula.Text;
DM.SP_FUNCIONARIO.ExecProc;

finally

//Deu tudo Certo e Grava
Application.MessageBox('Funcioonario excluido com sucesso !!!','Exclusão',
MB_ICONINFORMATION + mb_OK);

end;
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Está correto o que fiz nas tabelas?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Como poderia montar as telas dos cadastros? Teria uma sugestão? Estou com mais essa dúvida para montar.

Sei que preciso de duas TELAS. Uma para Cadastrar os Funcionários e outra para Cadastrar os Dependentes.

Como posso fazer a TELA de CADASTRO DE DEPENDENTES? O campo MATRICULA, no caso, seria da tabela FUNCIONÁRIOS.

Como faria o cadastro dos dependentes caso o funcionário tivesse mais de um dependente sem ter que ficar entrando toda hora no form de Dependentes para incluir, ou seja, cadastrar de uma única vez todos os seus dependentes?

Essa é a última, para encerrar o TÓPICO.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Seria assim, os passos, ou script:

1º) Procedimento: Criar Tabela Funcionários

Funcionários:
Matricula, Nome, Endereço, Cidade, Bairro, Número horas/mes e Valor do salario hora


Create table funcionarios (matricula varchar(5) not null,
nome varchar(20),
endereco varchar(30),
cidade varchar(30),
bairro varchar(30),
horas_mes float,
valor_hora float);


2º) Procedimento: Criar chave primária

Alter table funcionarios add constraint pk_matricula primary key(matricula);


3º) Procedimento: Criar Tabela Dependentes

Dependente:
Matricula, Nome do dependente, Filiação e Data nascimento


Create table dependentes (matricula varchar(5) not null,
nome_dep varchar(20),
filiacao varchar(30),
data_nasc date);

4º) Procedimento: Criar chave estrangeira

Alter table dependentes add constraint fk_matricula_1 foreign key(matricula)
references funcionarios(matricula) on delete cascade on update cascade;


5º) Procedimento: Criar Stored Proceduere para excluir o funcionário e seus respectivos dependentes

CREATE procedure FUNCIONARIO_DEL (
MATR VARCHAR(5))
as
BEGIN
DELETE FROM FUNCIOARIOS
WHERE FUNCIONARIOS.MATRICULA = :MATR;
END
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Como poderia fazer as telas de cadastro?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Gostaria de saber se este script está correto:

1º) Procedimento: Criar Tabela Funcionários

Funcionários:
Matricula, Nome, Endereço, Cidade, Bairro, Número horas/mes e Valor do salario hora


Create table funcionarios (matricula varchar(5) not null,
nome varchar(20),
endereco varchar(30),
cidade varchar(30),
bairro varchar(30),
horas_mes float,
valor_hora float);


2º) Procedimento: Criar chave primária

Alter table funcionarios add constraint pk_matricula primary key(matricula);
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Como fazer um cadastro de funcionários e dependentes funcional? Incluir todos os dependentes sem ter que ficar saindo da tela?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/04/2013

Ninguém, novamente???
GOSTEI 0
POSTAR