VBNet.Su - Visual Basic .NET. ASP .NET. Framework .NET.
Список форумов
Windows Forms

НАИПРОСТЕЙШИЙ пример DataGridView+Access

Быстрый переход:
Windows Forms / Visual Basic .NET 2008 (Framework 3.0/3.5) (ссылка)15 декабря 2008 / 14:37
Arseny
Пользователь
ку 3.6845703125+

вопросов: 1
советов: 0
ответов: 0
комментариев: 8


Собственно, сабж. :) Решил, что пора со скрипом переползать с любимого, но старого VB6 на новую платформу. Для начала решил переписать с нуля под дотнет имеющуюся у меня программу. нарисовал весь интерфейс и.... встал. :( Упрощенно поясню: на форме DataGridView, ну и.. TextBox. также в наличии БД Access 2000. Вопрос в том, чтобы вывести таблицу X в DataGridView, а при нажатии на Enter выполнялся SQL-запрос написанный в текстбоксе. перерыл все просторы инета, но столь простенького примера так и не нашел.
Комментарий #1 (ссылка)15 декабря 2008 / 15:26
Алексей Немиро
Администратор
ку 65.2275660625+

вопросов: 8
советов: 13
ответов: 27
комментариев: 80


В .NET есть фишка, называется типизированные DataSet, на мой взгляд, использовать данную технологию нихт гуд, но это уже из раздела религиозных вопросов smile
Собственно, рабата с этими DataSet визуальная. Создаем новый проект (WinForms), далее, жмем меню Project -> Add Item, выбираем DataSet, далее открываем его, берем с панели инструментов (Toolbox) TableAdapter, в окне Wizard-а выбираем источник данных, далее все дефолтно, на последнем шаге пишем запрос на выборку, например: SELECT * FROM table1, остальное дефолтно. Если в запросе ошибка, визард об этом сообщит. Далее, переходим к форме, кидаем DataGridView указываем в DataSource созданный DataSet, запускаем проект, и любуемся результатом. smile
В DataSet можно написать любые запросы.
Все сказанное админом – истина и обсуждению не подлежит, даже если истина таковой не является.
Кнопки VBNet.Su  ·  Утилиты  ·  Home Page  ·  Kbyte.Ru
--
Не забываем ставить фастаны (быстрые ответы) ;-)
Комментарий #2 (ссылка)15 декабря 2008 / 16:52
Arseny
Пользователь
ку 3.6845703125+

вопросов: 1
советов: 0
ответов: 0
комментариев: 8


ммм... а если просто выдернуть DataGridView на форму, остальное можно указать чисто кодом?
Комментарий #3 (ссылка)15 декабря 2008 / 20:07
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


Кодом можно сделать все ;)
Комментарий #4 (ссылка)15 декабря 2008 / 20:22
Arseny
Пользователь
ку 3.6845703125+

вопросов: 1
советов: 0
ответов: 0
комментариев: 8


Kolyasik пишет:
Кодом можно сделать все ;)

Это единственное в нашем бренном мире, в чем я не сомневаюсь. А конкретный пример я могу лицезреть и скопировать в IDE ?
Комментарий #5 (ссылка)15 декабря 2008 / 20:45
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


  1.     Dim Conn As New SqlConnection(<Строка соединения>)
  2.         Dim Command As New SqlCommand("Select * From <MyTable>", Conn)
  3.         Dim dr As SqlDataReader
  4.  
  5.         Try
  6.             Conn.Open() 
  7.             dr = Command.ExecuteReader
  8.  
  9.         Catch ex As Exception
  10.         End Try
  11.  
  12.         While dr.Read
  13.             'тут можно заполнить таблицу
  14.         End While
  15.  
  16.         MyDataGridView.DataSource = <Моя таблица>
  17.         MyDataGridView.DataBind()
  18.  
  19.  


ет то что с листа накинул... только тут малость для SQL показано но Access то же самое
Комментарий #6 (ссылка)15 декабря 2008 / 20:54
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\bin\LocalAccess.mdb"

пример строки для Access
Комментарий #7 (ссылка)15 декабря 2008 / 21:28
Arseny
Пользователь
ку 3.6845703125+

вопросов: 1
советов: 0
ответов: 0
комментариев: 8


