Fórum Sistema para Controle de Processos #408836

25/10/2011

0

Boa Noite sou aprendiz em C#, e nesse aprendizado, resolvi construir um sistema para controle de processos. Tudo ia bem até que tive que fazer alguns relacionamentos. Tenho três tabelas que relacionam entre si (tbl_Cliente, tbl_Encarregado e tbl_Processo). O encarregado é um cliente e na tbl_Processo posso ter até 3 clientes para cada processo. A estrutura do Form_Processos é o seguinte: Cod_Processo (tbl_Processo), Portaria (tbl_processo), Cod_Encarregado (tbl_Encarregado que recebe o Cliente da tbl_Cliente). Utilizo Firebird com Banco de Dados. Por favor, alguém poderia me dizer como eu faço para inserir clientes como encarregados na tbl_Processos?
Wesley Souza

Wesley Souza

Responder

Posts

25/10/2011

Ricardo Rodrigues

Boa noite Wesley, pelo que entendi, acho que é mais ou menos isso que vc precisa, segue codigo abaixo :

/*Tenho três tabelas que relacionam entre si (tbl_Cliente, tbl_Encarregado e tbl_Processo).
O encarregado é um cliente e na tbl_Processo posso ter até 3 clientes para cada processo.
A estrutura do Form_Processos é o seguinte:
Cod_Processo (tbl_Processo),
Portaria (tbl_processo),
Cod_Encarregado (tbl_Encarregado que recebe o Cliente da tbl_Cliente);*/

CREATE TABLE TBL_CLIENTE (
COD_CLIENTE INTEGER NOT NULL,
NOME_CLIENTE VARCHAR(50)
);

ALTER TABLE TBL_CLIENTE ADD CONSTRAINT PK_TBL_CLIENTE PRIMARY KEY (COD_CLIENTE);

CREATE TABLE TBL_ENCARREGADO (
COD_ENCARREGADO INTEGER NOT NULL, -- SEQUENCIAL
COD_CLIENTE INTEGER NOT NULL);

ALTER TABLE TBL_ENCARREGADO ADD CONSTRAINT PK_TBL_ENCARREGADO PRIMARY KEY(COD_SEQUENCIA, COD_CLIENTE);

ALTER TABLE TBL_ENCARREGADO ADD constraint FK_TBL_CLIENTE foreign KEY(COD_CLIENTE);

CREATE TABLE TBL_PROCESSO (
COD_PROCESSO INTEGER NOT NULL,
COD_CLIENTE INTEGER NOT NULL,
COD_PORTARIA integer,
);

ALTER TABLE TBL_PROCESSO ADD CONSTRAINT PK_TBL_PROCESSO PRIMARY KEY(COD_PROCESSO, COD_CLIENTE);

ALTER table TBL_PROCESSO ADD CONSTRAINT FK_TBL_ENCARREGADO foreign KEY (COD_PROCESSO, COD_CLIENTE);


Obs : só não entendi pq vc ta querendo cria uma tabela encarregado relacionada com o cliente, mais blz,
acredito eu que vc poderia cliar um campo char na tabela cliente, para marcar se o cliente é encarregado(sim / não).


Espero ter ajudado, ou seja, dado uma luz, essas horas to mei vesgo j´s, rs


boa noite
Responder

Gostei + 0

26/10/2011

Emerson Nascimento

creio que o relacionamento deva ser mais ou menos assim:
                                   +------------------------+
+---------------------+            | TBL_ENCARREGADO        | 
| TBL_CLIENTE         |            +------------------------+
+---------------------+            | ID_TBLENCARREGADO (PK) |-----+
| ID_TBLCLIENTE (PK)  |------------| ID_TBLCLIENTE (FK)(UK) |     |
| CODIGO              |            | etc                    |     |
| NOME                |            +------------------------+     |
| etc                 |                                           |
+---------------------+                                           |
                                                                  |
                                   +------------------------+     |
                                   | TBL_PROC_ENC           |     |
                                   +------------------------+     |
                                   | ID_TBLPROCENC (PK)     |     |
                                   | ID_TBLENCARREGADO (UK) |>----+
                                   | ID_TBLPROCESSO    (UK) |>----+
+---------------------+            +------------------------+     |
| TBL_PROCESSO        |                                           |
+---------------------+                                           |
| ID_TBLPROCESSO (PK) |-------------------------------------------+
| NUMERO              |
| PORTARIA            |
| etc                 |
+---------------------+
Responder

Gostei + 0

26/10/2011

Emerson Nascimento

ô fórum....
cadê os espaços da mensagem anterior?
Responder

Gostei + 0

26/10/2011

Emerson Nascimento

então vamos lá, via DDL....

note que coloquei apenas os campos básicos (e aqueles que eu suponho serem necessários).

- tabela de clientes
CREATE TABLE TBL_CLIENTE (
ID_TBLCLIENTE INTEGER NOT NULL,
CODIGO VARCHAR(10),
NOME VARCHAR(50)
);

ALTER TABLE TBL_CLIENTE ADD CONSTRAINT PK_TBL_CLIENTE PRIMARY KEY (ID_TBLCLIENTE);


- tabela de processos
CREATE TABLE TBL_PROCESSO (
ID_TBLPROCESSO INTEGER NOT NULL,
NUMERO VARCHAR(20),
PORTARIA VARCHAR(15)
);

ALTER TABLE TBL_PROCESSO ADD CONSTRAINT PK_TBL_PROCESSO PRIMARY KEY (ID_TBLPROCESSO);


- tabela de encarregados
CREATE TABLE TBL_ENCARREGADO (
ID_TBLENCARREGADO INTEGER NOT NULL,
ID_TBLCLIENTE INTEGER NOT NULL
);

