|
|
|
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
|
|||
|---|---|---|---|
|
#18+
Доброго времени! Возможно ветку выбрал не совсем точно, но все же. У меня есть на форме грид, из набора 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()) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2007, 04:04 |
|
||
|
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
|
|||
|---|---|---|---|
|
#18+
Может быть причина в том, что вместо if (Key = 45) { надо писать: if (Key == 45) { т.е. двоить равно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2007, 20:18 |
|
||
|
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
|
|||
|---|---|---|---|
|
#18+
При добавлении записи, в таблице она всегда "становится" последней. А вот как они отображается в гриде, это особенности работы грида, точнее сказать то, что он в датасет записи добавляет разными способами. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2007, 00:34 |
|
||
|
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
|
|||
|---|---|---|---|
|
#18+
Про ординарное равно, это конечно же опечатка. То что это именно грид показывает запись, как после инсерта, я понимаю :) вот только как это победить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2007, 01:54 |
|
||
|
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
|
|||
|---|---|---|---|
|
#18+
Если необходимо чтобы всегда была последней после добавления, то самое надёжное, Query->Close(); Query->Open(); Query->Last(); Если есть порядок сортировки и новая запись после открытия запроса будет не последней в гриде, то сначала перед Query->Close(); запомнить ID новой записи, а после Query->Open(); использовать метод Query->Lastrec. Проверено неоднократно, работает надёжно. Как замечание, запрос должен выполниться быстро и возвращать минимум записей, дабы как можно меньше нагружать сервер. И ещё как вариант, в месте перед добавлением записи устанавливать указатель на последнюю запись. Примерно так: if (Key == 45) { OracleDataSet->Last(); OracleDataSet->Append(); } Либо вызывать метод OracleDataSet->Last(), в событии для OracleDataSet, BeforeInsert. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2007, 13:01 |
|
||
|
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
|
|||
|---|---|---|---|
|
#18+
Про первый метод. Не совсем понятно зачем запоминать ID записи? И у OracleDataSet не метода Lastrec :( По вторым 2м методам. Работают они крайне странно. При использовании их запись добавляется предпоследней! Как сделать чтоб последней была??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 02:46 |
|
||
|
Builder 6, DAO, Oracle, DBGridEh, проблемы с добавлением записей в грид
|
|||
|---|---|---|---|
|
#18+
Lastrec это опечатка, конечно Last(). После закрытия и открытия запроса, теряется положение курсора на добавленной записи. ID записи необходим, чтобы установить курсор на эту запись после открытия запроса. Если запись после открытия запроса последняя, то в этом нет необходимости, достаточно Last(). EHLib не использую, попробовать не могу. Есть не плохой форум, http://borland.xportal.ru/forum/index.php, может быть там помогут. Или обратится к разработчику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 11:14 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=157&tid=1345850]: |
0ms |
get settings: |
12ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
195ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 253ms |
| total: | 567ms |

| 0 / 0 |
