Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Работа с MSFlexGrid


Автор: Leska 17.3.2005, 11:51
Необходимо сделать выборку из БД и результаты вывести в таблицу на форме

Вот это все вроде бы работает правильно
Код

Set Con = New ADODB.Connection
  Con.Open "DRIVER={INTERSOLV InterBase ODBC Driver (*.gdb)};" & _
" UID=...;PWD=...;DB=....", "...", "..."
str = "select NMK_ID, NMK_NOTE, NMK_NAME from NMK"
Dim MyRec As ADODB.Recordset
Set MyRec = New ADODB.Recordset
Set MyRec = Con.Execute(str)
MyRec.MoveFirst
MSFlexGrid1.Cols = 4
MSFlexGrid1.Rows = MyRec.RecordCount + 1
s$ = "<Код|<Название|<Полное название"
MSFlexGrid1.FormatString = s$
x = 0


а вот с этого места почему-то не работает

Код

While Not MyRec.EOF
    MSFlexGrid1.TextMatrix(x, 1) = MyRec.Fields("NMK_ID") 
    MSFlexGrid1.TextMatrix(x, 2) = MyRec.Fields("NMK_NOTE")
    MSFlexGrid1.TextMatrix(x, 3) = MyRec.Fields("NMK_NAME")
    x = x + 1
    MyRec.MoveNext
        Wend



я собственно догадываюсь, что неправильно так писать

Код

  MSFlexGrid1.TextMatrix(x, 1) = MyRec.Fields("NMK_ID") 


но как по-другому я не знаю. Помогите, пожалуйста!

Автор: Flotskiy 17.3.2005, 14:01
Всем добрый вечер!
Leska, я много занимаюсь с БД и в таблицу на форме данные записываю так:
На форму ставлю Data1, DBGrid (или какую другую таблицу). В Properties DBGrid1 указываю
DataSource=Data1
Код формы:
Код

        Option Explicit

Private Sub Form_Load()
Data1.DatabaseName = "C:\Arm\Arm.mdb"
     Data1.RecordSource = "SELECT  * " & _
                                   "FROM Glavnaja  Order BY Family"
    Data1.Refresh

End Sub


Это рабочий код, в запрос вставляй свои данные.
Если будут вопросы - задавай.
Всего доброго.
С уважением

Автор: Leska 17.3.2005, 14:32
Понимаете, дело в том, что мне надо использовать только такой вид подключения в базе
Код

Set Con = New ADODB.Connection
  Con.Open "DRIVER={INTERSOLV InterBase ODBC Driver (*.gdb)};" & _
" UID=...;PWD=...;DB=....", "...", "..."

а вот объект Data мне совсем не нужно использовать.
Код

MSFlexGrid1.TextMatrix(x, 1) = MyRec.Fields("NMK_ID")

MSFlexGrid1.TextMatrix(x, 1) = "Можно ставить только текстовое значение", мне нужна помощь в том, как мне преобразовать или подставить MyRec.Fields("NMK_ID") в ячейку таблицы.

Автор: boevik 17.3.2005, 14:40
Какая ошибка?
И какое значение MyRec.RecordCount ?

Автор: Leska 17.3.2005, 15:33
Ошибка вот тут
MSFlexGrid1.TextMatrix(x, 1) = <Subscript out of range>
а MyRec.RecordCount = 41561

Автор: Exception 17.3.2005, 21:15
Цитата(Leska @ 17.3.2005, 16:33)
MSFlexGrid1.TextMatrix(x, 1) = <Subscript out of range>

Это бывает, когда не существет такой ячейки. Я прав?

Автор: Naghual 18.3.2005, 11:06
У тебя Х, изначально, раен 0!
А в ФлексГриде первый индекс = 1!
Напиши x = 1 (вместо x = 0) и все заработает

Автор: Leska 21.3.2005, 11:03
Поменяла, ошибка все та же.

Автор: boevik 21.3.2005, 11:09
Leska, при х=1?
Можно вместо TextMatrix использовать AddItem:
Код

MSFlexGrid1.Cols = 4
MSFlexGrid1.Rows = 1
s$ = "<Код|<Название|<Полное название"
MSFlexGrid1.FormatString = s$

While Not MyRec.EOF
    s = MyRec.Fields("NMK_ID")  & vbTab & MyRec.Fields("NMK_NOTE") & vbTab & MyRec.Fields("NMK_NAME")
    MSFlexGrid1.AddItem s
    MyRec.MoveNext
Wend

Автор: Leska 21.3.2005, 12:44
boevik, спасибо, вот это сработало. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)