ALTER TABLE TBL_ENCARREGADO ADD CONSTRAINT UNQ1_TBL_ENCARREGADO UNIQUE (ID_TBLCLIENTE);
ALTER TABLE TBL_ENCARREGADO ADD CONSTRAINT PK_TBL_ENCARREGADO PRIMARY KEY (ID_TBLENCARREGADO);
ALTER TABLE TBL_ENCARREGADO ADD CONSTRAINT FK_TBL_ENCARREGADO_1 FOREIGN KEY (ID_TBLCLIENTE) REFERENCES TBL_CLIENTE (ID_TBLCLIENTE);


- tabela de processos x encarrecados
CREATE TABLE TBL_PROC_ENC (
ID_TBLPROCENC INTEGER NOT NULL,
ID_TBLPROCESSO INTEGER NOT NULL
ID_TBLENCARREGADO INTEGER NOT NULL,
);

ALTER TABLE TBL_PROC_ENC ADD CONSTRAINT UNQ1_TBL_PROC_ENC UNIQUE (ID_TBLENCARREGADO, ID_TBLPROCESSO);
ALTER TABLE TBL_PROC_ENC ADD CONSTRAINT PK_TBL_PROC_ENC PRIMARY KEY (ID_TBLPROCENC);
ALTER TABLE TBL_PROC_ENC ADD CONSTRAINT FK_TBL_PROC_ENC_1 FOREIGN KEY (ID_TBLENCARREGADO) REFERENCES TBL_ENCARREGADO (ID_TBLENCARREGADO);
ALTER TABLE TBL_PROC_ENC ADD CONSTRAINT FK_TBL_PROC_ENC_2 FOREIGN KEY (ID_TBLPROCESSO) REFERENCES TBL_PROCESSO (ID_TBLPROCESSO);
Responder

Gostei + 0

26/10/2011

Wesley Souza

Companheiros (Ricardo e Emerson) muito obrigado. Com a ajuda de vocês, acredito que consegui fazer o relacionamento correto das tabelas. (Esqueci de dizer que também sou leigo em Firebird (rs)). Mas a questão agora é o seguinte: Utilizando C# como faço para inserir os clientes na tabela encarregados que possui o relacionamento na tabela Processos. Para quando eu precisar obter o nome dos encarregados de determinado processo?
Utilizando listas e um datagridview eu consigo inserir um nome na tabela Encarregado, mas eu quero é inserir o código do PM (funcionário) na tabela encarregado.
public partial class frmProcesso : Form
    {
        Variaveis vv = new Variaveis();
        private List<Lista> li;
        public frmProcesso()
        {
            InitializeComponent();
            li = new List<Lista>();
        }

        public class Lista
        {
            private string _Nome;
            public string Nome
            {
                get { return _Nome; }
                set { _Nome = value; }
            }            
            
            public Lista(string no)
            {
                this.Nome = no;
                
            }
            public Lista()
            { }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Lista result = li.Find(delegate(Lista it)
            {
                return it.Nome == comboBox1.Text;
            });

            if (result == null)
            {
                li.Add(new Lista(comboBox1.SelectedText));
                dataGridView1.DataSource = ;
                bindingSource1.DataSource = li;
                dataGridView1.DataSource = bindingSource1;                
            }
            else
            {
                MessageBox.Show(Nome já inserido! );
                
            }
        }
         // Comando para inserir no banco
        public Boolean InsValoGrid(string Nomme) // insert q pegada os valores da lista
        {
            string sqlIns = insert into tbl_encarregado (Nome) values (@port);
            Conexao.Comunica(true);
            FbDataAdapter cmdin = new FbDataAdapter(sqlIns, Conexao.ComunicBD);
            cmdin.SelectCommand.Parameters.Clear();
            cmdin.SelectCommand.Parameters.AddWithValue(@port, Nomme);
            cmdin.SelectCommand.ExecuteNonQuery();
            Conexao.Comunica(false);
            return false;
            
        }
        private void button2_Click(object sender, EventArgs e)//Retira da Lista
        {
            if (dataGridView1.RowCount <= 1)
            { }
            else
            {
                txtPortaria.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
                dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
            }
        }

        private void button3_Click(object sender, EventArgs e)//Adicona na Lista
        {
            Lista result = li.Find(delegate(Lista it)
            {
                return it.Nome == comboBox1.Text;
            });
            if (result == null)
            {
                li.Add(new Lista(comboBox1.Text));
                dataGridView1.DataSource = ;
                bindingSource1.DataSource = li;
                dataGridView1.DataSource = bindingSource1;
                //textBox1.Text = string.Empty;
                comboBox1.Focus();
            }
            else
            {
                MessageBox.Show(Nome já inserido! );
                comboBox1.Focus();
            }
        }

        private void frmProcesso_Load(object sender, EventArgs e)
        {
            //if (comboBox1.SelectedIndex > 0)
            {
                comboBox1.DataSource = vv.ListarPM().Tables[0];
                comboBox1.DisplayMember = Nome;
                comboBox1.ValueMember = Cod_Cliente;
                //comboBox1.Focus();
            }
            
        }

        private void button4_Click(object sender, EventArgs e)// cria um laço q pega os valores da lista e joga na tbl
        {
            foreach (Lista InsValorGrid in li)
            {
                InsValoGrid(InsValorGrid.Nome);
            }
        }


Foto da Tabela
http://www.flickr.com/photos/23732513@N04/6283845727/in/photostream

Foto da Tela frmProcessos
http://www.flickr.com/photos/23732513@N04/6283844123/in/photostream
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar