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

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

Больше проблемка была, как эти полученные данные в грид заносить, потому и хотелось пример, но вроде уже нашел инфу, В любом случае спасибо за помощь с гридом.
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37048741
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у всех гридов есть стандартное свойство datasource,
set grid.datasource=rs
да почитай еще про объект connection
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37048742
bac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут с помощью 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
Как создать таблицу на форме VB?
    #37048752
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю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
Как создать таблицу на форме VB?
    #37048920
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nekron Ты наверное уже понял что rs это рекордсет
Теперь осталось объяснить это твоему интерфейсу
Нужно объявить переменную rs как новый объект рекордсет (адо)
При этом не забыть про cn - это как раз и есть объект connection
Пример открытия рекордсета можно прочитать в хелпе ацеса или в msdn
И MSFlexGrid1 для тебя, это наверно не то, попробуй DataGrid1
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37048922
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кстати Я так думаю что клиент = интерфейс
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37048990
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

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

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

Я думал может нужно колонки добавить, в моей таблице там 8 колонок на строку, а тут 2 по умолчанию, но пока не нашел где можно добавить, а может причина и не в этом даже?
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049305
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот полный код может видно будет что не так
Код: 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
Как создать таблицу на форме VB?
    #37049349
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайди в проект-> сылки и подключи: 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
Как создать таблицу на форме VB?
    #37049363
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBkaНе уточнял работает ли Jet.OLEDB.4.0 с fdb но думаю что таки да

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

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

Код: 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
Как создать таблицу на форме VB?
    #37049374
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekronПрийдется наверно на флексе писать
Если нужна бОльшая гибкость - то на можно и флексе. Но там много придется писать самому.

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

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

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

Вот в таком варианте в конце моего полного кода на строке rs.CursorLocation = adUseClient ошибка "Аргументы имеют неверный тип, выходят за пределы, вступают в конфликт"
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049377
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proто используй просто SSTab
компонент Microsoft Tabbed Dialog Control надо подключить
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049380
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekronВот в таком варианте в конце моего полного кода на строке rs.CursorLocation = adUseClient ошибка "Аргументы имеют неверный тип, выходят за пределы, вступают в конфликт"
тэкс
1) Option Explicit включен?
2) как объявлен rs?
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049384
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как создать таблицу на форме VB?
    #37049389
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekronНасчет того подключенали вообще-то не могу точно сказать, как мне проверить?
Не публикуйте код кусками, делать нам больше нечего его по всему топику собирать, при том, что вы его правите.

Для начала использовать Option Explicit, как я сказал выше, с константами сразу станет все ясно. Объявлять Connection и Recorset как показал Травка, а не через Create Object
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049391
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как создать таблицу на форме VB?
    #37049400
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
25 сообщений из 47, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как создать таблицу на форме VB?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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