Stored procedure no Firebird com Delphi
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***
Respostas
Frederico Brigatte***
30/04/2013
Frederico Brigatte***
30/04/2013
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?
Frederico Brigatte***
30/04/2013
Frederico Brigatte***
30/04/2013
Frederico Brigatte***
30/04/2013
Frederico Brigatte***
30/04/2013
Paulo Freire
30/04/2013
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;
Frederico Brigatte***
30/04/2013
O que seria esse código? Preciso de stored procedure e generator. Como que faço?
Frederico Brigatte***
30/04/2013
Frederico Brigatte***
30/04/2013
Frederico Brigatte***
30/04/2013
Paulo Freire
30/04/2013
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
Paulo Freire
30/04/2013
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^
Frederico Brigatte***
30/04/2013
Obrigado pelo retorno, e como que utilizo isso pelo Delphi? Sei que tem que usar o componente SQLStoredProc da guia dbExpress.
Paulo Freire
30/04/2013
Depois cria um botão no seu form do Delphi com o primeiro código que lhe passei la em cima.
Frederico Brigatte***
30/04/2013
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;
Paulo Freire
30/04/2013
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
Frederico Brigatte***
30/04/2013
3ª Dúvida: Como fazer uma store procedure para excluir o funcionário e seus respectivos dependentes?
Frederico Brigatte***
30/04/2013
Eu preciso da stored procedure somente para excluir o funcionário e seus dependentes.
Paulo Freire
30/04/2013
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;
Frederico Brigatte***
30/04/2013
Frederico Brigatte***
30/04/2013
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.
Frederico Brigatte***
30/04/2013
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
Frederico Brigatte***
30/04/2013
Frederico Brigatte***
30/04/2013
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);
Frederico Brigatte***
30/04/2013
Frederico Brigatte***
30/04/2013