Jump to content
ninaOsorio

"Index was outside the bounds of the array"-erro

Recommended Posts

ninaOsorio

Ola. Eu estou com um erro e gostava muito que me ajudassem. O meu programa serve para reservar as salas de aula.

Eu para ver se o programa está a ler os dados da base de dados em Access decidi buscar os dados atraves do getstring para uma listbox.

Só que aparece este erro: Index was outside the bounds of the array

Alguém pode me ajudar?

Beijinhos

Share this post


Link to post
Share on other sites
M6

Esse erro indica que estás a tentar obter um valor que não existe no array.

Por exemplo, o teu array tem 20 posições e estás a pedir os valores da posição 21.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
ninaOsorio

Mas eu nao estou a usar arrays... vou deixar aqui o meu codigo pode ser que alguem consiga descobrir onde errei:

            OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=J:/Rascunho1.mdb");
            string sql = "SELECT * FROM Reserva";
            try
            {
                conexao.Open();
                MessageBox.Show("Está conectado!");
            }
            catch (Exception erro)
            {
                MessageBox.Show(erro.Message, "**** ERRO ****", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            OleDbDataAdapter OleDA = new OleDbDataAdapter(sql, conexao);

            DataSet ods = new DataSet();
            OleDA.Fill(ods, "Reserva");

            //criar um objeto Data Row
            DataRow oDR = ods.Tables["Reserva"].NewRow();

            //Preencher o datarow com valores
                if (txtNome.Text == "")
                {
                    MessageBox.Show("Tem que inserir o nome do professor!");
                }
                else
                {
                    string sqlExemplo = "SELECT Professor FROM Reserva WHERE Professor = 'Paula Martins'";
                    OleDbCommand comando = new OleDbCommand(sqlExemplo, conexao);
                    OleDbDataReader lerComando = comando.ExecuteReader();
                    MessageBox.Show("ola");
                    while (lerComando.Read()) 
                    {
                        lbox.Items.Add(lerComando.GetString(2));
                    }

                    oDR["Professor"] = txtNome.ToString();
                    oDR["DiaInicialMes"] = cbDia.SelectedItem.ToString();
                    oDR["DiaFinalMes"] = cbDia.SelectedItem.ToString();
                    oDR["DiaSemana"] = cbSemana.SelectedItem.ToString();
                    oDR["HoraInicial"] = cbHoraInicial.SelectedItem.ToString();
                    oDR["HoraFinal"] = cbHoraFinal.SelectedItem.ToString();
                    oDR["MesInicio"] = cbMes.SelectedItem.ToString();
                    oDR["MesFinal"] = cbMes.SelectedItem.ToString();
                    oDR["Sala"] = cbSala.SelectedItem;
                    oDR["Razao"] = cbRazao.SelectedItem.ToString();

                    //Incluir um datarow ao dataset
                    ods.Tables["Reserva"].Rows.Add(oDR);

                    //Usar o objeto Command Bulder para gerar o Comandop Insert 
                    OleDbCommandBuilder oCB = new OleDbCommandBuilder(OleDA);

                    //Atualizar o BD com valores do Dataset 
                    OleDA.Update(ods, "Reserva");

                    MessageBox.Show("A Reserva foi realizada com êxito!");

                    oCB.Dispose();
                }
        
            //liberar o data adapter , o dataset , o comandbuilder e a conexao
            OleDA.Dispose();
            ods.Dispose();
            conexao.Dispose();

Share this post


Link to post
Share on other sites
Caça

lbox.Items.Add(lerComando.GetString(2));

Provavelmente o erro está aqui neste 2


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Rechousa

lbox.Items.Add(lerComando.GetString(2));

Provavelmente o erro está aqui neste 2

Também sou da mesma opinião. Dado que estás apenas a ir buscar o campo Professor e o que faz o 2 é para ir buscar o a coluna de índice 2 - atenção que o zero também é numero !!! - aprendi isso na praxe  :)

O que precisas de fazer é alterar o teu código para:

while (lerComando.Read())
{
lbox.Items.Add(lerComando.GetString(0));
}

Espero ter ajudado.


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Share this post


Link to post
Share on other sites
ninaOsorio

na minha base de dados tenho no primeiro campo o idindividual, no segundo o idcolectivo e só no terceiro campo o Professor. Por isso é que pus o 2

Share this post


Link to post
Share on other sites
Rechousa

Pois, mas isso não importa. O que importa são os campos que vais ler, neste caso apenas o Professor  :)

Já agora... esse código não faz muito sentido.

Porque razão queres obter o Nome do Professor das Reservas, em que o nome do professor já o sabes? (Paula Martins). E ainda por cima popular uma combobox com o mesmo nome, N vezes?

O campo que deves precisar deverá ser o ID da Reserva, não?


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Share this post


Link to post
Share on other sites
ninaOsorio

o que eu queria mesmo era pegar nos valores da base de dados e fazer uma comparacao com os valores inseridos pelo utilizador para que não possa existir duas reservas iguais. mas para isso tenho que introduzir os dados da bd para uma variavel e por isso pus numa list box para ver se inseria mas nao estou a conseguir

Share this post


Link to post
Share on other sites
ninaOsorio

Vou por por ordem: IDIndividual, IDColectivo, Professor, DiaInicialMes, DiaFinalMes, DiaSemana, HoraInicial, HoraFinal, MesInicio, MesFinal, Sala, Razao,

Share this post


Link to post
Share on other sites
ninaOsorio

sim, é isso... para nao ter duas reservas na mesma hora e no mesmo dia... a chave é o IDIndividual...

Share this post


Link to post
Share on other sites
Rechousa

Hum... Os campos DiaInicialMes, DiaFinalMes, DiaSemana, HoraInicial, HoraFinal, MesInicio, MesFinal representam o quê? As datas de Início e Fim?

Se assim é, não podes utilizar antes campos do tipo Data / Hora? É mais simples, para depois calculares as sobreposições.

Ainda em relação às sobreposições... Existem três tipos:

- Totalmente sobreposta (a tua nova reserva está totalmente dentro de outra reserva já existente);

- Inicialmente sobreposta (o início da tua nova reserva está sobreposta a outra reserva já existente);

- Finalmente sobreposta (o fim da tua nova reserva está sobreposta a outra reserva já existente);


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Share this post


Link to post
Share on other sites
ninaOsorio

no select meti * para seleccionar todos as colunas mas o programa so me deixa aceder ao primeiro campo. quando no GetInt32 meto um numero qualquer que nao seja 0 ele da-me este erro: Specified cast is not valid.

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

×
×
  • 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.