Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как создать таблицу на форме VB? / 25 сообщений из 47, страница 1 из 2
07.01.2011, 16:00
    #37048473
Nekron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Решил написать для своей БД клиент на VB, и сразу столкнулся с проблемой, хочется чтобы данные были представлены в виде таблицы, но не нашел ее на панели инструментов, подскажите как ее создать, и если можно как заполнить ее данными из селекта.
...
Рейтинг: 0 / 0
07.01.2011, 16:06
    #37048479
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Nekron хочется чтобы данные были представлены в виде таблицы, но не нашел ее на панели инструментов
В тулсасах найди компанент грид
Nekron как заполнить ее данными из селекта.
читай про рекордсеты или компонент дата
...
Рейтинг: 0 / 0
07.01.2011, 17:36
    #37048560
Nekron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
А возможно где-то пример клиента найти на VB? Также с использованием грида.
...
Рейтинг: 0 / 0
07.01.2011, 18:47
    #37048622
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Ты либо с Access переходишь, либо студент )
Grid это стандартный контрол в VB он нужен для отображения данных в табличной форме
RecordSet - набор записей из БД, объект который обладает свойствами
Лучше всего самому написать пример
...
Рейтинг: 0 / 0
07.01.2011, 19:02
    #37048631
Nekron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Та студент я да ) К Firebird-базе клиент написать нужно, до этого не приходилось никогда, да про рекордсет я знаю в примерах видел.
Dim rs As recordset
Set rs = db.OpenRecordset ("SELECT * FROM [tblAdres] WHERE [fieldCity] = Владивосток")

ну и как и из него потом данные брать тож есть.

Больше проблемка была, как эти полученные данные в грид заносить, потому и хотелось пример, но вроде уже нашел инфу, В любом случае спасибо за помощь с гридом.
...
Рейтинг: 0 / 0
07.01.2011, 21:26
    #37048741
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
у всех гридов есть стандартное свойство datasource,
set grid.datasource=rs
да почитай еще про объект connection
...
Рейтинг: 0 / 0
07.01.2011, 21:28
    #37048742
bac
bac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Вот тут с помощью msflexgrid реализована корректировка справочника. Строки добавляются в последнюю строку.
Сохранение (обновление) однократно не при изменении, а по команде сохранить.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
Option Explicit

Dim inCol As Integer    ' Текущие редактируемая колонка
Dim inRow As Integer    '         редактируемая строка в таблице
Dim nOperMax As Integer  ' Номер последней операции в БД

'===================================
' Обработчик загрузки формы
Private Sub Form_Load()
    clearGrid       ' Очистить таблицу
    With Me.MSFlexGrid  ' Сформировать "шапку" таблицы
        .Cols =  2 
        .Row =  0 
        .Col =  1 
        .Text = "Наименование"
        .Row =  1 
    End With
    
    Dim rs As rdoResultset
    Dim i As Integer
    Dim SQL As String
    
    SQL = "SELECT * FROM Oper ORDER BY OperId"
    Set rs = dbCn.OpenResultset(SQL)
    
    i =  1 
    With Me.MSFlexGrid
        Do While Not rs.EOF
            .Row = i
            .Col =  0 
            .Text = rs!operId
            nOperMax = i -  1 
            .Col =  1 
            .Text = rs!operName
            rs.MoveNext
            .Rows = .Rows +  1 
            i = i +  1 
        Loop
    End With
    rs.Close
End Sub

'==================================
' Очистка таблицы
Private Sub clearGrid()
    inCol =  0 
    inRow =  0 
    With Me.MSFlexGrid
        .Rows =  1    ' Это нужно чтобы удалить все строки из таблицы
        .Rows =  2    ' А теперь как положено нижняя строка пустая
        .Col =  0 
        .Text =  1 
    End With
    Me.txtCol.Visible = False
 End Sub

'===============================================
' Обработчик изменения размера формы
' Выравнивает размер таблицы и колонок в таблице
Private Sub Form_Resize()
    Dim h As Integer
    Dim w As Integer
    If Me.Height <  820  Or Me.Width <  120  Then Exit Sub
    h = Me.Height -  800      ' Установить размер таблицы во всю форму
    w = Me.Width -  100 
    With Me.MSFlexGrid
        .Height = h
        .Width = w
        .ColWidth( 0 ) =  300 
        w = w -  400 
        If w >  800  Then
            .ColWidth( 1 ) = w   ' Плавающий размер колонки с наименованием 80%
        End If
    End With
End Sub

