C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

стр.: (4) < [1] 2 3 4 >
как оседлать DBGridEh? (sql server+ado+dbgrideh), редактирование записей в гриде вручную
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 в ту папку, где у тебя болтается основной пакет и исходники основного пакета, либо оставь как есть, но укажи пути на основной пакет...

а если я захочу другой проект создать, туда тоже всё кидать? а пути я прописываю — почему то всё равно не находит sad.gif
olegenty
Отправлено: 03.08.2005, 11:43


Ветеран

Группа: Модератор
Сообщений: 2412



нет, не в проект, а в проект пакета...
Guest
  Отправлено: 03.08.2005, 15:45


Не зарегистрирован







2 olegenty:
1) а что такое проект пакета? (чувствую себя полным ламером)

2) а можно пример кода как написать запрос (напрмер для обновления) для компонента TDataDriverEh? если конечно не очень лениво smile.gif
olegenty
Отправлено: 03.08.2005, 16:43


Ветеран

Группа: Модератор
Сообщений: 2412



ты MemTableEhB6.bpk установил? это и есть проект пакета.

примеры запросов? пожалуйста (ты удивишься)
1. SelectSQL (тип запроса cthSelectQuery)
QUOTE

exec dbo.usps_Unit
:CodeMask,
:DesignMask,
:MaskType

2. UpdateSQL (тип запроса cthStoredProc)
QUOTE

dbo.uspu_Unit

3. InsertSQL (тип запроса cthStoredProc)
QUOTE

dbo.uspi_Unit

... (ну и всё остальное такое-же)
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)?

ты компоненты установи, и докцию на русском языке прочти, и будет тебе прояснение ))

компоненты поставил. в документации не сказано как включать их в проект sad.gif
вот забавно естьтакой код:

#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 эти пути есть??? при чём тут документация-то, ты что первый раз среду видишь?

нет не первый. так второй-третий smile.gif

вообщем в 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)
параметры.

ваша лаконичность достойна восточных мудрецов smile.gif
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!! сэр! я восхищен Вами...
вообщем если бы ты был в москве — я бы счел непременно своим долгом угостить чем-нибудь (например пивом) biggrin.gif

я счаз поиграюсь с ним, если потом будет парочка вопросов, можно?...
olegenty
Отправлено: 04.08.2005, 16:56


Ветеран

Группа: Модератор
Сообщений: 2412



smile.gif давай, играйся...
компоненты не безглючны, имей в виду. если напорешься на глюк, на который я уже напарывался — расскажу, чё с ним делать smile.gif
greyich
Отправлено: 04.08.2005, 17:33


Дежурный стрелочник

Группа: Участник
Сообщений: 45



QUOTE (olegenty @ 04/08/2005, 16:56)
smile.gif &#228;&#224;&#226;&#224;&#233;, &#232;&#227;&#240;&#224;&#233;&#241;&#255;...
&#234;&#238;&#236;&#239;&#238;&#237;&#229;&#237;&#242;&#251; &#237;&#229; &#225;&#229;&#231;&#227;&#235;&#254;&#247;&#237;&#251;, &#232;&#236;&#229;&#233; &#226; &#226;&#232;&#228;&#243;. &#229;&#241;&#235;&#232; &#237;&#224;&#239;&#238;&#240;&#229;&#248;&#252;&#241;&#255; &#237;&#224; &#227;&#235;&#254;&#234;, &#237;&#224; &#234;&#238;&#242;&#238;&#240;&#251;&#233; &#255; &#243;&#230;&#229; &#237;&#224;&#239;&#224;&#240;&#251;&#226;&#224;&#235;&#241;&#255; — &#240;&#224;&#241;&#241;&#234;&#224;&#230;&#243;, &#247;&#184; &#241; &#237;&#232;&#236; &#228;&#229;&#235;&#224;&#242;&#252; smile.gif

а что за глюк конечно же не скажешь? smile.gif
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
стр.: (4) < [1] 2 3 4 >
Вернуться в Работа с базами данных в C++Builder