powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
7 сообщений из 7, страница 1 из 1
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
    #34786368
spmn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени!
Возможно ветку выбрал не совсем точно, но все же.
У меня есть на форме грид, из набора EHLib.
В нем отображаются данные из DataSource (стандартный), который ссылается на TOracleDataSet (из набора компонент DAO).
При открытии TOracleDataSet посылает запрос в базу в виде: "SELECT a.*, a.rowid FROM TABLENAME".
Таким образом, при помощи rowid, OracleDataSet становится редактируемым и мы можем изменять данные в DBGridEh.

Например, у меня есть кнопка Button1 в обработчике которой указано:

void __fastcall TEUForm::Button1Click(TObject *Sender) {
OracleDataSet->Append();
}

То же действие выполняется при нажатии кнопки Ins на DBGridEh:

void __fastcall TEUForm::DBGridEhKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift) {
if (Key = 45) {
OracleDataSet->Append();
}
}

Вопрос:
Почему в первом случае запись добавляется в конец грида, как и положено. А во втором случае в то место где находится курсор (фактически выполняется Insert()) ?
...
Рейтинг: 0 / 0
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
    #34786862
SnowMan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть причина в том, что вместо

if (Key = 45) {

надо писать:

if (Key == 45) {

т.е. двоить равно.
...
Рейтинг: 0 / 0
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
    #34787001
Alex_Toms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При добавлении записи, в таблице она всегда "становится" последней. А вот как они отображается в гриде, это особенности работы грида, точнее сказать то, что он в датасет записи добавляет разными способами.

Удачи.
...
Рейтинг: 0 / 0
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
    #34787028
spmn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про ординарное равно, это конечно же опечатка.

То что это именно грид показывает запись, как после инсерта, я понимаю :) вот только как это победить?
...
Рейтинг: 0 / 0
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
    #34788033
Alex_Toms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если необходимо чтобы всегда была последней после добавления, то самое надёжное, Query->Close(); Query->Open(); Query->Last(); Если есть порядок сортировки и новая запись после открытия запроса будет не последней в гриде, то сначала перед Query->Close(); запомнить ID новой записи, а после Query->Open(); использовать метод Query->Lastrec. Проверено неоднократно, работает надёжно.
Как замечание, запрос должен выполниться быстро и возвращать минимум записей, дабы как можно меньше нагружать сервер.

И ещё как вариант, в месте перед добавлением записи устанавливать указатель на последнюю запись. Примерно так:
if (Key == 45)
{
OracleDataSet->Last();
OracleDataSet->Append();
}

Либо вызывать метод OracleDataSet->Last(), в событии для OracleDataSet, BeforeInsert.

Удачи.
...
Рейтинг: 0 / 0
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
    #34789795
spmn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про первый метод. Не совсем понятно зачем запоминать ID записи? И у OracleDataSet не метода Lastrec :(

По вторым 2м методам. Работают они крайне странно. При использовании их запись добавляется предпоследней! Как сделать чтоб последней была???
...
Рейтинг: 0 / 0
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
    #34790458
Alex_Toms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lastrec это опечатка, конечно Last().

После закрытия и открытия запроса, теряется положение курсора на добавленной записи. ID записи необходим, чтобы установить курсор на эту запись после открытия запроса. Если запись после открытия запроса последняя, то в этом нет необходимости, достаточно Last().

EHLib не использую, попробовать не могу.
Есть не плохой форум, http://borland.xportal.ru/forum/index.php, может быть там помогут.
Или обратится к разработчику.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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