'===========================================
' Обработчик выбора мышью ячейки в таблице
Private Sub MSFlexGrid_Click()
    Dim c As Integer    ' Номер колонки таблицы
    Dim r As Integer    ' Номер строки в таблице
    With Me.MSFlexGrid
        c = .Col
        r = .Row
        If c <  1  Or r <  1  Then
            Me.txtCol.Visible = False
            .SetFocus
            Exit Sub
        End If
        If Me.txtCol.Visible Then   ' Если поле для ввода уже видимо то сохранить данные в ячейку таблицы
            .Col = inCol
            .Row = inRow
            .Text = Me.txtCol
            .Col = c
            .Row = r
        Else
            Me.txtCol.Visible = True
        End If
        
'  Загрузить в поле для ввода значение из выбранной ячейки
'  и установить размер поля соответствующий выбранной ячейке
        inCol = c
        inRow = r
        Me.txtCol.Text = .Text
        Me.txtCol.Top = .CellTop -  30 
        Me.txtCol.Left = .CellLeft
        Me.txtCol.Width = .CellWidth
        Me.txtCol.Height = .CellHeight
        
        Me.txtCol.SetFocus
    End With
End Sub

'=============================================================
' Обработчик нажатия клавиши в поле ввода для ячейки в таблице
Private Sub txtCol_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then      ' Если нажата кнопка Enter
        If Me.MSFlexGrid.Col =  1  Then   ' Если был ввод в последней колонке
                                        ' Добавить строку
            Me.MSFlexGrid.Rows = Me.MSFlexGrid.Rows +  1 
            Me.MSFlexGrid.Row = Me.MSFlexGrid.Rows -  1 
            Me.MSFlexGrid.Col =  0 
            Me.MSFlexGrid.Text = Me.MSFlexGrid.Row
        
            Me.MSFlexGrid.Col =  1 

            MSFlexGrid_Click
        ElseIf Me.MSFlexGrid.Col >  0  Then  ' Если это не последняя колонка то начать редактировать следующую
            Me.MSFlexGrid.Col = Me.MSFlexGrid.Col +  1 
            MSFlexGrid_Click
        End If
    ElseIf KeyAscii = vbKeyEscape Then   ' Если нажата Esc то прекратить режим корректировки
        Me.txtCol.Visible = False
        Me.MSFlexGrid.SetFocus
    End If
End Sub
'==================================
' Метод сохранения в БД
Public Function Save()
    Dim SQL As String
    Dim i As Integer
    dbCn.BeginTrans
    With Me.MSFlexGrid
        For i =  1  To nOperMax       ' цикл обновления данных
            .row = i
            .col =  1 
            SQL = "UPDATE Oper SET OperName='" & strPrep(.Text) & "' WHERE OperName<>'" & strPrep(.Text) & "'"
            .col =  0 
            SQL = SQL & " AND categoryId=" & .Text
            execSQL (SQL)
        Next
        For i = nOperMax +  1  To .Rows -  2      ' цикл вставки
            .row = i
            .col =  1 
            If Trim(.Text) <> "" Then
                SQL = "INSERT INTO Oper (operName) VALUES('" & strPrep(.Text) & "')"
                execSQL (SQL)
            End If
        Next
    End With
    dbCn.CommitTrans
    loadRef
    Save = True
End Function


...
Рейтинг: 0 / 0
07.01.2011, 21:40
    #37048752
Nekron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Ципихович ЭндрюNekron, вроде уже нашел инфу?? выложите, пжл
http://www.infocity.kiev.ua/prog/basic/content/basic154.phtml
Вот здесь вроде все что нужно описано о MSFlexGrid

TpaBka
Хмм на ваш способ ругается. Пишу:
Код: plaintext
1.
2.
Set rs = cn.execute("select * from GODS")
Set MSFlexGrid1.DataSource = rs 
Выходит ошибка Object variable or With block variable not set.
Я сделал так вместо Set MSFlexGrid1.DataSource = rs

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
j =  10 
Do While Not rs.EOF

   For i =  0  To  7 
   MSFlexGrid1.TextArray(j) = rs(i).Value
   j = j +  1 
   Next i
rs.MoveNext
j = j +  1 
Loop
Таким способом работает. Хотя ваш выглядит проще, хотелось-бы узнать что не так.

