Jump to content
Sign in to follow this  
informaster

Depois de tratamento de erro voltar a combobox

Recommended Posts

informaster

Boas Tarde

Estimados amigos.

Preciso de alguma ajuda. Tenho este codigo e preciso de voltar á combobox da selecção que faltava sem dar erro de sair do programa

 private void cbox_ler_dbtabelas_Click(object sender, EventArgs e)
 {
	 var datasource = cbox_ler_dbfile.Text;
	 sql_con = new SQLiteConnection("Data Source=" + datasource + ";Version=3;"); //VAI BUSCAR O CAMINHO DO FICHEIRO
//DA BASE DE DADOS EXEMPLO: DB2013.DB3 QUE ESTA NA CBOX_LER_DBFILE.TEXT

	 //if se a combobox da db file nao estiver selectiona
	 if (string.IsNullOrEmpty(cbox_ler_dbfile.Text))
	 {
		 MessageBox.Show("Não escolheu base de dados");
//AQUI GOSTAVA DE QUE ELE VOLTA-SE A SELECIONAR A COMBOBOX DA ESCOLHA DA BASE DE DADOS
// OU ENTÃO QUE APARECE-SE A ESCOLHA ESTILO POPUP SE O NÃO FIZER A APLICAÇÃO CRASHA
//PORQUE O SQLITE NÃO PERMITI CRIAR TABELAS SEM QUE SELECIONEMOS O FICHEIRO
	 }
	 else
	 {
		 MessageBox.Show("A base de dados é:" + cbox_ler_dbfile.Text);

	 }
	 sql_con.Open();

	 sql_con.Close();
}

Teem alguma ideia rápida e fácil sem complicar.

Nuno Revez

2013

Nesta parte do codigo deve haver uma maneira de ele voltar para cima e não continuar a executar:

//if se a combobox da db file nao estiver selectiona
	 if (string.IsNullOrEmpty(cbox_ler_dbfile.Text))
	 {
		 MessageBox.Show("Não escolheu base de dados");

	 }

Desculpem mas eu ando a aprender c#.

Abraço

Edited by Rui Carlos

 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
nelsonr

Podes adicionar um return, para sair da função.

//if se a combobox da db file nao estiver selectiona
if (string.IsNullOrEmpty(cbox_ler_dbfile.Text))
{
  MessageBox.Show("Não escolheu base de dados");
  return;						  
}

Share this post


Link to post
Share on other sites
informaster

As situações que pensamos mais complicadamente são as mais simples.

Obrigado :) muito obrigado mesmo.

Diga-me uma coisa:

Qual a melhor forma de eu indo construido os meus codigos.

E por exemplo: em uma parte da programação quero chamar por exemplo um codigo que era por exemplo umas queries de sql pre programas.

ou então um codigo que é comum em todo o programa.

Qual o procedimento melhor e mais simple para chamarmos aquele bocado de codigo?????

:)

Posso dar como exemplo o codigo desta FORM para fazer LOGINS e Tem funções de Administração Tecnica com Base de Dados SQLite.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SQLite;

namespace helpdesk
{
public partial class frm_login_tecnicos : Form
{
 public SQLiteConnection sql_con;
 public SQLiteCommand sql_cmd;
 public SQLiteDataAdapter DB;
 public DataSet DS = new DataSet();
 public DataTable DT = new DataTable();
 public frm_login_tecnicos()
 {
	 InitializeComponent();
 }


