Глюк при построчном чтении MSFlexGrid

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 04.05.2011 (Ср) 9:25

Есть объект MSFlexGrid. В него из базы добавлены 45 строк. Я пытаюсь считать их построчно. Делаю так:

Код: Выделить всё
    For i = 0 To 44
   
        form_DB.MSFlexGrid.Row = i
        form_DB.MSFlexGrid.Col = 1
        MsgBox form_DB.MSFlexGrid.Text

    Next i



после i = 30, начинает твориться мистика. После 30-ой строчки читается 32, затем 35, затем 39 и 44, после чего вываливается ошибка 'Invalid row number'

Вопрос, где я мог накосячить? Почему в цикле пропускаются строчки. Смотрю по циклу, значения переменной i идут по порядку.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Глюк при построчном чтении MSFlexGrid

Сообщение alibek » 04.05.2011 (Ср) 9:41

Насколько я помню, в FlexGrid есть свойство (или метод) TextMatrix.
Почему бы не использовать его?
Lasciate ogni speranza, voi ch'entrate.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 04.05.2011 (Ср) 9:53

Ошибаетесь, у FlexGrid нет такого метода. TextMatrix есть у MSFlexGrid, а у меня просто, FlexGrid

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Глюк при построчном чтении MSFlexGrid

Сообщение iGrok » 04.05.2011 (Ср) 16:23

kuhtiov писал(а):TextMatrix есть у MSFlexGrid, а у меня просто, FlexGrid


kuhtiov писал(а):Есть объект MSFlexGrid...


:roll:
label:
cli
jmp label

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 05.05.2011 (Чт) 5:33

Блииин, прошу прощения. Код такой
Код: Выделить всё
    For i = 0 To 44
   
        form_DB.FlexGrid.Row = i
        form_DB.FlexGrid.Col = 1
        MsgBox form_DB.FlexGrid.Text

    Next i


Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк при построчном чтении MSFlexGrid

Сообщение Хакер » 05.05.2011 (Чт) 9:33

Сделай проект, настолько минимальный, что нет ничего лишнего, но в котором ещё наблюдается этот момент. Выложи. Подожди овтета.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 05.05.2011 (Чт) 9:43

Код: Выделить всё
Private Sub mnu_Employees_Click()
   
    Dim ReadingListEmployees As New Reading_DB  ' Обращаемся к форме Reading_DB
   
        ' Смотрим кол-во строк в таблице
        SELECT_DB_ERR = ReadingListEmployees.SELECT_DB("SELECT COUNT(*) FROM TRZ_VIPS")  ' Открываем таблицу сотрудников (TRZ_VIPS)
           
            ' Проверяем, нет ли ошибок в запросе
              If SELECT_DB_ERR = "-2147217865" Then MsgBox "Ошибка SQL"
     
        ' Извлекаем из form_DB значение 0-й строчки, 0-го столбца (это и есть кол-во строк)
       
    form_DB.grdResult.Row = 0
    form_DB.grdResult.Col = 0
    DB_Row = form_DB.grdResult.Text ' Количество строк
   
    Employees.TableEmployees.Rows = (form_DB.grdResult.Text + 1)
    Employees.Visible = True

       
        ' Забираем строки из таблицы
        SELECT_DB_ERR = ReadingListEmployees.SELECT_DB("SELECT * FROM TRZ_VIPS")  ' Открываем таблицу сотрудников (TRZ_VIPS)
            ' Проверяем, нет ли ошибок в запросе
              If SELECT_DB_ERR = "-2147217865" Then MsgBox "Ошибка SQL"
   
    For i = 0 To 45
   
        form_DB.grdResult.Row = i
        form_DB.grdResult.Col = 1

    Next i

End Sub


Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк при построчном чтении MSFlexGrid

Сообщение Хакер » 05.05.2011 (Чт) 9:45

Хакер писал(а):Сделай проект, настолько минимальный, что нет ничего лишнего, но в котором ещё наблюдается этот момент. Выложи. Подожди овтета.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 05.05.2011 (Чт) 10:51