bac
За пример премного благодарен ), ознакомлюсь.
...
Рейтинг: 0 / 0
08.01.2011, 02:10
    #37048920
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Nekron Ты наверное уже понял что rs это рекордсет
Теперь осталось объяснить это твоему интерфейсу
Нужно объявить переменную rs как новый объект рекордсет (адо)
При этом не забыть про cn - это как раз и есть объект connection
Пример открытия рекордсета можно прочитать в хелпе ацеса или в msdn
И MSFlexGrid1 для тебя, это наверно не то, попробуй DataGrid1
...
Рейтинг: 0 / 0
08.01.2011, 02:24
    #37048922
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
А кстати Я так думаю что клиент = интерфейс
...
Рейтинг: 0 / 0
08.01.2011, 11:25
    #37048990
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Ципихович Эндрю,

Х.З. может у тебя не установлен VB
...
Рейтинг: 0 / 0
08.01.2011, 15:42
    #37049147
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Ципихович ЭндрюTpaBka, не установлен VB?
VB это что такое VB или VBА??

бугага
если нет VB зачем ты флудиш в этой ветке твоя ветка здесь
MSFlexGrid и РичТексбокс это файлы с расширением ocx проще говоря активикс элементы которые должны быть зарегены в системе.
Короче установи VB и будет тебе счастье
Не знаю у меня всё нормально ставится и в ворд MSFlexGrid и в ексель РичТексбокс
только нах они там нужны?
...
Рейтинг: 0 / 0
08.01.2011, 18:09
    #37049257
Nekron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Сделал я DataGrid, теперь на этот код
Код: plaintext
Set DataGrid1.DataSource = rs
говорит The rowset is not bookmarkable.

Я думал может нужно колонки добавить, в моей таблице там 8 колонок на строку, а тут 2 по умолчанию, но пока не нашел где можно добавить, а может причина и не в этом даже?
...
Рейтинг: 0 / 0
08.01.2011, 19:09
    #37049305
Nekron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
вот полный код может видно будет что не так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub Form_Load()
Dim cn, rs, cmd, i
Set rs = CreateObject("ADODB.RecordSet")
Set cn = CreateObject("ADODB.Connection")

cn.Open "Provider=LCPI.IBProvider.3;" & _
        "Data Source=localhost:c:\1\NEKROBASE.fdb; " & _
        "User Id=SYSDBA;" & _
        "password=masterkey;" & _
        "ctype=win1251;" & _
        "auto_commit=true"

'rs.CursorType = adOpenStatic  - пробовал и с ним и без него и другие какие-то варианты.

Set rs = cn.Execute("select * from GODS")
Set DataGrid1.DataSource = rs
...
Рейтинг: 0 / 0
08.01.2011, 19:47
    #37049349
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Зайди в проект-> сылки и подключи: MicroSoft ActiveX Data Object 2.8 Library

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Dim conn As New ADODB.Connection
SourceBase ="Путь"
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SourceBase & ";Persist Security Info=False"
conn.Open ConnString


Dim rs As New ADODB.Recordset

rs.CursorLocation = adUseClient
rs.CursorType = adOpenDynamic

rs.LockType = adLockOptimistic

sql="Select ...."

rs.Open sql, conn

Set DataGrid1.DataSource = rs
Не уточнял раблтает ли Jet.OLEDB.4.0 с fdb но думаю что таки да
...
Рейтинг: 0 / 0
08.01.2011, 20:00
    #37049363
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
TpaBkaНе уточнял работает ли Jet.OLEDB.4.0 с fdb но думаю что таки да

Человек работает с Firebird, зачем ему JET???
Тем более, у него есть рабочая строка подключения.

Nekron - попробуй установить курсор в adUseClient
...
Рейтинг: 0 / 0
08.01.2011, 20:00
    #37049364
Nekron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Прийдется наверно на флексе писать, находил для даты еще такой вариант

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
rs.CursorType = adOpenKeyset
rs.LockType = adLockBatchOptimistic 
rs.CursorLocation = adUseClient
rs.Source "select * from GODS"
rs.ActiveConnection = cn
rs.Open
Set DataGrid1.DataSource = rs

Но там говорит уже на строке rs.LockType = adLockBatchOptimistic , что неверные аргументы.

Тут уже другой вопрос появился. У меня в базе 6-7 таблиц и я для каждой свой грид создам.
Так вот как я думаю их отображать: Сделать сверху менюшку с названиями таблиц, при выборе которых они будут показываться таким образом:
Все таблицы будут расположены на одном месте, но сделаны Visible=false, и при выборе определенной этот параметр будет становиться True, потом при выборе другой, всем таблицам становиться False и нужная True. Хорошее-ли это решение? Или можете посоветовать как-то лучше, но не сильно сложней.

