Array
(
)

Procedures Insert

Guilherme
   - 14 set 2014

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.

William (devwilliam)
   - 14 set 2014


Citação:

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.

Mariana Carvalho
   - 14 set 2014

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

Guilherme
   - 15 set 2014

William então na procedure de insert Consulta passo apenas o IdPaciente?
#Código

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.

Joel Rodrigues
   - 15 set 2014

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.

Guilherme
   - 16 set 2014

Muito obrigado pela ajuda.

Guilherme
   - 16 set 2014

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?

#Código

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

#Código
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?

William (devwilliam)
   - 16 set 2014

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!

Guilherme
   - 16 set 2014

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?

William (devwilliam)
   - 16 set 2014

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)).

Guilherme
   - 16 set 2014

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

Clique na imagem para abrir em uma nova janela

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

William (devwilliam)
   - 16 set 2014

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.

Guilherme
   - 16 set 2014

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
#Código

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

Guilherme
   - 21 set 2014

Está OK assim pessoal?