Файлы базы должны лежать в папке C:\Temp\DATA (или поменяйте путь к базе в проекте)
Для работы проекта возможно потребуется установить Borland Database Engine (дистриб приложить не могу, форум не пропускает. Если будет необходимость, могу выложить на FTP)
Вложения
for_db.7z
Проект
(7.69 Кб) Скачиваний: 66
Temp.7z
База
(93.27 Кб) Скачиваний: 54

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк при построчном чтении MSFlexGrid

Сообщение Хакер » 05.05.2011 (Чт) 10:52

Ты явно плохо понял подчеркнутую часть.
Хакер писал(а):Сделай проект, настолько минимальный, что нет ничего лишнего, но в котором ещё наблюдается этот момент.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 05.05.2011 (Чт) 10:58

Это минимум. Без этого всего этого проблему не выявить

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 05.05.2011 (Чт) 11:02

Да, чтобы вызвать ошибку нужно зайти в Справочники > Сотрудники

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк при построчном чтении MSFlexGrid

Сообщение Хакер » 05.05.2011 (Чт) 11:03

Вот значит сам рабой над этим. Отрезай всё лишнее. Если глюк исчезнет, а FlexGrid останется, значит у тебя ошибка в твоём коде. Если останется только FlexGrid, но и глюк, добро пожаловать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 05.05.2011 (Чт) 11:13

Дык там из кода только:

kuhtiov писал(а):
Код: Выделить всё
Private Sub mnu_Employees_Click()
   
    Dim ReadingListEmployees As New Reading_DB  ' Обращаемся к форме Reading_DB
   
        ' Смотрим кол-во строк в таблице
        SELECT_DB_ERR = ReadingListEmployees.SELECT_DB("SELECT COUNT(*) FROM TRZ_VIPS")  ' Открываем таблицу сотрудников (TRZ_VIPS)
           
            ' Проверяем, нет ли ошибок в запросе
              If SELECT_DB_ERR = "-2147217865" Then MsgBox "Ошибка SQL"
     
        ' Извлекаем из form_DB значение 0-й строчки, 0-го столбца (это и есть кол-во строк)
       
    form_DB.grdResult.Row = 0
    form_DB.grdResult.Col = 0
    DB_Row = form_DB.grdResult.Text ' Количество строк
   
    Employees.TableEmployees.Rows = (form_DB.grdResult.Text + 1)
    Employees.Visible = True

       
        ' Забираем строки из таблицы
        SELECT_DB_ERR = ReadingListEmployees.SELECT_DB("SELECT * FROM TRZ_VIPS")  ' Открываем таблицу сотрудников (TRZ_VIPS)
            ' Проверяем, нет ли ошибок в запросе
              If SELECT_DB_ERR = "-2147217865" Then MsgBox "Ошибка SQL"
   
    For i = 0 To 45
   
        form_DB.grdResult.Row = i
        form_DB.grdResult.Col = 1

    Next i

End Sub


Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк при построчном чтении MSFlexGrid

Сообщение Хакер » 05.05.2011 (Чт) 11:24

Стоит глазам только запнуться о SQL-запрос, как дальнейшее чтение останавливается и возникает вопрос: почему его не выкинули? Если без него глюка нет — пусть ищет причину в нём. Если без него глюк есть — пусть отсекает.

Даже если причина легко устранима и с ним, мы тут лентяи, и не хотим смотреть ничего лишнего. Я лентяй, по крайней мере.

Так что rolling back to waiting state.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 05.05.2011 (Чт) 12:12

Хакер писал(а):Стоит глазам только запнуться о SQL-запрос, как дальнейшее чтение останавливается и возникает вопрос: почему его не выкинули?

Потому что именно этот запрос возвращает все данные в таблицу. Без него, таблица будет пуста. Или вы предлагаете заполнить мне ее вручную? Мне та не сложно, только смысл? Я не вижу никаких операций, которые заставили бы чью нить лень биться в истерике. Я тоже ленив! Но набрался сил и запаковал проект и базу :) . Даже небольшое описание сделал :D .
Хакер, ты наверное про себя подумаешь, а не охерел ли этот этот тип :shock: ? Скажу сразу, нет, т.к. скачать 2 файла и распаковать, не очень сложно. Я понимаю что нужно это мне, и вам это не нужно, но ведь один файл с проектом вы бы слили, а тут на один файл больше. Если все равно лень качать, давайте заполню таблицу и выложу без базы, ок?

