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

стр.: (4) < 1 2 3 [4] >
как оседлать DBGridEh? (sql server+ado+dbgrideh), редактирование записей в гриде вручную
olegenty
Отправлено: 11.07.2006, 06:01


Ветеран

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



Ты всё правильно понял, только местод Delete вызови для MemTableEh, а всё остальное так.
spiller
Отправлено: 15.07.2006, 20:47


Ученик-кочегар

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



QUOTE (olegenty @ 12/08/2005, 12:19)
перегенерировать св-ва TADODataDriver нужно только в том случае, если SelectSQL формируется пользователем, при этом меняется количество параметров, либо количество параметров неизменно, но изменилось количество полей ОДНОЙ таблицы, которую при этом хочется одновлять. во всех остальных случаях (т.е. количество параметров SelectSQL одно и то же и количество полей — величина постоянная), никакие компоненты, кроме ОДНОГО TADODataDriver и ОДНОГО TMemTableEh — не нужны. эта пара приспокойно справится с любой работой.

SQL
create table dbo.test (
 id int primary key
, name varchar (50)


SelectCommand
CommandText
SQL
select id, name from dbo.test where name like :NameParam

Parameters — 1 штука:
Name = NameParam
DataType = ftString
Derection = pdInput
Size = 50
UpdateCommand
CommandText
SQL
update dbo.test set name = :name where id = :id

Parameters — 2 штуки. их НЕОБХОДИМО ОПИСАТЬ, но не надо заполянть вручную. в случае. когда имя параметра совпадает с именем поля, его значение и берётся из поля.
Item 0 (параметр 1)
Name = id
DataType = ftInteger
Derection = pdInput
Item 1 (параметр 2)
Name = name
DataType = ftString
Derection = pdInput
Size = 50

и ВСЁ!!! никаких ручных заполнений св-в в рантайме!!! TADODataDriver сам всё сделает. И только когда его стандартное поведение чем-то не устраивает, надо писать обработчики событий. Например, если делаешь вставку, а в таблице есть поле identity, то тогда вставку надо делать уже с помощью хранимой процедуры, которая будет возвращать значение этого поля, а ты РУКАМИ подсунешь его в MemoryTable в обработчике OnGetBackUpdatedValues. И это, пожалуй, единственное, что там надо делать руками.


Я кажется все сделал как тут написано, но удаление и обновление у меня не работает! Т.е мне грид все позволяет удалять обновлять, но ничего при этом не сохраняет. Все запросы:

UpdateSQL:

Update Students
Set
StudentName = :StudentName
Where StudentID = :StudentID

DeleteSQL:

Delete from Students where StudentID= :StudentID
Параметра описаны так, как olegenty выше описал.
Подскажите плиз, что может быть не так?
olegenty
Отправлено: 17.07.2006, 07:15


Ветеран

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



ищи ошибки. если всё сделано верно — всё будет работать. у меня очень немаленький проект построен на EhLib (связке TADODataDriverEh + TMemTableEh) — нет проблем, есть только счастье. smile.gif
Gedeon
Отправлено: 17.07.2006, 08:40


Ветеран

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



Там никакой CashedUpdates = true; не стоит?
Guest
Отправлено: 23.07.2006, 09:45


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







неа, сам не пойме где мог налажать )
spiller
Отправлено: 30.07.2006, 17:03


Ученик-кочегар

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



Всем привет!
Подскажите плиз, как реить след проблему, уже третий день бьюсь:

Есть TMemTableEh.
Включил режим хранения записей в виде дерева.
Хочу сделать обработчик кнопки, который отобразит дерево в развернутом виде.
void __fastcall TMainForm::BitBtn2Click(TObject *Sender)
{

MemTable->TreeList->FullExpand();

}

При нажатии получаю "Access Violaition".
Подскажите,если не трудно, что я не так делаю!

зы Зайти по возможности ссылку на подробный хелп по Ehlib.
Или форум посоветуйте еще какой, где ehlib подробно обсуждается.
Спасибо!
Gedeon
Отправлено: 31.07.2006, 08:25


Ветеран

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



А в момент нажатия на кнопарь
MemTable->TreeList->Active = true; ?
Guest
Отправлено: 31.07.2006, 09:36


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







ну да, он у меня всегда true
spiller
Отправлено: 01.08.2006, 23:41


Ученик-кочегар

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



Может еще будут варианты?
Срочняком нужно исправить баг....
olegenty
Отправлено: 14.08.2006, 07:49


Ветеран

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



дебаггером для начала пройдись...
все ли записи УЖЕ на клиенте?
spiller
Отправлено: 29.08.2006, 20:35


Ученик-кочегар

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



QUOTE (olegenty @ 14/08/2006, 07:49)
дебаггером для начала пройдись...
все ли записи УЖЕ на клиенте?

Для начала — спасибо, что откликнулись.
Я думаю, что записи на клиенте, хотя не уверен.
Я просто заполнил свойства SelectSQL, UpdateSQL и др. и всё.
Не совсем мне понятно, если записи отображаются в гриде, то разве они уже не на клиенте?
Спасибо.
olegenty
Отправлено: 30.08.2006, 09:30


Ветеран

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



в какой-то из версий EhLib с TreeList были проблемы. решались так:
MemTable::AfterOpen MemTable->TreeList->Active = true
MemTable::BeforeClose MemTable->TreeList->Active = false
spiller
Отправлено: 23.09.2006, 21:19


Ученик-кочегар

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



Так тоже не выходит, может еще варианты?
olegenty
Отправлено: 25.09.2006, 10:16


Ветеран

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



ищи свою ошибку. я с этим режимом давно работаю, нет проблем:


Присоединить изображение

Присоединить изображение

стр.: (4) < 1 2 3 [4] >
Вернуться в Работа с базами данных в C++Builder