powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как создать таблицу на форме VB?
47 сообщений из 47, показаны все 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
Как создать таблицу на форме VB?
    #37049402
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
Dim rs As New ADODB.Recordset
Ну на такое ошибку выводит "User-defined type not defined"

ну а полный код на данный момент

Код: 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.
Option Explicit
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.CursorLocation = adUseClient
Set rs = cn.Execute("select * from GODS")
Set DataGrid1.DataSource = rs

'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

End Sub
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049405
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekronНу на такое ошибку выводит "User-defined type not defined"
Ну так правильно выводит - надо подключить библиотеку ADO
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049411
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во теперь работает Датагрид, спасибо. Гораздо удобей чем для флекса цикл писать. )
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049485
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хмм, еще вопрос появился. Я так понял DataGrid-ы постоянно обновляются в зависимости от текущей информации в рекордсете? Так значит для других таблиц нужно создавать другие рекордсеты? или есть другое решение с одним рекордсетом? К томуже после создания более одного рекордсета они перестали работать. Если имеет значение то таблицы расположены на SSTab-е как вы посоветовали.
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049493
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekronТак значит для других таблиц нужно создавать другие рекордсеты?
После того, как ты присвоил свойству Recordset грида текущий рекордсет - можешь его закрыть и создать в этой же переменной другой рекордсет. Тот останется в гриде, пока не уничтожишь или не закроешь форму.
NekronК томуже после создания более одного рекордсета они перестали работать. надо выпрямить руки или код. Кода не вижу, рук тоже.
NekronЕсли имеет значение то таблицы расположены на SSTab-е как вы посоветовали.Не имеет. SSTab фактически контейнер для контролов, который управляет только их видимостью.


ЗЫ: называй грид гридом, а не таблицей, а то путаница будет с таблицей БД
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049506
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эмм ну вот так сделал
Код: 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.
Option Explicit

Private Sub Form_Load()

Dim cmd, i
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

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

rs.CursorLocation = adUseClient
rs.CursorType = adOpenDynamic
rs.LockType = adLockOptimistic

rs.Open "select * from GODS", cn
Set DataGrid1.DataSource = rs
rs.Close
rs.Open "select * from POST", cn
Set DataGrid2.DataSource = rs
В результате во 2ом гриде нужные данные, а первый пустой. Еслиже убрать эту часть

Код: plaintext
1.
2.
rs.Close
rs.Open "select * from POST", cn
Set DataGrid2.DataSource = rs
то в первом гриде нужные данные есть, ну а после добавления rs.Close он пустой.

А дополнительные рекордсеты я разобрался почему мешали работать я делал так
Код: plaintext
Dim rs,rs1 As New ADODB.Recordset
А нужно было так
Код: plaintext
Dim rs As New ADODB.Recordset,rs1 As New ADODB.Recordset
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049512
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо
Код: plaintext
rs.Close

в данном случае надо
Код: plaintext
Set rs.Nothing
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049513
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proв данном случае надо
Код: plaintext
Set rs.Nothing

ой
Код: plaintext
Set rs = Nothing
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049524
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, можно вообще обойтись без rs
достаточно сделать так:
Код: plaintext
DataGrid1.DataSource.Open "select * from GODS", cn,  adOpenDynamic, adLockOptimistic
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049529
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, выглядит проще, но
Код: plaintext
.Open
Ошибка "Method or data member not found"
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049539
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekronСпасибо, выглядит проще, но
Код: plaintext
.Open
Ошибка "Method or data member not found"
Гм, я думал, DataSource это и есть Recordset, ща покопался - ан нет

Через Nothing работает?
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049543
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да через него нормально, спасибо ).
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049550
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ооо я смотрю если изменять данные в гриде, то оно само передает изменения в базу и комитит ) намного упрощает мою работу, не нужно создавать всякие кнопки особо по апдейту. А не подскажете сразу есть-ли команды создания и удаления новых строк в гриде? Или это уже только командами в БД передавать отдельно?
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049556
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekronОоо я смотрю если изменять данные в гриде, то оно само передает изменения в базу и комитит ) намного упрощает мою работу, не нужно создавать всякие кнопки особо по апдейту. А не подскажете сразу есть-ли команды создания и удаления новых строк в гриде? Или это уже только командами в БД передавать отдельно?

Через рекордсет. .AddNew, .Delete

Наверное прокатит и через DataGrid1.DataSource.AddNew, если не прокатит, придется оставлять rs не закрывая и наплодить их для каждого грида.

При изменении рекордсета возможно датагриду потребуется рефреш
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049567
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
DataGrid1.DataSource.AddNew
Увы не пашет ( .AddNew .Delete таже ошибка что и при .Open
ну а через рекорд нормально.
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049576
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А нашел способ проще, у грида есть свойство такое даже AllowDelete ,AllowInsert и AllowUpdate. Просто поставить где надо True где не надо False.
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049581
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekronА нашел способ проще, у грида есть свойство такое даже AllowDelete ,AllowInsert и AllowUpdate. Просто поставить где надо True где не надо False.Так то ж разрешение ПОЛЬЗОВАТЕЛЮ это делать. А ты спрашивал
Nekronесть-ли команды создания и удаления новых строк в гриде?
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049595
Nekron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А извините ошибся, и напоследок можете подсказать будетли работать exe файл под виндовс без установленных компонентов для VB и под линуксом?
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049600
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не будет * 2
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049604
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее так - виртуальная машина VB есть в виндах, начиная с XP, ADO тоже, а вот всяких контролов может не оказаться
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37049614
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю насчет добавления обновления и удаления записей
Так вот не забывай, что если БД многопользовательская и нужно видеть обновления остальных юзеров, а и иногда и свои (если в запросе имеются вычисляемые поля), то нужно пересоздавать рекордсет его можно либо закрыть и заново открыть либо использовать свойство рекордсета Requery
Так вот добавление или удаления записей в БД, Я, например, делаю ч/з SQL запрос (хотя иногда можно и rs.Add u rs.Del):
Код: plaintext
1.
2.
SQL=”INSERT……….”
cn.Execute SQL
rs. Requery 
Обновление рекордсета можно делать ещё так:
где у Тебя идет процедура создания, и присвоение гриду рекордсета в событии Load, вынеси эту процедуру в отдельную функцию её можно даже сделать параметрической и вызывай себе в любой момент.
Рекордсет объяви в модуле или хотя бы на уровне формы (т.е. сделай его public-не забывай закрывать рекордсет при выгрузке)
...
Рейтинг: 0 / 0
Как создать таблицу на форме VB?
    #37083851
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekronА не подскажете сразу есть-ли команды создания и удаления новых строк в гриде ? Или это уже только командами в БД передавать отдельно?
При использовании ClientCursor - эти запросы генерируются сервисными компонентами. Хотя я вот смотрю в документацию по ADODB 2.8 - у Recordset есть свойства InsertCommand/UpdateCommand/DeleteCommand, через которые эти запросы можно настраивать.

При использовании ServerCursor, IBProvider сам сгенерирует запросы для добавления/удаления/обновления.

Однако вы можете задать их явно через свойства ADODB.Command/ADODB.Recordset - insert_sql , delete_sql , update_sql . Пример можно посмотреть здесь

До версии IBProvider 3.5, автоматическая генерация запросов для обновления поддерживается только для запроса "select * from my_table". Начиная с 3.5 - запросы могут содержать WHERE/PLAN/ORDER BY/FOR UPDATE/ROWS и списки конкрентных колонок. Главное, чтобы результирующее множество содержало колонки первичного ключа таблицы.

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


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