Я конечно может и туплю, но извиняйте - за 2008 студию сел во второй раз. в первый только рисовал интерфейс.
Reference какие подключить, или как?
  1. Error   1  Type 'SqlConnection' is not defined.      C:\Documents and Settings\Arseny\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.vb      4     25   WindowsApplication1
  2. Error   2  Type 'SqlCommand' is not defined. C:\Documents and Settings\Arseny\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.vb 5        28      WindowsApplication1
  3. Error   3  Type 'SqlDataReader' is not defined.      C:\Documents and Settings\Arseny\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.vb      6     19   WindowsApplication1
  4. Error   4  'DataBind' is not a member of 'System.Windows.Forms.DataGridView'.        C:\Documents and Settings\Arseny\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.vb        17      9     WindowsApplication1
  5.  
Комментарий #8 (ссылка)15 декабря 2008 / 21:51
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


  1.         Dim Conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=L:\Documents and Settings\Dully\Desktop\Базы\База 2002.mdb")
  2.         Dim Command As New OleDbCommand("Select Наименование From Клиенты", Conn)
  3.         Dim dr As OleDbDataReader
  4.         Dim MyTable As New DataTable
  5.         Dim dRow As DataRow
  6.  
  7.         MyTable.Columns.Add("Name")
  8.  
  9.         Try
  10.             Conn.Open()
  11.             dr = Command.ExecuteReader
  12.  
  13.         Catch ex As Exception
  14.         End Try
  15.  
  16.         While dr.Read()
  17.  
  18.             dRow = MyTable.NewRow
  19.             dRow("Name") = dr.Item(0)
  20.             MyTable.Rows.Add(dRow)
  21.  
  22.         End While
  23.  
  24.         DataGridView1.DataSource = MyTable
  25.  


сорь... ДатаБинд не от етого грида ;)
Комментарий #9 (ссылка)15 декабря 2008 / 21:52
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


ето в Вебе пока не перебиндишь грид не отобразит ничего :)
Комментарий #10 (ссылка)15 декабря 2008 / 21:53
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


  1. Imports System.Data.OleDb
  2.  


вот ето в начале не забудь.. ;) ошибок меньше будет ;)
Комментарий #11 (ссылка)15 декабря 2008 / 21:56
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


забыл еще в конце

  1. conn.Close()


так правильние :)
Комментарий #12 (ссылка)15 декабря 2008 / 21:58
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


кстати 2005 и 2003 практически тоже самое... сногшибательной разницы я не за метил... эволюция да... а так вроде все по старому
..и было сказано:
Не согласен(а): Алексей Немиро
Комментарий #13 (ссылка)15 декабря 2008 / 22:22
Arseny
Пользователь
ку 3.6845703125+

вопросов: 1
советов: 0
ответов: 0
комментариев: 8


Ёу! Вышел Каменный цветок! respekt Огромное спасибо. Наконец-то отправная точка нарисовалась. Только вот непонятки все равно есть: БД размером в полтора лимона записей, если по запросу отберется скажем тысяч сто строк, они что, так и будут все в цикле заполнятся?! Везде слышал, что VB.NET - это легче и удобочитаемей, нежели VB6... Пока что вижу, что то, на что в VB6 уйдет 3 строки кода, тут требует 20-и...shok
А нельзя результат запроса сразу впихнуть в грид? минуя ручное создание столбцов и ручное добавление строк?
Комментарий #14 (ссылка)15 декабря 2008 / 22:25
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


тогда юзай датасет и дата адаптер...
Комментарий #15 (ссылка)15 декабря 2008 / 22:25
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


может завтра примерчик кину.. седня спать пора...
Комментарий #16 (ссылка)15 декабря 2008 / 22:27
Arseny
Пользователь
ку 3.6845703125+

вопросов: 1
советов: 0
ответов: 0
комментариев: 8


Kolyasik пишет:
кстати 2005 и 2003 практически тоже самое

Вполне возможно. Когда они появлялись у меня я их ставил, но заняться вплотную руки так и не доходили. xaxa
Так и кодил на ВБ6.
Сейчас решил, что если начать изучать, то уж последнюю версию smile Посему и поставил 2008.
Комментарий #17 (ссылка)15 декабря 2008 / 22:29
Kolyasik
Наш человек
ку 5.9658263125+

вопросов: 8
советов: 1
ответов: 6
комментариев: 37


