Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление полей таблицы в Access из DataTable 
V
    Опции темы
EAV
Дата 7.11.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



Уже перечитол дофига статей по данный теме.
Но так толком ничего и не получается(((
Вообщем простой пример: на форме есть DataGrid и 2 кнопки, клик на первой - заполняем ДатаГрид данными из таблицы, клик на второй - хочу вносить изменения которые сделал в ДатаГрид в аксесевскую таблицу.
Вот что у меня получилось после прочтения всяких статей:
Код

private System.Data.OleDb.OleDbCommandBuilder cmdBuild;
private System.Data.OleDb.OleDbDataAdapter da;
private System.Data.OleDb.OleDbConnection conn;
private System.Data.OleDb.OleDbCommand cmd;
private System.Data.DataView dv;
private System.Data.DataTable dt;
private string connStr;
private System.Windows.Forms.DataGrid dataGrid1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;

private void Form1_Load(object sender, System.EventArgs e)
{
    try
    {
        connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Docs\\Base\\TelReg.mdb";
        conn = new OleDbConnection(connStr);
        cmd = new OleDbCommand();
        cmd.Connection = conn;
        cmd.CommandText = "Select * from Main";
        dt = new DataTable();
        da = new OleDbDataAdapter(cmd);
        conn.Open();
        da.Fill(dt);
        conn.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

private void button1_Click(object sender, System.EventArgs e)
{
    dv = new DataView(dt);
    dv.AllowDelete = false;
    dv.AllowEdit = true;
    dv.AllowNew = false;
    dataGrid1.DataSource = dv;
}

private void button2_Click(object sender, System.EventArgs e)
{
    try
    {
        cmdBuild = new OleDbCommandBuilder(da);
        da.UpdateCommand = cmdBuild.GetUpdateCommand();
        MessageBox.Show(da.UpdateCommand.CommandText);
        conn.Open();
        da.Update(dt);
        conn.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

Подскажите как правильно реализовать button2_Click???
А то у меня выдается сообщение "Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information"
PM MAIL   Вверх
thomas
Дата 7.11.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



EAV, 
Привет.
А у тебя таблица в базе данных имеет PK?
Вдумайся в то, что тебе говорят в сообщении.


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
EAV
Дата 8.11.2007, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



thomas, неа ключа у меня в таблице нет
У меня было подозрение, что возможно с этим связано... но как то не хотелось в это поверить.
Т.е. если я добавлю ключевое поле (например ID), то мой код должен будет заработать?
PM MAIL   Вверх
EAV
Дата 8.11.2007, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



Цитата(EAV @  8.11.2007,  06:56 Найти цитируемый пост)
Т.е. если я добавлю ключевое поле (например ID), то мой код должен будет заработать?

Балин.... и действительно все заработало!!!
А я то думал, что у меня в коде ошибка, замаялся уже ее искать (ошибку тоесть)

thomas, спасибо за подсказку smile 
PM MAIL   Вверх
EAV
Дата 8.11.2007, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.10.2007

Репутация: нет
Всего: нет



И все же - можно ли как то организовать обновление, если в таблице нет ключевого поля?
И почему OleDbCommandBuilder не может сформировать строку запроса при отсутствии ключа?

ОФТОПИК
Подскажите через какое время бездействия приходиться заново авторизоваться?
И как можно это время увеличить?
еще раз сори за ОФТОП
PM MAIL   Вверх
MFSham
Дата 9.11.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



Цитата(EAV @  8.11.2007,  07:57 Найти цитируемый пост)
И все же - можно ли как то организовать обновление, если в таблице нет ключевого поля?

Можно, но при этом надо самому прописывать ручками запросы в адаптер (InsertCommand, DeleteCommand, UpdateCommand)
Цитата(EAV @  8.11.2007,  07:57 Найти цитируемый пост)
И почему OleDbCommandBuilder не может сформировать строку запроса при отсутствии ключа?

Насколько мне подсказывает логика при отсутствии ключа данные могут быть не уникальными и при обновлении(например) может возникнуть косяк. А при наличии ключа этого не произойдет и можно спокойно узать CommandBuilder.
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.