 private void frm_login_tecnicos_Load(object sender, EventArgs e)
 {
	 //verifica se existe o directorio helpdesp\db
	 System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"c:\helpdesk\db\");
	 if (!di.Exists)
	 {
		 di.Create();
	 }

	 //verifica se existe o file db2013.db2
	 System.IO.FileInfo fi = new System.IO.FileInfo(@"c:\helpdesk\db\db2013.db3");
	 if (!fi.Exists)
	 {
		 fi.Create().Dispose();
	 }

	 //preenche a combobox com a base de predefinida db2013.db3
	 List<string> lines = new List<string>();
	 lines.Add("c:\\helpdesk\\db\\");
	 txtbox_caminho.Lines = lines.ToArray();

	 //faz leitura dos ficheiros *.db3 que estao no directorio
	 string[] filePaths = System.IO.Directory.GetFiles(@txtbox_caminho.Text, "*.db3");
	 foreach (string file in filePaths)
	 {
		 //adiciona ao combo os ficheiros name
		 cbox_ledb.Items.Add(file);
		 cbox_ledb.SelectedIndex = 0;
	 }

 }
 private void bt_refresh_Click(object sender, EventArgs e)
 {
	 //faz um clean á combo box dos ficheiros
	 cbox_ledb.Items.Clear();
	 cbox_ledb.Text = "";

	 //faz leitura dos ficheiros *.db3 que estao no directorio
	 string[] filePaths = System.IO.Directory.GetFiles(@txtbox_caminho.Text, "*.db3");
	 foreach (string file in filePaths)
	 {
		 //adiciona ao combo os ficheiros name
		 cbox_ledb.Items.Add(file);
		 cbox_ledb.SelectedIndex = 0;
	 }

 }
 private void bt_criadb_Click(object sender, EventArgs e)
 {
	 var dir = new System.IO.DirectoryInfo (@"C:\helpdesk\db\");
	 var db = new System.IO.FileInfo(System.IO.Path.Combine(dir.FullName,txtbox_criadb.Text+".db3"));
	 string newdb = "";
	 if (!db.Exists) // you may not want to overwrite existing files
	 {
		 using (System.IO.Stream stream = db.OpenWrite())
		 using (System.IO.StreamWriter writer = new System.IO.StreamWriter(stream))
		 {
			 writer.Write(newdb);
		 }
		 txtbox_criadb.Text = "";
		 cbox_ledb.Items.Clear();
		 cbox_ledb.Text = "";
		 cbox_ledb.SelectedIndex.Equals(0);

	 }

 }
 private void cbox_ledb_Click(object sender, EventArgs e)
 {
	 //faz um clean á combo box dos ficheiros
	 cbox_ledb.Items.Clear();
	 //faz leitura dos ficheiros *.db3 que estao no directorio
	 string[] filePaths = System.IO.Directory.GetFiles(@"c:\helpdesk\db\", "*.db3");
	 foreach (string file in filePaths)
	 {
		 //adiciona ao combo os ficheiros name
		 cbox_ledb.Items.Add(file);

	 }
 }
 private void bt_cria_campo_Click(object sender, EventArgs e)
 {
	 //campos deve ser: NAME,TYPE is INTEGER,CHAR,VARCHAR,NUMERIC,TEXT
	 //CHAR/VARCHAR/TEXT pode ter (valor)
	 // depois temos o null ou not null / primary key / unique
 }
 private void cbox_ler_dbfile_Click(object sender, EventArgs e)
 {
	 //faz um clean á combo box dos ficheiros
	 cbox_ler_dbfile.Items.Clear();
	 //faz leitura dos ficheiros *.db3 que estao no directorio
	 string[] filePaths = System.IO.Directory.GetFiles(@"c:\helpdesk\db\", "*.db3");
	 foreach (string file in filePaths)
	 {
		 //adiciona ao combo os ficheiros name
		 cbox_ler_dbfile.Items.Add(file);

	 }
 }
 private void cbox_ler_dbtabelas_Click(object sender, EventArgs e)
 {
	 //QUERIES
	 //CREATE TABLE TEMPORARY
	 string createtabletmp = "create table temporary (nome varchar(20), valor int)";
	 string deletetabletmp = "delete table temporary";
	 //ACABOU QUERIES
	 var datasource = cbox_ler_dbfile.Text;
	 sql_con = new SQLiteConnection("Data Source=" + datasource + ";Version=3;");
	 //if se a combobox da db file nao estiver selectiona
	 if (string.IsNullOrEmpty(cbox_ler_dbfile.Text))
	 {
		 MessageBox.Show("Não escolheu base de dados");
		 //tem que voltar ao cimo PROBLEMA
		 return;
	 }
	 else
	 {
		 sql_con.Close();		
	 }
	 sql_con.Open();
	 string Nome = this.cbox_ler_dbtabelas.GetItemText(this.cbox_ler_dbtabelas.SelectedItem);
	 SQLiteCommand createtable = new SQLiteCommand(createtabletmp, sql_con);
	 SQLiteCommand deletetable = new SQLiteCommand(deletetabletmp, sql_con);
	 createtable.Parameters.AddWithValue("@Nome", Nome);
	 deletetable.Parameters.Clear();



	 sql_con.Close();


	 }

}
}

Fica aqui os prints do que estou a fazer.

https://www.dropbox.com/sh/dd6mfdw9gl0mumi/souc8cbAqc

Obrigado

Edited by Rui Carlos
Formatação do código.

 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
nelsonr

Podes criar uma class para procedimentos que usas várias vezes.

Depois quando precisas de usar, crias um novo objecto dessa class.

Ou então, se fizer mais sentido, podes criar uma class global com conteúdo estático (static).

Quando precisares de usar chamas directamente sem precisar de instancias.

Mas não percas muito tempo com isso. O que interessa é pores mãos à obra e avançares. Depois com o tempo e mais conhecimentos vais melhorando a organização do teu codigo.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.