юзай 2008 експресс нуучишся больше ручками писать... да и вообще ручками все лучше работает.. и понимаешь лучше как ето работает :)
..и было сказано:
Поддерживаю: Алексей Немиро, Leon
Комментарий #18 (ссылка)16 декабря 2008 / 04:04
Алексей Немиро
Администратор
ку 65.2275660625+

вопросов: 8
советов: 13
ответов: 27
комментариев: 80


  1. 'не забываем указать путь к файлу базы данных MS Access
  2. Using conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\test.mdb")
  3.   conn.Open() 'открываем соединение
  4.   Dim cmd As New OleDbCommand("SELECT * FROM table1", conn) 'готовим запрос для выполнения
  5.   Dim DA As New OleDbDataAdapter(cmd) ' создаем DataAdapter
  6.   Dim DT As New DataTable("MyDataTable") 'создаем таблицу
  7.   DA.Fill(DT) 'заполняем таблицу данными
  8.   DataGridView1.DataSource = DT 'указываем таблицу в качестве источника данных для DataGridView1
  9. End Using 'закрываем соединиение, уничтожаем объект
Все сказанное админом – истина и обсуждению не подлежит, даже если истина таковой не является.
Кнопки VBNet.Su  ·  Утилиты  ·  Home Page  ·  Kbyte.Ru
--
Не забываем ставить фастаны (быстрые ответы) ;-)

..и было сказано:
Спасибо: vvivan
Комментарий #19 (ссылка)16 декабря 2008 / 09:43
Arseny
Пользователь
ку 3.6845703125+

вопросов: 1
советов: 0
ответов: 0
комментариев: 8


Ага. Работает, спасибо большое. Подход конечно сильно от VB6 отличается, поэтому и мозги закипают. На шестерке, к примеру, я делал SELECT * FROM table и прога шустренько запускалась. Но напоминаю, что в базе полтора лимона записей, соответственно тут при такой выборке я подождал минут 10 и выключил нафиг... ну ладно, при первом запуске пусть выводит там первые 10-20 записей, сделаем. А в процессе работы, если выборка зашкалит за 500 тысяч записей - это всегда такие тормоза будут? У меня на шестерке ей-богу шустрее... Кстати, а как по нажатию кнопки, скажем, выборку организовать? Весь этот код в код кнопки снова?
Комментарий #20 (ссылка)16 декабря 2008 / 10:09
Алексей Немиро
Администратор
ку 65.2275660625+

вопросов: 8
советов: 13
ответов: 27
комментариев: 80


MS Access - не лучшее хранилище для 1,5kk записей smile Лучше MS SQL Server использовать, будет быстрее работать.

Записи вообще лучше все не выводить за раз, а подгружать по мере необходимости.
Можно, например, сделать разбивку на страницы. Либо загружать данные кусками:
  1. Using conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=I:\test.mdb")
  2.   conn.Open()
  3.   Dim cmd As New OleDbCommand("SELECT * FROM tableName", conn)
  4.   Dim DR As OleDbDataReader = cmd.ExecuteReader()
  5.  
  6.   Do While DR.Read()
  7.     If DataGridView1.Columns.Count <= 0 Then
  8.       'добавляем колонки
  9.       For i As Integer = 1 To DR.FieldCount
  10.         Dim c As New DataGridViewTextBoxColumn()
  11.         c.HeaderText = "Колонка " & i.ToString()
  12.         DataGridView1.Columns.Add(c)
  13.       Next
  14.     End If
  15.     Dim r As New DataGridViewRow()
  16.     For i As Integer = 0 To DR.FieldCount - 1
  17.       Dim cel As New DataGridViewTextBoxCell()
  18.       cel.Value = DR(i)
  19.       r.Cells.Add(cel)
  20.     Next
  21.     DataGridView1.Rows.Add(r)
  22.     Application.DoEvents() 'чтоб не зависнуть
  23.   Loop
  24. End Using
Все сказанное админом – истина и обсуждению не подлежит, даже если истина таковой не является.
Кнопки VBNet.Su  ·  Утилиты  ·  Home Page  ·  Kbyte.Ru
--
Не забываем ставить фастаны (быстрые ответы) ;-)

..и было сказано:
Я злостный флудер: vvivan
Страницы:    < назад    ·    вперед >
1 · 2
Зарегистрируйтесь, чтобы иметь возможность участвовать в жизни форума.