Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Работа с Access


Автор: WinNet 19.7.2007, 17:10
Здравствуйте!
Есть проблема с Access. После выборке всех данных из таблицы результат сохраняется в объекте dbRecord типа ArrayList , а затем выводится в dataGridView1. Проблема в том что данные выводятся в нежелательном порядке , то есть нумерация идет  сначала с  10 до 30 а в конце с 1 до 8.  smile 
Еще проблема :если сделать запрос по условию 
Код

SELECT * FROM Таблица1 WHERE [№]=14 
 то вообще ничего не выводится!!!
Вот код:
Код

public void dbRead(string getTextBox)
        {
            ArrayList dbRecord = new ArrayList();
            dbRecord.Clear();
            using (OleDbConnection myConnection = new OleDbConnection("File name = myUDL.udl"))
            {
                OleDbCommand myCommand = new OleDbCommand("SELECT * FROM Таблица1",myConnection);
                myConnection.Open();
                OleDbDataReader read = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
                if (read.Read())
                {
                    foreach (DbDataRecord rec in read)
                    {
                        dbRecord.Add(rec);
                    }
                }
            }
            dataGridView1.DataSource = dbRecord;
        }


Автор: Nickey 19.7.2007, 19:27
отсортируй полученый результат запроса(ORDER BY).
я несилен в базах данных, но WHERE [№]=14 вот [] как то странно выглядит.

Автор: WinNet 19.7.2007, 20:07
Смысл в том , что если нужно вывести 1-ну строку  то ничего не выводится (к примеру)
 SELECT * FROM Таблица1 WHERE ИНН = '456456456'. 
Сортировать данные в SQL запросе или нужно настроить dataGridView? Можно примерчик...

Автор: thomas 19.7.2007, 20:33
WinNet, 
Цитата

Сортировать данные в SQL запросе или нужно настроить dataGridView? Можно примерчик...

Код

SELECT * FROM Таблица1 ORDER BY ИНН


Цитата

если нужно вывести 1-ну строку  то ничего не выводится (к примеру)
 SELECT * FROM Таблица1 WHERE ИНН = '456456456'. 

ИНН - какой тип? (численный или текстовый)
Если числовой то одиночные кавычки не нужны, если текстовый то нужны. 
Потом ИНН это что, ключ?

Автор: mr.DUDA 19.7.2007, 21:45
ИНН это индивидуальный номер налогоплательщика.

Автор: WinNet 19.7.2007, 23:15
Отсортировать получилось , а затем и выполнить "упрямый" запрос!
Вот получившийся запрос:
Код

SELECT * FROM Таблица1 WHERE № = 17 ORDER BY №
 
И вообще работа с Access очень спецефична , к примеру если назвать таблицу не "Таблица1" а "Table1" (Похоже глюк с латиницей.) и соответственно отредактировав запрос , произойдет ошибка "таблица не найдена"  smile 




Автор: mr.DUDA 20.7.2007, 08:51
WinNet, столбцы в таблицах общепринято называть латинскими буквами. Как, впрочем, и сами таблицы.

Автор: WinNet 23.7.2007, 16:40
Не могу отредактировать данные в dataGridView. ReadOnly = false , а строки все равно не доступны...
Алгоритм такой:
Сначала получаю данные с помощью ExecuteReader , затем редактирую данные в dataGridView после чего вношу изменения в БД с помощью ExecuteNonQuery. 

Как настроить dataGridView? 

Автор: thomas 23.7.2007, 19:43
WinNet, 
Цитата

Сначала получаю данные с помощью ExecuteReader 

код покажи.

Автор: WinNet 23.7.2007, 22:15
thomas  вот:
Код

public void dbRead(string getTextBox)
        {
            ArrayList dbRecord = new ArrayList();
            dbRecord.Clear();
            using (OleDbConnection myConnection = new OleDbConnection("File name = myUDL.udl"))
            {
                OleDbCommand myCommand = new OleDbCommand("SELECT * FROM Таблица1",myConnection);
                myConnection.Open();
                OleDbDataReader read = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
                if (read.Read())
                {
                    foreach (DbDataRecord rec in read)
                    {
                        dbRecord.Add(rec);
                    }
                }
            }
            dataGridView1.DataSource = dbRecord;
        }

Автор: mr.DUDA 23.7.2007, 23:06
WinNet, для датасетов есть DataAdapter-ы и метод Fill. Ридер тогда вообще не нужен.

Автор: thomas 23.7.2007, 23:23
mr.DUDA, 
Так он ДатаСет не использует. А пользует ArrayList dbRecord = new ArrayList();
Мне тоже непонятно почему.
И я тут задумался: если использовать ДатаСет, то грид редактируется(если не запретить) и изменения внесенные в грид нормально сохраняются в БД.
А что должно происходить в случае когда грид отображает данные из ArrayList ?
Получается грид должен внести изменения в ArrayList?

И насколько я понял у него
Цитата

Не могу отредактировать данные в dataGridView. ReadOnly = false , а строки все равно не доступны...

Что-то тут не так  smile 

Автор: Idsa 24.7.2007, 02:00
...

Автор: WinNet 27.7.2007, 18:12
Подскажите как обновить данные в БД?

Вот кад заполнения DataSet:

                
Код

                DataSet myDS = new DataSet("Bussines");
                OleDbDataAdapter dAdapt = new OleDbDataAdapter(sql,"File name = myUDL.udl");
                dAdapt.Fill(myDS, "Таблица1");
                dataGridView1.DataSource = myDS.Tables[0];
                

После редактирования данных в dataGridView , нужно обновить БД. Причем желательно обновлять не всю БД целиком , а только те строки , которые были изменены. Обновление должно произойти при нажатии на кнопку "сохранить изменения"....

Автор: thomas 28.7.2007, 00:33
Код

        cmdBuilder = New OleDbCommandBuilder(dAdapt);
        If (myDS.HasChanges(DataRowState.Moddifed)){
            dAdapt.UpdateCommand = cmdBuilder.GetUpdateCommand();
            Try
                dAdapt.Update(myDS, tableName);
            Catch ex As Exception
                System.Windows.Forms.MessageBox.Show(ex.Message, "Ошибка при обновлении таблицы в БД!");
            End Try
        }
         myDS.AcceptChanges();


PS писал без студии, могут быть ошибки.

Автор: WinNet 28.7.2007, 10:29
Еще 2 преблемки:
1) Я заполнил DataSet данными и вывел их в DataGridView , затем я снова (другой запрос) заполнил DataSet данными и вывел их в DataGridView , при этом данные просто добавились к существующим,а не "вывелись" самостоятельно. Что бы решить эту проблему я очищаю DataSet, (DataSet.Clear()). Правильно ли это?

2) У меня есть столбец "№" с автоприращением , при удалении строки из таблици , остается промежуток. Например удаляю строку под номером 10 , после этого строки идут так: 9-я а за ней сразу 11-я. Это нормально?  smile 

Автор: mr.DUDA 28.7.2007, 10:57
Модератор: Пожалуйста, один топик - один вопрос.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)