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) — нет проблем, есть только счастье.
|
|
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
|
ищи свою ошибку. я с этим режимом давно работаю, нет проблем:
Присоединить изображение
|
|