greyich |
Отправлено: 01.08.2005, 17:27 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
генерю запрос динамически, к тому же основанный на прендставлении другими словами данные возвращаемый запросом нельзя редактировать напрямую (даже непосредственно в копии запроса на сервере).
возвращаемые записи хранятся в adoquery (либо adostoredproc) n отображаются в DBGridEh.
Вопрос: как сделать видимость редактирования? каждую ячейку МОЖНО отредактировать (всегда уникально определяется принадлежащая ей запись), но как сделать так чтобы пользователь мог редактировать непосредственно в гриде?
|
|
Guest |
Отправлено: 01.08.2005, 17:41 |
|
Не зарегистрирован
|
Вариант — перехватывать post, отменять и строить update вручную. |
|
greyich |
Отправлено: 01.08.2005, 17:45 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
тогда можно чуть поподробнее как перехватить пост?z так понимаю что он и не возникает вовсе. моежт edit перехватывать?
|
|
** avtoritet |
Отправлено: 02.08.2005, 00:29 |
|
Не зарегистрирован
|
Object TADOQuery : methods BeforePost(lala), AfterPost(lala); |
|
** avtoritet |
Отправлено: 02.08.2005, 00:30 |
|
Не зарегистрирован
|
Sorry no methods. It is sobytia! How you my enlish? |
|
olegenty |
Отправлено: 02.08.2005, 08:53 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
2 greyich
можно доустановить TMemTableEh из поставки EhLib и прочитать документацию на русском языке (прилагается), как пользоваться связкой
TADOConnection->TADODataDriverEh->TMemTableEh->TDBGridEh
PS: SelectSQL у меня ХП, UpdateSQL — тоже ХП, InsertSQL — опять ХП. и всё замечательно работает.
|
|
greyich |
Отправлено: 02.08.2005, 12:14 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
QUOTE (olegenty @ 02/08/2005, 08:53) | 2 greyich
можно доустановить TMemTableEh из поставки EhLib и прочитать документацию на русском языке (прилагается), как пользоваться связкой
TADOConnection->TADODataDriverEh->TMemTableEh->TDBGridEh
PS: SelectSQL у меня ХП, UpdateSQL — тоже ХП, InsertSQL — опять ХП. и всё замечательно работает. |
пытаюсь установить MemTableEh — компилятор пишет что нет файла bdedatadrivereh.obj — никто не сталкивался с этим?
точнее так:
CODE | [Pascal Error] MemTableEh.pas(160): Undeclared identifier: 'TBMListEh'
[Pascal Error] MemTableEh.pas(163): Method 'GetDataSet' not found in base class
[Pascal Error] MemTableEh.pas(877): Undeclared identifier: 'LinkActive'
[Pascal Error] MemTableEh.pas(1491): Undeclared identifier: 'VariantToRefObject'
[Pascal Error] MemTableEh.pas(1681): Undeclared identifier: 'RefObjectToVariant'
[Pascal Error] MemTableEh.pas(2309): Undeclared identifier: 'Clear'
[Pascal Error] MemTableEh.pas(2897): Undeclared identifier: 'CurrentRowSelected'
[Pascal Error] MemTableEh.pas(2935): Undeclared identifier: 'CurrentRowSelected'
[Pascal Error] MemTableEh.pas(4783): Undeclared identifier: 'RefObjectToVariant'
[Pascal Error] MemTableEh.pas(4788): Undeclared identifier: 'VariantToRefObject'
[Pascal Fatal Error] DataDriverEh.pas(541): Could not compile used unit 'MemTableEh'
[Linker Fatal Error] Fatal: Unable to open file 'BDEDATADRIVEREH.OBJ'
|
Отредактировано greyich — 02/08/2005, 12:33
|
|
greyich |
Отправлено: 02.08.2005, 13:08 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
я может что делаю не так?
создаю папку memtableeh, в неё копирую файлы из папок bc6 и common, далее компилирую. получаю ошибку: нет файла ehlib.inc копирую в папку файл ehlib.inc из оригинальнного пакета ehlib? получаю ошибку что еще нет файлов *.pas, копирую их оттуда же и после этого получаю порцию матюгов:
CODE |
[Linker Error] Unresolved external '__fastcall Ehlibvcl::DataVarCastAsObject(System::Variant&, const System::Variant&)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEDATAEH.OBJ
[Linker Error] Unresolved external '__fastcall Toolctrlseh::TBMListEh::GetCurrentRowSelected()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external 'Toolctrlseh::TBMListEh::' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external '__fastcall Toolctrlseh::TBMListEh::~TBMListEh()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external '__fastcall Toolctrlseh::TBMListEh::Invalidate()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external '__fastcall Toolctrlseh::TBMListEh::RaiseBMListError(const System::AnsiString)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external '__fastcall Toolctrlseh::TBMListEh::SetCurrentRowSelected(bool)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external '__fastcall Toolctrlseh::TBMListEh::StringsChanged(System::TObject *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external '__fastcall Toolctrlseh::TBMListEh::UpdateState()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external '__fastcall Toolctrlseh::TBMListEh::Clear()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external '__fastcall Toolctrlseh::TBMListEh::TBMListEh()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external '__fastcall Toolctrlseh::TBMListEh::LinkActive(bool)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external '__fastcall Ehlibvcl::RefObjectToVariant(System::TObject *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external '__fastcall Ehlibvcl::VariantToRefObject(const System::Variant&)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
[Linker Error] Unresolved external '__fastcall Dbgrideh::TCustomDBGridEh::DrawCellTreeArea(int, int, System::Set<Grids::Grids__3, 0, 2>, const Types::TRect&, bool)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\EHLIBMTE.OBJ
[Linker Error] Unresolved external '__tpdsc__ Toolctrlseh::TBMListEh' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\MEMTABLE\MEMTABLEEH.OBJ
|
что я сделал не так?
не! всё отлично!!! просто билдер глючил не по детски!!! спасибо olegenty!
Отредактировано greyich — 02/08/2005, 17:04
|
|
olegenty |
Отправлено: 03.08.2005, 07:04 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
ты всё делаешь не так. чем компостировать собственный мозг, скопируй всё, относящиеся к TMemTableEh в ту папку, где у тебя болтается основной пакет и исходники основного пакета, либо оставь как есть, но укажи пути на основной пакет...
|
|
greyich |
Отправлено: 03.08.2005, 10:26 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
QUOTE (olegenty @ 03/08/2005, 07:04) | ты всё делаешь не так. чем компостировать собственный мозг, скопируй всё, относящиеся к TMemTableEh в ту папку, где у тебя болтается основной пакет и исходники основного пакета, либо оставь как есть, но укажи пути на основной пакет... |
а если я захочу другой проект создать, туда тоже всё кидать? а пути я прописываю — почему то всё равно не находит
|
|
olegenty |
Отправлено: 03.08.2005, 11:43 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
нет, не в проект, а в проект пакета...
|
|
Guest |
Отправлено: 03.08.2005, 15:45 |
|
Не зарегистрирован
|
2 olegenty:
1) а что такое проект пакета? (чувствую себя полным ламером)
2) а можно пример кода как написать запрос (напрмер для обновления) для компонента TDataDriverEh? если конечно не очень лениво |
|
olegenty |
Отправлено: 03.08.2005, 16:43 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
ты MemTableEhB6.bpk установил? это и есть проект пакета.
примеры запросов? пожалуйста (ты удивишься)
1. SelectSQL (тип запроса cthSelectQuery)
QUOTE |
exec dbo.usps_Unit
:CodeMask,
:DesignMask,
:MaskType
|
2. UpdateSQL (тип запроса cthStoredProc)
3. InsertSQL (тип запроса cthStoredProc)
... (ну и всё остальное такое-же)
|
|
greyich |
Отправлено: 03.08.2005, 17:08 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
1) указывание путей к исходникам мне не помогает — билдер всё равно ничего не видет (он вообще себя както странно ведет) в library прописываю путь к папке с файлами — бесполезно
2) по поводу кода я всё равно ничего не понял. это просто названия хранимых процедур на серваке? (раз стоит exec то подозреваю что sql server). и синтаксиси передачи данных такой же как на сервере? тогда я чтото перестал понимать в эжтой технологии. а что еще надо прописывать руками, кроме запросов на обновление, удаление ии добавление данных?
|
|
olegenty |
Отправлено: 04.08.2005, 08:27 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
в Include за тебя кто путь пропишет (кроме Library)?
ты компоненты установи, и докцию на русском языке прочти, и будет тебе прояснение ))
|
|
greyich |
Отправлено: 04.08.2005, 12:14 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
QUOTE (olegenty @ 04/08/2005, 08:27) | в Include за тебя кто путь пропишет (кроме Library)?
ты компоненты установи, и докцию на русском языке прочти, и будет тебе прояснение )) |
компоненты поставил. в документации не сказано как включать их в проект
вот забавно естьтакой код:
#include "DBGridEh.hpp"
#include
#include
#include
#include
#include "MemTableEh.hpp"
файло DBGridEh.hpp и MemTableEh.hpp находится в одной папке. к ней прописан путь в libary path. и тем не менее dbgrideh видит а memtableeh не видит. нету мне прояснения. повесится что ли?
|
|
olegenty |
Отправлено: 04.08.2005, 12:21 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
а в Include Parh эти пути есть??? при чём тут документация-то, ты что первый раз среду видишь?
|
|
greyich |
Отправлено: 04.08.2005, 13:14 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
QUOTE (olegenty @ 04/08/2005, 12:21) | а в Include Parh эти пути есть??? при чём тут документация-то, ты что первый раз среду видишь? |
нет не первый. так второй-третий
вообщем в include path были прописаны не помогало. вообщем потом глюки вообще страшные начались — bcb.exe вызывал exeption и ругался что он не может найти точку входа (это типа сам в себя войти не может). переустановка вроде помогла.
кстати это нормально что после установки ehlib, при закрытии с++builder начинает выдавать ошибки чтения памяти?
|
|
olegenty |
Отправлено: 04.08.2005, 13:57 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
нет, не нормально.
просто, очень похоже, что-то ты неверно установил. у меня никаких ошибок памяти, и грдик работает в связке с TMemTableEh на ура. например так (все гридо-деревянные контролы — TDBGridEh, все НД — TMemTableEh)
Присоединить изображение
|
|
greyich |
Отправлено: 04.08.2005, 14:35 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
отличная формочка. тока месот за цехом не пропадает попсту?
можно еще вопрос по поводу использования хранимок?
не догнал синтаксис
:CodeMask,
:DesignMask,
:MaskType — что обозначает?
|
|
olegenty |
Отправлено: 04.08.2005, 14:37 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
параметры.
|
|
greyich |
Отправлено: 04.08.2005, 15:21 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
QUOTE (olegenty @ 04/08/2005, 14:37) | параметры. |
ваша лаконичность достойна восточных мудрецов
|
|
olegenty |
Отправлено: 04.08.2005, 16:07 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
не, ну ты опыт написания приложений для работы с БД хоть какой-то имеешь? это же самые азы. так в SQL-запросе определяются параметры, дабы потом заюзать их посредством TParams, либо TParameters.
|
|
greyich |
Отправлено: 04.08.2005, 16:09 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
вопросов .... как у ассемблерщика увидевшего ООП...
1) насколько я понял TAdoDataDriverEh и иже сним — потомки TDataDriverEh, так?
2) где можно найти более подробный хелпер?
3) запрос который я предоставляю через adodataset+datasource+dbgrideh не позволяет в гриде чтолибо редактироовать.
если я нарисую его в TADODataDriverEh.onBuildDataStruct и подключу через полную связку и повешу редактирование в onUpdateRecord будут ли записи в dbgrideh редактируемым?
4) предположим я создал запрос и засунул эту строку в переменную sql_text. далее
ADODataDriverEh1->SelectSQL->Text = sql_text;
MemTableEh1->Active = true;
вопрос что опять не так?
|
|
olegenty |
Отправлено: 04.08.2005, 16:17 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
никаких OnBuildDataStruct не трогай.
чтобы TMemTableEh сделать "живым" — заполни ВСЕ Command
1. SelectCommand
2. InsertCommand
3. UpdateCommand
4. DeleteCommand
и, если нужно,
5. GetRecComand
и будет тебе счастье.
примечание: имена параметров = имена полей.
более подробной справки нет, компоненты только в стадии разработки. но начиная с версии 4 войдут в EhLib, как полноценная её часть. но и без справки вроде легко разобрался, за пару дней.
|
|
greyich |
Отправлено: 04.08.2005, 16:36 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
Ура!!!! работает!!! olegenty!! сэр! я восхищен Вами...
вообщем если бы ты был в москве — я бы счел непременно своим долгом угостить чем-нибудь (например пивом)
я счаз поиграюсь с ним, если потом будет парочка вопросов, можно?...
|
|
olegenty |
Отправлено: 04.08.2005, 16:56 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
давай, играйся...
компоненты не безглючны, имей в виду. если напорешься на глюк, на который я уже напарывался — расскажу, чё с ним делать
|
|
greyich |
Отправлено: 04.08.2005, 17:33 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
QUOTE (olegenty @ 04/08/2005, 16:56) | äàâàé, èãðàéñÿ...
êîìïîíåíòû íå áåçãëþ÷íû, èìåé â âèäó. åñëè íàïîðåøüñÿ íà ãëþê, íà êîòîðûé ÿ óæå íàïàðûâàëñÿ — ðàññêàæó, ÷¸ ñ íèì äåëàòü |
а что за глюк конечно же не скажешь?
|
|
greyich |
Отправлено: 04.08.2005, 17:36 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
судя по предыдущему моему посту — ничто не безглючно в этом мире
последний вопрос на сегодня — а как получить название столбца, в котором редактируется ячейка? голова чтото уже не варит
Отредактировано greyich — 04/08/2005, 18:30
|
|
olegenty |
Отправлено: 05.08.2005, 06:40 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
У столбца (TColumnEh) названия нет, название есть у поля. Так вот, у TDBGrid (и TDBGridEh) есть св-во — SelectedField, являющее собой указатель на TField. Поэтому имя поля будет:
CODE |
Grid->SelectedField->FieldName
|
|
|