• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

set#1

Carregar dados no formulario

24 mensagens neste tópico

Saudações.

Estou a desenvolver um sistema em VB.Net como parte de avaliação para meu trabalho de final de curso. Apesar de nunca ter trabalhado com ele, aceitei este desafio e esta a ser interessante.

Estou a usar VS 2005 e estou com algumas duvidas:

PS: a BD 'e SQL Server 2005 (convertido do Access e ja tem dados dos pacientes)

1o - Tenho um formulário frmPaciente e quero ligar seu campos a tabela t_paciente e a tabela t_adulto. Isto e', no mesmo formulário, tenho campos que pertencem as duas tabelas, e a chave e' o NID (existente nas 2 tabelas). O mesmo teria que fazer com t_paciente e t_crianca (isso porque existem paciente Adultos e Crianças e os formulários são diferentes, mas todos eles devem estar tamem na tabela t_paciente)

Tentei fazer usando Datasets mas estou com dificuldades. Poderia fazer o Drag and Drop mas teria um problema...os dados de Pessoa de referencia e Informação sobre o paciente nao iria cruzar com outros em termos de NID.

recepcao.th.jpg

2o - Tenho os botões: Adicionar, Cancelar, Apagar, Alterar e Procurar que eu gostaria de ter uma base de código para os por a funcionar.

3o - Usercontrol:

Não gostaria de usar o BindingNavegator como controle. Posso ter outra(s) alternativa(s)...como por exemplo botões que fazem a navegação pelos pacientes (se for o caso, poderiam me ajudar no código).

Bom...espero ter sido especifico, apesar de saber que são tantos pedidos de uma só vez.

Obrigado pela atenção.

(((Peace&Love)))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este da de facto para um bom começo no entanto gostaria de poder fazer usando Dataset / DataAdapter assim teria menos código escrito.

:D  Mesmo assim ainda continuo com dificuldades de perceber o ponto nr 1 (para o join) e o ponto nr 3.

Obrigado pela atenção.