Так что continue... :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк при построчном чтении MSFlexGrid

Сообщение Хакер » 05.05.2011 (Чт) 12:14

kuhtiov писал(а):Или вы предлагаете заполнить мне ее вручную?

Вот именно, а то ещё BDE ради такой мелочи ставить.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 05.05.2011 (Чт) 12:53

Я вообще не то несу. я использовал DataGrid, а не FlexGrid в связи с чем вопрос, как ее заполнить?

P.S. Не спрашивайте откуда я взял FlexGrid

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Re: Глюк при построчном чтении MSFlexGrid

Сообщение SergT » 05.05.2011 (Чт) 18:02

Честно говоря, не очень я понял... :roll:

For i = 0 To 45
на 34 строке выдает Invalid row number (неверная строка). Такой строки НЕТ.
Как в этом гриде задают кол-во строк, я не нашел.
form_DB.grdResult.VisibleRows дает 30. Вроде не то. Может взять другой грид или ListView?

PS:
Посмотрел предыдущий пост, вот
http://support.microsoft.com/kb/230126 (по поводу Paradox)
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 05.05.2011 (Чт) 18:24

Если в цикле сделать вывод содержимого ячейки например в MSGbox, будет явно видно, что строка есть, но vb ее пропускает. Хрень какая-то. Другой гид брать не пробовал. Мне пока этот глюк интересен. Работать та все должно. Самое интересное, что если я явно указываю номер строки в таблице (например 31), мне возвращается значение 31-ой строки. Но если я действую через переменную, начинается мистика.

P.S. Посмотрел пост мелкософтовский. На сколько я понял, у меня траблы не с парадоксом, а непосредственно с контролом. Если на форме сделать Visable=True, будет видно, что в таблице присутствуют все строки из базы.

SergT
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 237
Зарегистрирован: 22.06.2005 (Ср) 21:50
Откуда: Москва

Re: Глюк при построчном чтении MSFlexGrid

Сообщение SergT » 05.05.2011 (Чт) 18:58

Короче, тут надо искать:
form_DB.grdResult.VisibleRows или тут
form_DB.grdResult.DataBindings

У меня стало выдавать form_DB.grdResult.VisibleRows = 43 и ошибка терперь возникает на 44 строке.
Я с этим гридом
http://msdn.microsoft.com/en-us/library ... ac(v=vs.80).aspx
никогда не имел дело и не собираюсь в дальнейшем. Так что, видимо, тебе в поиск...
Л. Толстой, «зачем обдумывать обдуманное, бери готовое и иди дальше, в этом сила человечества»
"Всё в наших руках, поэтому их нельзя опускать" (Коко Шанель)

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 06.05.2011 (Пт) 5:10

Блин, еще и у каждого на разной строчке спотыкается. Вообще весело

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Глюк при построчном чтении MSFlexGrid

Сообщение kuhtiov » 06.05.2011 (Пт) 19:30

Товарищи, я выявил закономерность, но не могу понять как фиксить. Дело в том, что при открытии формы с таблицей DataGrid, высота самой DataGrid такая, что влазит несколько строк (в моем случаи было 4 строки). Так вот, все что идет до визуального окончания таблицы, перебирается нормально, но как только цикл переходит на строки DataGrid вне видимости, начинаются скачки через строки. Попробовал растянуть таблицу на всю форму и форму сделать во весь экран, все прекрасно заработало. Все бы ничего, но строк ведь может быть и 100 и 200 и 1000, и их невозможно все поместить на один экран (да и зачем это нужно?). Вообщем, вопрос, почему контрол DataGrid так реагирует на "невидимые строчки таблицы" и как пофиксить? Есть предположения? Согласен на любой изврат (в пределах разумного)


P.S. Для тех, кто столкнется с такой проблемой, самое лучшее, выкинуть фтопку DataGrid и заменить его на MSHFlexGrid


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 17

    TopList