Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

wilsoncrescencio

Inserir registro em branco em uma tabela para gravação

Recommended Posts

DELPHI7 - ACCESS - ADOConnectionTenho uma Tabela "Alunos" outra relacionada "Notas" - um aluno recebe várias notasAo gravar a primeira nota para cada aluno não tem problema, porque todos os registros relacionais da tabela "Notas" estão em branco. A partir do segundo registro ou segunda nota eu tenho que inserir um registro novo para cada aluno. São 500 alunos.Quinhentas vezes apertando o botão inserir.Como devo proceder para que quando botão "inserir" for acionado... seja inserido um registro em branco na tabela "Notas" para cada aluno, que será preenchido com uma nova nota?Esse tópico pode até ser parecido com um tópico meu anterior, mas acredito que no anterior eu não soube me explicar, e por isso a ajuda q precisava ficou meio vaga. Espero ter sido claro o suficiente agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcio... eu tenho que gravar as matérias na mesma tabela que as notas... seria possível dar um comando em SQL que grava-se na tabela "Notas" primeiramente a matéria... tipo... seleciono Matemática aperto o botão gravar... grava matemática para todos os alunos e depois eu só lançaria a nota de Matemática.E assim sucessivamente com as outras matérias...você acredita q dá pra fazer isso... se dá qual comando seria?Se não é possível fazer isso... quebra o galho e me faz um step by step de como realizar um select sobre os alunos, pegando os 500.. depois fazer um while com este select e executar os inserts sobre a tabela de notas, lançando assim os 500...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tabela AlunoCOD_ALUNONOMESERIETabela MateriaCOD_MATERIACOD_ALUNOBIMESTREMATERIAPETCTTMBEssa é a estrutura das tabelas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

"MATÉRIA" e o campo que recebera o nome da Matéria específica."PE" é o campo que receberá a nota da Prova Específica da Matéria"TC" é o campo que receberá a nota da Tarefa da Matéria"TT" é o campo que receberá a nota do Trabalho da Matéria"MB" é o campo que receberá a nota da Média Bimestral da Matéria - ((PE*0,9)+(TC*0,1)+(TT*1,2))/2ExemploMATERIA: MatemáticaPE: 6,0TC: 6,0TT: 6,0MB: 6,5

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas e de onde provêm as informações das materias que o aluno têm ? No caso existe uma tabela informando isto ? E para que serve COD_MATERIA ? Seria chave primária ou composta com o COD_ALUNO, na minha visão a estrutura teria de ser:Tabela AlunoCOD_ALUNONOMESERIETabela MateriaCOD_MATERIANOMETabela NotaCOD_MATERIACOD_ALUNOBIMESTREPETCTTMBNa tabela nota seria composta por chave tripla entre COD_MATERIA, COD_ALUNO e BIMESTRE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostei da sua estrutura... me parece melhor que a minha...Se entendi as tabelas Aluno e Notas se relacionaram na proporção de 1(aluno) para muitas(notas) enquanto a tabelas Materia e Nota se relacionarão na proporção de 1(materia) para 1(nota).Poderia a estrutura, também ser da maneira como a baixo, alteraria muito a forma de lidar com a gravação de dados e posteriormente a impressão (no QReport)? Essa maneira de relacionamento eu já conheço e me deixa mais seguro. Mas se tiver algum problema...Tabela AlunoCOD_ALUNO (Chave Primária)NOMESERIETabela MateriaCOD_MATERIA (Chave Primária)COD_ALUNONOMETabela NotaCOD_NOTA (Chave Primária)COD_MATERIABIMESTREPETCTTMBDesculpe se faço perguntas tidas como infantis ou básicas pra você, mas é que estou começando agora em programação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser dessa sua forma tb, mas no caso como eu havi sugerido, seria a questão de que teria tudo separado, ou seja, tabela aluno somente as informações dos alunos, tabela materia somente código e o nome da materia, e na tabela nota teria a informação de aluno, materia, bimestre e as notas, algo do tipo:ALUNOCod - Nome - Série1 - TESTE - 12 - TESTE2 - 3MATRICULACod - Aluno1 - MATEMÁTICA2 - QUÍMICA3 - FÍSICANOTACOD_ALUNO - COD_MATERIA - BIMESTRE - PE - TC - TT - MB1 - 1 - 1 - 6,0 - 6,0 - 6,0 - 6,51 - 3 - 1 - 7,0 - 8,8 - 5,1 - 10,02 - 1 - 1 - 5,0 - 5,0 - 5,0 - 5,52 - 1 - 2 - 3,0 - 3,5 - 4,0 - 5,0No caso somente exemplo de como ficaria, dados chutados, heheheNo caso poderia ter na tabela NOTA teria um aluno para n matérias em n bimestres, na estrutura não poderia ter o mesmo aluno com a mesma matéria no mesmo bimestre...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas pensando bem, você precisa ter um local onde diga a relação das matérias que aquele aluno vai fazer, pois você pode ter uma matéria, mas somente uma determinada série vai fazer... No caso teria de ter algo itermediário entre aluno e matéria informando qual a matéria que o aluno participa, algo do tipo:ALUNO_MATERIACOD_MATERIA (Chave Primária)COD_ALUNO (Chave Primária)SERIE (Chave Primária)Ficando no final o esquema todo assim:Tabela Aluno //Informações do alunoCOD_ALUNONOMECOD_SERIETabela SERIE //Informações da sérieCOD_SERIENOMETabela Materia //Informações da matériaCOD_MATERIANOMEALUNO_MATERIA //Relação das matérias que o aluno faz em uma determinada sérieCOD_MATERIA (Chave Primária)COD_ALUNO (Chave Primária)SERIE (Chave Primária)Tabela Nota //Notas do aluno em uma determinada matéria em um determinado ano na série XCOD_MATERIACOD_ALUNOCOD_SERIEBIMESTREPETCTTMB

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom vamos por partes...Até aqui tudo bem... mas...Crio essa estrutura de tabelas e as relaciono no ACESS como?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se observarmos veremos mais um problema, que seria o seguinte, se o aluno rodar de ano ? Teria que ter como ele fazer novamente e assim poder ter mais registros na tabela de notas informando ainda qual é o ano relacionado, visto que vai poder ter dois anos que o aluno vez a mesma série. Alterando a estrutura e deixando mais simples ficaria:Tabela Aluno //Informações do alunoCOD_ALUNONOMECOD_SERIETabela SERIE //Informações da sérieCOD_SERIENOMETabela Materia //Informações da matériaCOD_MATERIANOMEALUNO_MATERIA //Relação das matérias que o aluno faz em uma determinada série e anoCOD_ALUNO_MATERIA (Chave Primária) -> Chave com código únicoCOD_MATERIA (Chave Primária)COD_ALUNO (Chave Primária)SERIE (Chave Primária)ANO (Chave Primária)Tabela Nota //Notas do aluno em uma determinada matéria em um determinado ano na série XCOD_ALUNO_MATERIA (Chave Primária)BIMESTRE (Chave Primária)PETCTTMBALUNOCOD_ALUNO - NOME - COD_SERIE1 - TESTE - 12 - TESTE2 - 2SERIECOD_SERIE - NOME1 - 1° SÉRIE2 - 2° SÉRIEMATERIACOD_MATERIA - NOME1 - MATEMÁTICA2 - FÍSICA3 - BIOLOGIAALUNO_MATERIACOD_ALUNO_MATERIA - COD_ALUNO - COD_MATERIA - SERIE - ANO1 - 1 - 1 - 1 - 20072 - 1 - 2 - 1 - 20073 - 1 - 3 - 1 - 20074 - 2 - 1 - 2 - 20075 - 2 - 2 - 2 - 20076 - 2 - 3 - 2 - 20077 - 1 - 1 - 1 - 2008 //Aluno repetiu o ano8 - 1 - 2 - 1 - 20089 - 1 - 3 - 1 - 2008NOTACOD_ALUNO_MATERIA - BIMESTRE - PE - TC - TT - MB1 - 1 - 5,00 - 5,00 - 5,00 - 5,002 - 1 - 5,00 - 5,00 - 5,00 - 5,003 - 1 - 5,00 - 5,00 - 5,00 - 5,001 - 2 - 5,00 - 5,00 - 5,00 - 5,002 - 2 - 5,00 - 5,00 - 5,00 - 5,003 - 2 - 5,00 - 5,00 - 5,00 - 5,007 - 1 - 5,00 - 5,00 - 5,00 - 5,008 - 1 - 5,00 - 5,00 - 5,00 - 5,009 - 1 - 5,00 - 5,00 - 5,00 - 5,00Teria que analisar e ver se realmente fecha...

Compartilhar este post


Link para o post
Compartilhar em outros sites

quanto ao ano e se aprovado ou retido... já há uma tabela relacionada com Aluno que recebe estes dados

 

Tab_Situa

COD_SITUA(CHAVE PRIMÁRIA)

SITUA (APROVADO OU REPROVADO)

ANO

COD_ALUNO

 

Nossa brow... isso está demais...

 

Agora, que comando eu uso... que script para poder gravar tudo isso?

 

Geralmente quando a nota é lançada e o operador usa a tecla "enter " eu gravo os dados da tabela...

 

Antes de começarmos a mudar ficava assim o lançamento:

 

 

procedure TBimestre1.FormKeyPress(Sender: TObject; var Key: Char);

begin

//Na propriedade KeyPreview do form

if Key = #13 then

BEGIN

TAB1.Edit;

if (DBLookupComboBox1.Text = '') then //Verifica se o campo "matéria" foi preenchido

begin

Messagedlg('O campo "Matéria" deve ser preenchido!', mtInformation, [mbOk], 0);

if DBLookupComboBox1.CanFocus then

DBLookupComboBox1.SetFocus;

EXIT;

END;

TAB1MAT.Text := DBLookupComboBox1.Text;

TAB1MAT.Text := DBEDIT4.Text;

TAB1BIMESTRE.Text := Edit4.Text;

TAB1.Post;

master.Next;

end;

 

END;

 

 

 

E agora... como devo fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para inserir os itens na tabela de NOTA é um sql simples de inserts, tipo:

 

INSERT INTO NOTA (COD_ALUNO_MATERIA,BIMESTRE,PE,TC,TT,MB)SELECT ALUNO_MATERIA.COD_ALUNO_MATERIA,1,0,0,0,0FROM ALUNO_MATERIA

Pode se quiser colocar mais restrições...

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu me utilizei de um form onde dispus alguns edits para as notas.edit1 PEedit2 TCedit3 TTcomo usando esse mesmo principio exemplificado... ficaria a gravação dos dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria somente que passar a nota na SQL, tipo:

 

INSERT INTO NOTA (COD_ALUNO_MATERIA,BIMESTRE,PE,TC,TT,MB)SELECT ALUNO_MATERIA.COD_ALUNO_MATERIA,1,edit1.Text,edit2.Text,edit3.Text,0FROM ALUNO_MATERIA

Somente precisa cuidar com a vírgula no momento de inserir no BD.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma curiosidade... como você faz para a imagem do código aparecer nesse quadro escrito CODE?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.