(((Peace&Love))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:D  Mesmo assim ainda continuo com dificuldades de perceber o ponto nr 1 (para o join) e o ponto nr 3.

Olá,

O ponto 1 não estou a entender muito bem o que queres, mas não podes criar uma View e utilizar ?

Em relação ao ponto 3, eu também não gosto muito de usar o BindingNavegator, porque não é muito prático, especialmente se temos muitos registo, mas colocar botões para fazer o mesmo o que vai alterar ?

Eu use quase sempre uma lista onde procuro um registo e depois, tenho um formulário como esse, para mostrar em detalhe.

PS: Utiliza GroupBoxes, dentro dos teus grupos de controlos, para ficar mais organizado no Form! (ex. Pessoas de Referência, Paciente, etc)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O ponto 1 não estou a entender muito bem o que queres, mas não podes criar uma View e utilizar ?

Olha como fiz para o form de Login:

Private Sub btEntrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btEntrar.Click

        Dim utilizadoresAdapter As New LoginDataSet2TableAdapters.t_utilizadorTableAdapter

        Dim utilizadores As LoginDataSet2.t_utilizadorDataTable

        'Dim utilizador As LoginDataSet2.t_utilizadorRow

        Dim pac As New frmPaciente

        utilizadores = utilizadoresAdapter.VerificaUser(Me.txtNome.Text, Me.txtPassword.Text, Me.ComboBox1.Text)

        'MsgBox(Me.ComboBox1.SelectedItem)

        'MsgBox(Me.ComboBox1.Text)

        If (utilizadores.Rows.Count <= 0) Then

            MessageBox.Show("Utilizador nao autenticado!", "Login errado", MessageBoxButtons.OK)

            txtNome.Clear()

            txtPassword.Clear()

        Else

            MessageBox.Show("Utilizado autenticado", "Bem Vindo", MessageBoxButtons.OK)

            frmPaciente.Show()

            Me.Hide()

        End If

    End Sub

Neste caso, o VerificaUser(Me.txtNome.Text, Me.txtPassword.Text, Me.ComboBox1.Text) 'e um select que fiz com o TableAdapter Query Configuration Wizard. Mas este apenas como vêem, verifica se existem e se sim da acesso ao sistema.

No entanto, gostaria de fazer o mesmo para o frmPaciente, mas neste caso nao deve verificar mas sim carregar os dados nos respectivos campos. Os campos a aparecerem no respectivo form (e acontece o mesmo em vários outros formulários mas com outras tabelas) são alguns da tabela t_paciente e/ou t_adulto/t_crianca.

Tenho um BD_TL2009Dataset onde tenho t_pacienteTableAdapter: Fillby,AdultoData() que retorna exactamente os dados desse frmPaciente. Pode ser util para retornar no formulario e nos respectivos campos? E se sim como referencio cada campo no form.

Em relação ao ponto 3, eu também não gosto muito de usar o BindingNavegator, porque não é muito prático, especialmente se temos muitos registo, mas colocar botões para fazer o mesmo o que vai alterar ?

Eu use quase sempre uma lista onde procuro um registo e depois, tenho um formulário como esse, para mostrar em detalhe.

A diferenca fica mesmo na estetica....e o BindingNavegator parece algo despachado ao desenvolver sistemas...e como tenho que fazer defesa, nao gostaria de perder pontos nisto percebes.

Boa ideia essa de fazer uma lista e procurar.

(((Peace&Love)))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

2o - Tenho os botões: Adicionar, Cancelar, Apagar, Alterar e Procurar que eu gostaria de ter uma base de código para os por a funcionar.

Via TableAdapter:

Adicionar:

Me.NomeDaTabelaBindingSource.AddNew

Cancelar:

Me.NomeDaTabelaBindingSource.CancelEdit

Apagar:

Me.NomeDaTabelaBindingSource.RemoveCurrent

Quanto ao procurar, terás de fazer uma Query no SQL à tabela em questão.

3o - Usercontrol:

Não gostaria de usar o BindingNavegator como controle. Posso ter outra(s) alternativa(s)...como por exemplo botões que fazem a navegação pelos pacientes (se for o caso, poderiam me ajudar no código).

Ou seja, algo do género:

|< « » >|

Primeiro |<

 Me.NomeDaTabelaBindingSource.MoveFirst

Anterior « 

Me.NomeDaTabelaBindingSource.MovePrevious

Próximo » 

Me.NomeDaTabelaBindingSource.MoveNext

Último >| 

Me.NomeDaTabelaBindingSource.MoveLast

Abraço.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Offtopic: Usa TabbedDialogs para organizar esses campos todos.

Pode funcionar bem no teu ecran e na tua resolução... noutro lado chapéu.

E para além disso, eu entrava em stress com tanta textbox vazia e o prompt a piscar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Offtopic: Usa TabbedDialogs para organizar esses campos todos.

Pode funcionar bem no teu ecran e na tua resolução... noutro lado chapéu.

E para além disso, eu entrava em stress com tanta textbox vazia e o prompt a piscar.

Desculpa mas não pude perceber o que queres me explicar!

(((Peace&Love)))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deverias melhorar esse interface, utilizando Tabs por exemplo, porque na tua resolução funciona bem, mas nem toda a gente usa portáteis com ecrans com proporções 1,6:1

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estive tentando consoante as dicas.

Tenho este código para carregar os dados no meu formulário frmPaciente.

Olha que os campos foram mesmo desenhados por mim e não drag-drop do Dataset

Dim pacientesAdapter As New BD_TL2009DataSetTableAdapters.t_pacienteTableAdapter
        pacientesAdapter = New BD_TL2009DataSetTableAdapters.t_pacienteTableAdapter()
        Dim pacientes As BD_TL2009DataSet.t_pacienteDataTable
        Dim paciente As BD_TL2009DataSet.t_pacienteRow

        BD_TL2009DataSet.Clear()
        pacientes = pacientesAdapter.GetData()
        paciente = pacientes.Item(0)
        Me.txtNID.Text = paciente.nid
        Me.txtUS.Text = paciente.hdd
...

Ate estes dois dados ele carrega, mas ainda tenho outros, no entanto:

1o: como faço para ele carregar não o item(0) mas sim todos.

2o: se tento carregar outros dados, ex: Me.txtData = paciente.data ou Me.txtIdade = paciente.idade, ele diz:

Value of type 'Double' cannot be converted to 'System.Windows.Forms.TextBox'

O que pode estar errado?

Obrigado

(((Peace&Love)))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A segunda questão é simples. Tens que usar Me.txtData.Text e Me.txtIdade.Text.

Quanto à primeira pergunta podes meter dentro de um For (ou então não percebi bem o que pretendes).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Opa, a 2a foi mesmo distracção.

A 1a 'e assim: paciente.item(0) só carrega o paciente na posição 0 (zero), no entanto, eu tenho volta de 6900 paciente já na Base de Dados. Quero poder carregar todos pacientes. Ta perceptível agora!?

O ponto 1 não estou a entender muito bem o que queres, mas não podes criar uma View e utilizar ?

Fiz uma view: View_tpacienteAdultoDataSet, onde selecciona todos dados que necessito da tabela t_paciente inner join t_adulto (nid). E ele (getdata()) me devolve de facto os pacientes que necessito adultos. Modifiquei no código acima com a view e não funcionou. Ou não devo implementar do mesmo modo?

(((Peace&Love)))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, eu percebi que querias carregar mais pacientes, não tenho é a certeza se percebi exactamente em que é que consiste "carregar um paciente".

Pelo código que mostraste parece-me que carregar um paciente é preencher esse conjunto de TextBox. Por esta ordem de ideias terias que ter 6900 conjuntos de TextBox e prencher todos, o que não me parece minimamente prático.

Mas neste caso seria fazer um Foreach (item in paciente.Items) (não sei a sintaxe correcta em VB.Net) e ir preenchendo as TextBox.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Neste artigo: http://www.macoratti.net/vbna_cp1.htm explicam duma maneira só que não foi assim que fiz. Nas sei se alguém pode facilitar consoante a via que usei.

Sim, eu percebi que querias carregar mais pacientes, não tenho é a certeza se percebi exactamente em que é que consiste "carregar um paciente".

A ideia 'e a que esta ilustrada no artigo ai acima Carregar pacientes seria no mesmo form ir navegando com botoes para outros.

Mas neste caso seria fazer um Foreach (item in paciente.Items) (não sei a sintaxe correcta em VB.Net) e ir preenchendo as TextBox.

Ai esta a batata-quente.... :wallbash:

Obrigado

(((Peace&Love)))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A ideia 'e a que esta ilustrada no artigo ai acima Carregar pacientes seria no mesmo form ir navegando com botoes para outros.

O artigo aqui não abre... Mas se a ideia é ter botões Seguinte/Anterior então podes guardar os pacientes todos e o número do paciente actual e depois cada vez que se fizer Seguinte/Anterior somas ou subtrais 1 ao número do paciente actual e voltas a preencher o formulário com os dados do novo paciente.

EDIT: À segunda tentativa lá deu. No artigo explica bem como fazer isso que pretendes. Não funciona contigo ou queres fazer alguma coisa diferente?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Okey, ja encontrei o ponto!!

1o recordar que estou a usar VS 2005 e o exemplo para referenciar os campos (Data Binding) nao funciona comigo. Neste caso, eu arrastei os campos das tabelas do DataSet para os referidos no formulario e ele gera este codigo no load:

'TODO: This line of code loads data into the 'BD_TL2009DataSet.t_contacto' table. You can move, or remove it, as needed.
Me.T_contactoTableAdapter.Fill(Me.BD_TL2009DataSet.t_contacto)
'TODO: This line of code loads data into the 'BD_TL2009DataSet.t_bairro' table. You can move, or remove it, as needed.
Me.T_bairroTableAdapter.Fill(Me.BD_TL2009DataSet.t_bairro)
'TODO: This line of code loads data into the 'BD_TL2009DataSet.t_distrito' table. You can move, or remove it, as needed.
Me.T_distritoTableAdapter.Fill(Me.BD_TL2009DataSet.t_distrito)
'TODO: This line of code loads data into the 'BD_TL2009DataSet.t_adulto' table. You can move, or remove it, as needed.
Me.T_adultoTableAdapter.Fill(Me.BD_TL2009DataSet.t_adulto)
'TODO: This line of code loads data into the 'BD_TL2009DataSet.t_paciente' table. You can move, or remove it, as needed.
Me.T_pacienteTableAdapter.Fill(Me.BD_TL2009DataSet.t_paciente)

E ele de facto carrega os dados no formulário, agora ai ta um dos problemas: se for a observar o formulário, na secção de Informação sobre o paciente os dados são recolhidos em 2 tabelas.

Vou explicar detalhadamente:

a tabela t_adulto tem dados de adultos, a tabela t_crianca de crianças e a tabela t_paciente de ambos. Quando faço o load do form desejo ter parte de informação da t_paciente e de t_adulto (se adulto) ou t_crianca (se criança) e Pessoa de contacto da secção: Pessoa de contacto, que esta na tabela t_contacto. Problema: ele carrega os dados mas o pessoa de contacto nao 'e referente ao paciente carregado.

Fiz uma view que seleciona os dados das 3 tabelas: t_paciente, t_adulto e t_contacto e arrastei seus campos segundo os referentes no form. No entanto quando corre da erro:

Me.View_tpacienteAdultoTableAdapter.Fill(Me.View_tpacienteAdultoDataSet.View_tpacienteAdulto)

ConstraintException was unhandled: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

Mas a query funciona sem erro quando o Preview Data.

Como me safo desta situação?

Edit: Sem usar view, os dados da secção Informação sobre paciente funcionam bem mas os da Pessoa de contacto já não.

Obrigado

(((Peace&Love)))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Someone help me please... alguém me ajuda!!!

Obrigado

(((Peace&Love)))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda a espera de uma luz!!!

Por favor

Obrigado e me desculpem algumas perguntas se forem "parvas"...tamos no processo de aprendizagem!

(((Peace&Love)))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom...levantei este topico e ja me tinha skecido dele!!

Boa parte dos pontos aki resolvi mas ainda tenho um qua nao consigo resolver. Tenho o seguinte codigo pra o load dos dados no form:

    Private Sub frmPaciente_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        frmLogin.Timer.Stop()
        CarregarDados()
        Me.btGravar.Enabled = False
    End Sub

    Private Sub CarregarDados()
                Me.T_designacaoprovenienciaTableAdapter.Fill(Me.BD_TL2009DataSet.t_designacaoproveniencia)       
        Me.T_funcionarioTableAdapter.Fill(Me.BD_TL2009DataSet1.t_funcionario)        
        Me.T_provenienciaTableAdapter.Fill(Me.BD_TL2009DataSet1.t_proveniencia)        
        Me.T_nivelescolarTableAdapter.Fill(Me.BD_TL2009DataSet1.t_nivelescolar)       
        Me.T_profissaoTableAdapter.Fill(Me.BD_TL2009DataSet1.t_profissao)        
        Me.T_contactoTableAdapter.Fill(Me.BD_TL2009DataSet.t_contacto)       
        Me.T_bairroTableAdapter.Fill(Me.BD_TL2009DataSet.t_bairro)        
        Me.T_distritoTableAdapter.Fill(Me.BD_TL2009DataSet.t_distrito)       
        Me.T_adultoTableAdapter.Fill(Me.BD_TL2009DataSet.t_adulto)
        Me.T_pacienteTableAdapter.Fill(Me.BD_TL2009DataSet.t_paciente)

        'Carrega dado do dataset t_contacto: GetContactoAdulto no Pessoa de referencia
        Dim pacientesAdapter As New BD_TL2009DataSetTableAdapters.t_contactoTableAdapter
        pacientesAdapter = New BD_TL2009DataSetTableAdapters.t_contactoTableAdapter
        Dim pacientes As BD_TL2009DataSet.t_contactoDataTable
        Dim paciente As BD_TL2009DataSet.t_contactoRow

        pacientes = pacientesAdapter.GetContactoAdulto

        'Conta e mostra o numero total de pacientes adultos na tabela t_contacto - Retificar, deve ser em todos pacientes
        Me.lblTotalPacientes.Text = "Total de Pacientes: " & pacientes.Count.ToString

        paciente = pacientes.Item(0)
        Me.txtNomeRef.Text = paciente.nome
        Me.txtApelidoRef.Text = paciente.apelido
        Me.txtContactoRef.TabIndex = paciente.telefone
    End Sub

Portanto, a partir de 'Carrega dado do dataset t_contacto: GetContactoAdulto no Pessoa de referencia, nao esta a funcionar como desejo. Ou seja, na BD, a tabela dos contactos esta ligada a paciente pelo NID. Neste caso, ao carregar o NID no processo (form) deveria carregar a respectiva pessoa de contacto da tabela t_contacto no form tambem e ao navegar pelos pacientes ele ir mostrando a referida pessoa de contacto do referido paciente (tanto como se for a fzr insert, update, delete)

Fiz-me perceber??

Obrigado pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sera que não me expus bem o problema ou não há ideias!!??

:-[  :(  :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a fazer a consulta correctamente?

Ai 'e que ta...O problema acho que deve estar a parti daqui:

'Carrega dado do dataset t_contacto: GetContactoAdulto no Pessoa de referencia

Segundo o que quero fazer, como posso ter o código para visualizar no form os dados do mesmo NID das duas tabelas... :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora