![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| Witalij |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 28.10.2006 Репутация: нет Всего: нет |
Народ, я в отчаянии. Может кто поможет, уже три недели бьюсь и не выходит.
Есть класс которому передается имя DataGridView, SQL - запрос и имя провайдера баз данных. Сам класс приведен ниже. Вызов осуществляется следующим образом:
Данные выводятся в DataGrid на ура и быстро и без геммороя. Но никак не могу додуматься как доработать класс что-бы изменении данных в DataGrid, они изменялись в базе данных. Особо не пинайте, в VB.net я еще новичок, в литературе в основном приводилось примеры использования баз данных через мастеров. Мне же нужно чтобы подключение, изменение и т.д. происходило программно, т.к. в базе используется несколько таблиц.
Это сообщение отредактировал(а) Exception - 23.11.2006, 19:34 |
||||
|
|||||
| Naum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 2 Всего: 15 |
1. Имхо, адаптер должен быть полем класса. А не переменной в какой-то процедуре.
2. С DataSet тоже самое. 3.
Добавить в класс метод, например Update(). Примерно с таким кодом
Чуть не забыл самое главное. У Adaptera кроме SelectCommand должны быть еще UpdateCommand, InsertCommand, DeleteCommand. Добавлено @ 16:13 Если что не понятно спрашивай. Не могу собраться с мыслями. Голова квадратная. -------------------- У нас всего два праздника Новый год и ТЯПница. |
||||
|
|||||
| Witalij |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 28.10.2006 Репутация: нет Всего: нет |
А поподробнее можно? или хотя бы примеры привести или адреса сайтов, где можно почитать. Желательно с примерами. |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 3 Всего: 65 |
Witalij,
Привет. С DataSet и DataAdapter не так уж и сложно. Вместо того чтобы обьявлять их в одной функции, ты обьяви их глобально в классе, там где и 'Закрытые свойства Private pSQL As String Private pConString As String Просто допиши Private Data As New DataSet Private Adapter As OleDb.OleDbDataAdapter() А в функции соответственно присваивай им значения и заполняй данными Adapter=New OleDb.OleDbDataAdapter(ConSQL, ConString) Adapter.Fill(Data, "DataTable") Grid.DataSource = Data Grid.DataMember = "DataTable" Обьявив DataSet и DataAdapter глобально в классе, ты можешь использовать их во всех функциях и методах класса. А для обновления твоей БД нужно добавить переменную(поле) OleDbCommand. Dim сmd As OleDbCommand. Что бы потом использовать cmd.ExecuteNonQuery() в отдельном методе обновления БД. Пишешь sql соманду на обновление полей БД, присваиваешь этот sql свойству команды cmd.CommandText=sql а далее как обычно cmd.Connection= твое соединение твое соединение.Open() cmd.ExecuteNonQuery() твое соединение.Close() a sql что-то типа такого sql= "UPDATE table SET fild1=valueNew WHERE fild1=valueOud AND fildID=xxxx-yy" А посмотреть можно в MSDN Обрати внимание на "оглавление" в левой панели Успехов. ЗЫ завтра днем подскажу еще подробнее. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| Witalij |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 28.10.2006 Репутация: нет Всего: нет |
Если можно, то подскажи подробнее. А можно обойтись без SQL запроса на обновление базы. В одном примере я нашел обновление происходит через адаптер (OleDbDataAdapter1.Update(DataSet11)) и обновляется все нормально. Правда тот DataSet был создан через мастер. |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 2 Всего: 15 |
Можно. Для этого после Adapter=New OleDb.OleDbDataAdapter(ConSQL, ConString) добавить Adapter.UpdateCommand=cmd. Еще можно посмотреть, что нагенерил мастер. Если собираешься вносить изменения в базу, то, ИМХО, наряду с UpdateCommand должны быть и InsertCommand и DeleteCommand. Если пишешь эти команды ручками не плохо бы знать SQl. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| Witalij |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 28.10.2006 Репутация: нет Всего: нет |
Народ, может кто-нибудь киданет на мыло (вырезано модератором) исходники. Может у кого-нибудь есть какие-либо наработки. Нужно лишь подключение базы данных, вывод DataGridView, и сохранение изменений в нем. Попытаюсь в них разобраться. И желательно подключение через АДО.
Это сообщение отредактировал(а) Exception - 27.11.2006, 16:15 |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 3 Всего: 65 |
Вот тебе пример как обновляя Грид, обновлять БД.
Извини что на C#. Но в принципе это не принципиально, логика и команды теже, только написано чуть-чуть по другому. (Sub=void) Присоединённый файл ( Кол-во скачиваний: 25 )
Oef09_dbBis3_.zip 45,61 Kb-------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| Witalij |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 28.10.2006 Репутация: нет Всего: нет |
Thomas, спасибо. Разобрался, все работает. Теперь буду класс изменять.
|
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 2 Всего: 15 |
thomas, +1.
-------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 3 Всего: 65 |
Witalij,
Привет. Вот сваял тут в выходные, некоторое подобие универсального класса
Обращаюсь ко всем. Какие будут пожелания для расширения функциональности данного класса, и какие коментарии и как следует исправить. И вообще здоровая критика приветствуется. Ведь многие здесь еще учаться. А в процессе учёбы очень важно обсуждение рациональности и целесообразности того или иного решения. Заранее всем спасибо. Тут пример использования этого класса. Сделано в VS2005. ЗЫ архив с базой выложить не получиться, он больше 120Кв. но думаю у всех есть эта стандартная учебная база Northwind Это сообщение отредактировал(а) thomas - 27.11.2006, 13:20 Присоединённый файл ( Кол-во скачиваний: 15 )
DataAccess.zip 66,46 Kb-------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| Witalij |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 28.10.2006 Репутация: нет Всего: нет |
В двойне огромное спасибо, Thomas. Буду разбираться с твоим классом.
|
|||
|
||||
| Witalij |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 28.10.2006 Репутация: нет Всего: нет |
Thomas, с твоим классом я разобрался. Огромное спасибо. Вот только есть некоторые вопросы:
Может кто сможет ответить. Загрузка в datagridview 700 записей происходит где то около 2 сек (при этом у меня 35 полей). Но если применяю AutoResizeColumns. То тормоза увеличиваются где-то до 15-20 секунд. Может что-то делаю не так? Или сам DataGrid тормозит. Интересно в других языках будут такие-же тормоза? |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 2 Всего: 15 |
Скорее всего такие тормоза будут везде. Для этого частенько используется постраничный вывод записей. Пример, для Framework 1.1 можно посмотреть здесь.
-------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 3 Всего: 65 |
Привет всем.
Я тут кое-что подправил и добавил в класс. В методе UpDateTable изменил условие на
это позволяет обновлять таблицу не только при изменений полей в какой-то строке, но и при добавлении строки в таблицу. Плюс добавил Функцию для создания строки в таблице и Mетод добавления заполненной строки в таблицу.
Кому интересно, я так же переделал этот класс под SqlDataBase на Sql Server-е Там практически тоже самое и плюс еще добавлены методы для Stored Procedure -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |