14/09/2014

Procedures Insert

Por ainda não dominar muito de Sql e aqui ter aprendido muito, aqui vai mais uma duvida.
Tenho uma tabela Consulta que tem como chave estrangeira o IdPaciente
Estou criando as procedures de Insert para me ajudarem quando fizer a interface.
Na procedure de InsertConsulta passo como parâmetro todos os atributos da tabela Consulta apenas ou devo passar os atributos da tabela Paciente.
Pergunto isto porque estou já pensando na parte da interface, pois ao inserir uma nova consulta tenho de ter primeiramente um paciente.
Talvez esteja baralhando tudo, mas nunca fiz nada de interface e portanto não sei o que devo fazer primeiro na parte de Sql Management Studio, para então depois iniciar a parte gráfica.
Obrigado mais uma vez.

Guilherme

Respostas

14/09/2014

William (devwilliam)

Tenho uma tabela Consulta que tem como chave estrangeira o IdPaciente


Guilherme na sua pergunta já tem a resposta, se você já tem o campo que faz referência a tabela paciente então basta inserir na tabela consulta o id do paciente, posteriormente quando você desenvolver a tela para trazer os dados da consulta apenas tem que fazer um JOIN para cruzar os dados do paciente com o idPaciente que está gravado nas consultas.
Responder Citar

14/09/2014

Mariana Carvalho

Guilherme, a sua pergunta é referente apenas ao SQL Server?
Responder Citar

15/09/2014

Guilherme

William então na procedure de insert Consulta passo apenas o IdPaciente?
CREATE PROCEDURE spInsertConsulta
@IdPaciente INT,
@Data DATE,
@Tratamento VARCHAR(MAX)

AS
BEGIN
INSERT INTO Consulta
VALUES(@IdPaciente, @Data, @Tratamento)
END


Assim basta?

Mariana eu estou ainda fazendo a parte Sql, mas já pensando no que vou precisar quando fizer as telas.
Daí muitas vezes fique baralhado e sem saber bem o que fazer.
Responder Citar

15/09/2014

Joel Rodrigues

Exato, Guilherme.
O procedure de insert vai receber os campos da sua tabela. Como você mesmo disse, na tabela de consulta tem um campo que é chave estrangeira da tabela de pacientes, então você só precisa inserir esse campo na tabela de consultas. Os demais campos são referentes diretamente à consulta, não ao paciente.
Então, é exatamente assim como você fez.
Responder Citar

16/09/2014

Guilherme

Muito obrigado pela ajuda.
Responder Citar

16/09/2014

Guilherme

Antes de fechar o tópico, tenho mais uma dúvida em procedures de insert.
Na mesma tabela Paciente tenho o atributo Foto, está correto este codigo para esta procedure?

CREATE Paciente (
IdPaciente INT NOT NULL,
Foto IMAGE NOT NULL,
Nome VARCHAR(40)
)

CREATE PROCEDURE spInsertPaciente
@Foto IMAGE,
@Nome VARCHAR(20)

AS
BEGIN
SET @Foto = (SELECT * FROM OPENROWSET(BULK N'C:\...\imagem.jpg', SINGLE_BLOB) image);

INSERT INTO Paciente
VALUES(@Nome, @Foto)


Tem maneira de ver o resultado desta procedure visualmente no sql management studio, não apenas como na tabela Results?
Responder Citar

16/09/2014

William (devwilliam)

Guilherme não sei se é uma necessidade especial para o seu projeto, mas gravar binários de imagens direto no banco de dados não é aconselhável, geralmente gravamos apenas o caminho físico da imagem!
Responder Citar

16/09/2014

Guilherme

Eu quero que seja possivel tirar uma foto com e webcam e ela va para o campo foto, quando estiver preenchendo a ficha do paciente.
Como me sugere que faça então?
Responder Citar

16/09/2014

William (devwilliam)

Não conheço a lógica que terá sua aplicação, mas possivelmente você poderá apontar um caminho físico para gravação dessas fotos, tendo isto basta renomear o arquivo e gravar esse caminho+nome no campo foto (no caso seria do tipo varchar(100 ou maior)).
Responder Citar

16/09/2014

Guilherme

Se calhar não me expliquei bem.
É isto que pretendo.

[img]http://arquivo.devmedia.com.br/forum/imagem/371781-20140916-095920.gif[/img]

Dai o atributo Foto ser do tipo IMAGE.
Eu quero puder tirar uma foto com a webcam, ficando guardada numa pasta especifica, e depois puder associar uma imagem a este paciente, ou seja, puder ir a pasta onde guardo as imagens tiradas com a webcam e escolher uma.

É esta sequencia de passos que não sei como implementar na minha Base de Dados
Responder Citar

16/09/2014

William (devwilliam)

Guilherme eu escrevi esse artigo http://www.devmedia.com.br/como-gravar-caminho-de-imagens-no-banco-de-dados-e-exibi-las-depois/25003 para delphi, senão me falha a memória o colega Joel Rodrigues escreveu um parecido mas para C# aqui mesmo na Devmedia.
Responder Citar

16/09/2014

Guilherme

Vou pesquisar sobre o assunto então.

Ainda no tema de procedures de insert me diga uma coisa.
Tenho as tabelas
A: IdA(PK), IdB(FK pra tabela B), IdC(FK pra tabela C)
B: IdB(PK)
C: IdC(PK)

Ao criar a procedure de insert em A passo os seus 3 atributos.
Contudo, IdB e IdC podem não ter correspondência nas tabelas correspondentes(B e C).
Nesta procedure posso fazer uma condição que, se tal acontecer invoca as procedures de insert dessas tabelas

Assim
CREATE PROCEDURE spInsertA
@IdA INT,
@IdB INT,
@IdC INT

AS
BEGIN
IF(NOT EXISTS(SELECT IdB FROM B WHERE IdB = @IdB))
BEGIN
INSERT INTO B
VALUES(@IdB);

IF(NOT EXISTS(SELECT IdC FROM C WHERE IdC = @IdC))
BEGIN
INSERT INTO C
VALUES(@IdC);
END

INSERT INTO A
VALUES(@IdA, @IdB, @IdC);
END
Responder Citar

21/09/2014

Guilherme

Está OK assim pessoal?
Responder Citar