И еще одно для ввода данных в базу в нижней части расположу текстбоксы, лишние из которых для более мелких таблиц также буду делать невидимыми, и из них брать данные для инсертов. Если это тоже решение нормальное, то мне видиться проблема как подписать что каждый из них означает, наверно будет долговато отмечать все леблый с названиями на невидимость.
...
Рейтинг: 0 / 0
08.01.2011, 20:07
    #37049374
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
NekronПрийдется наверно на флексе писать
Если нужна бОльшая гибкость - то на можно и флексе. Но там много придется писать самому.

NekronНо там говорит уже на строке rs.LockType = adLockBatchOptimistic , что неверные аргументы.
это странно? Библиотека АДО подключена? Можно полный код и текст ошибки?

NekronТак вот как я думаю их отображать: Сделать сверху менюшку с названиями таблиц, при выборе которых они будут показываться таким образом:
Все таблицы будут расположены на одном месте, но сделаны Visible=false
Если не жалко ресурсов и времени на загрузку формы, то используй просто SSTab (закладки) - на надо будет возиться с Visible. То же качается лейблов
...
Рейтинг: 0 / 0
08.01.2011, 20:07
    #37049375
Nekron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Shocker.Pro

Код: plaintext
1.
2.
rs.CursorLocation = adUseClient
Set rs = cn.Execute("select * from GODS")
Set DataGrid1.DataSource = rs

Вот в таком варианте в конце моего полного кода на строке rs.CursorLocation = adUseClient ошибка "Аргументы имеют неверный тип, выходят за пределы, вступают в конфликт"
...
Рейтинг: 0 / 0
08.01.2011, 20:09
    #37049377
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Shocker.Proто используй просто SSTab
компонент Microsoft Tabbed Dialog Control надо подключить
...
Рейтинг: 0 / 0
08.01.2011, 20:11
    #37049380
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
NekronВот в таком варианте в конце моего полного кода на строке rs.CursorLocation = adUseClient ошибка "Аргументы имеют неверный тип, выходят за пределы, вступают в конфликт"
тэкс
1) Option Explicit включен?
2) как объявлен rs?
...
Рейтинг: 0 / 0
08.01.2011, 20:12
    #37049384
Nekron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Shocker.Proэто странно? Библиотека АДО подключена? Можно полный код и текст ошибки?

Ну код я выше приводил. http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid={topic.id}&msg=10042820
Насчет того подключенали вообще-то не могу точно сказать, как мне проверить?
А то что работало с флексом при таком коде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Set rs = cn.Execute("select * from GODS")

j =  10 
Do While Not rs.EOF

   For i =  0  To  7 
   MSFlexGrid1.TextArray(j) = rs(i).Value
   j = j +  1 
   Next i
rs.MoveNext
j = j +  1 
MSFlexGrid1.AddItem ""
Loop
Не говорит о том что подключена?
...
Рейтинг: 0 / 0
08.01.2011, 20:18
    #37049389
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
NekronНасчет того подключенали вообще-то не могу точно сказать, как мне проверить?
Не публикуйте код кусками, делать нам больше нечего его по всему топику собирать, при том, что вы его правите.

Для начала использовать Option Explicit, как я сказал выше, с константами сразу станет все ясно. Объявлять Connection и Recorset как показал Травка, а не через Create Object
...
Рейтинг: 0 / 0
08.01.2011, 20:20
    #37049391
Nekron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
Shocker.Proтэкс
1) Option Explicit включен?
2) как объявлен rs?

Экспликт включил без строки rs.CursorLocation = adUseClient работает(ну точнее ошибка что букмарк не тот как я писал выше) с ней говорит что adUseClient "Variable not defined"

Код: plaintext
1.
Dim cn, rs, cmd, i
Set rs = CreateObject("ADODB.RecordSet")
...
Рейтинг: 0 / 0
08.01.2011, 20:25
    #37049400
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать таблицу на форме VB?
NekronЭкспликт включил без строки rs.CursorLocation = adUseClient работает(ну точнее ошибка что букмарк не тот как я писал выше) с ней говорит что adUseClient "Variable not defined"
Во-о-о-от! У тебя ж этих констант нет - вот ничего и не работает.
Включи Option Explicit и не выключай никогда!!!
Научись пользоваться клавишей F2.

Далее, как сказал Травка - надо подключить Microsoft ActiveX Data Object 2.8 Library

Далее:
Код: plaintext
1.
2.
Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset

Далее пробуй все заново с датагридом, если есть желание.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как создать таблицу на форме VB? / 25 сообщений из 47, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]