VB6. Проблема ввода данных в DataGrid

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kpblc
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 05.05.2006 (Пт) 15:42
Откуда: С.-Петербург

VB6. Проблема ввода данных в DataGrid

Сообщение kpblc » 28.08.2006 (Пн) 15:25

Доброго времени суток, уважаемые.
Собственно проблема в следующем. Через ADO подсоединяюсь к mdb-базе, меняю RecordSource для AdoDC (к нему как раз и привязан DataGrid). Этот момент проходит нормально.
В таблице несколько полей NOT NULL; таблица пока пустая полностью.
Перед отображением DataGrid в нем меняются заголовки столбцов и устанавливается ширина = 0 для столбца счетчика (от этого, мягко говоря, отказываться не хочется совершенно).
Захожу в редактирование DataGrid, пробую ввести любое значение - и все, сообщение "Microsoft DataGrid Control": "The current row is not available"
При этом если напрямую в Access вбить данные, то дальнейшее редактирование данных через приложение уже идет без вопросов.
Попробовал прописать в DataGrid_Error следующее:
Код: Выделить всё
Debug.Print Error(DataError)

Выдало:
Код: Выделить всё
Application-defined or object-defined error

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

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.08.2006 (Пн) 15:31

Service Pack 6 поставил?
Курсор в рекордсете какой?
Режим открытия какой?
Зачем вообще отображать в гриде колонку счётчика?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kpblc
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 05.05.2006 (Пт) 15:42
Откуда: С.-Петербург

Сообщение kpblc » 28.08.2006 (Пн) 15:40

ServicePack 6 стоит.
Курсор - серверный, я полагаю (я не устанавливал его свойство). Какое надо установить?
Режим открытия - обычный, не ReadOnly (по крайней мере не устанавливал). На той же таблице стоит в Access'e вколотить любые значения - и данные можно свободно добавлять.
ID я и не хочу отображать, просто мало ли, имеет значение ширина столбца - сказал поскольку я далеко не профи.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.08.2006 (Пн) 15:47

Хорошо.
А для DataGrid нужен только клиентский.
Нет такого режима - "обычный".
Если не хочешь, надо вообще исключить его из списка отображаемых, а не ствить в 0, ибо растянут и увидят.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kpblc
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 05.05.2006 (Пт) 15:42
Откуда: С.-Петербург

Сообщение kpblc » 28.08.2006 (Пн) 15:52

Понял, спасибо. Сейчас попробую.
А вот насчет режима открытия просветите, если не трудно. Примерно представлять - это одно, а получить четкое описание - совершенно другое.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.08.2006 (Пн) 16:32

readonly, static, keyset, dynamic.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kpblc
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 05.05.2006 (Пт) 15:42
Откуда: С.-Петербург

Сообщение kpblc » 29.08.2006 (Вт) 10:38

И все же я не смог победить :(
Я правильно понял, что режим открытия надо устанавливать в Adodc? Я там поставил (в design-режиме; в runtime не меняется) CommandType = acCmdTable; CursorLocation = adUseClient; CursorType = adOpenDynamic. Изменение CursorType на остальные значения (KeySet, Static) эффекта никакого не дает. Что я еще упускаю?
---
Добавлено:
Не уверен, что это правильно, но вроде как пока работает - в свойствах AdoDC установил EOFAction = adDoAddNew (изначально стояла MoveLast). Интересно, тут еще какие-нибудь камешки кроются?

Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

Сообщение Summer.05 » 29.08.2006 (Вт) 21:45

kpblc
Попробуй сам прочитать на форуме все, что есть про ADO.
Я уже прошел этот путь и он оказался весьма полезным.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.08.2006 (Вт) 22:13

kpblc
Если честно, я не использую ADODC, ибо лажа. ADODB лучше...
Кроме того, некоторые баги в датагриде действительно присутствуют.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 29.08.2006 (Вт) 22:38

Насчет ADODB полностью согласет с GSerg'eм.
Но в данном случае все должно работать и с компонентом ADODC. kpblc, возожно ты накрутил чего-то лишнего в свойствах или в ConnectionString. Попробуй создать чистый проект, помести туда ADODC, DataGrid и создай подключение к тестовой базе. Так тебе легче будет выявить причину странного поведения.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

Сообщение Summer.05 » 30.08.2006 (Ср) 8:03

GSerg
Не просветишь, Шаман, в чем плюсы ADODB и в чем разница с ADODC?
Усли ADODC работает с DataGrid, то с чем работает ADODB?
Или вопрос не корректный?

kpblc
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 05.05.2006 (Пт) 15:42
Откуда: С.-Петербург

Сообщение kpblc » 30.08.2006 (Ср) 8:10

> Summer.05 : Я честно попробовал поиском (и здесь, и на MDSN, и по справке), но эффекта сначала было нуль. Почему и обратился. Сейчас ищу дальше.
> GSerg : Я понимаю, что я ничего не понимаю. AdoDC - это контрол, а AdoDB - это хто? Я в коде определяю Set rs = New ADODB.Recordset - ты не про это?
> VVitafresh : Спасибо, попробую.

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

Сообщение alibek » 30.08.2006 (Ср) 8:28

ADODB -- это библиотека ADO. А ADODC -- это кривой контрол, который работает через ADODB.

kpblc, rs это именно то. Вот полученный rs и задавай, как DataSource для грида.
Lasciate ogni speranza, voi ch'entrate.

kpblc
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 05.05.2006 (Пт) 15:42
Откуда: С.-Петербург

Сообщение kpblc » 30.08.2006 (Ср) 9:19

> alibek : А... Э... Нда, как-то не додумался, что можно RecordSource для DataGrid'a ставить не контрол... Спасибо, проверю :)

Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

Сообщение Summer.05 » 30.08.2006 (Ср) 11:46

alibek

А не кривой контрол для работы через ADODB существует? Или сразу библиотеку подключать без этого контрола?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 30.08.2006 (Ср) 12:22

именно так, сразу библиотеку :)

Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

Сообщение Summer.05 » 30.08.2006 (Ср) 14:58

Konst_One
Понял, спасибо!


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

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

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

    TopList