Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прошу подсказку [D6, Paradox]


Страницы:   1 2

Timka ©   (2002-04-22 17:38:00) 

Подскажите пожалуйста. В таблице сделал поле просмотра, при входе в него выпадает весь список возможных значений, изменяется (при выборе)связанное с ним поле в текущей таблице, но изменения не сохраняются. Выдаёт ошибку "index is read only".Пробовал ввести режим Edit принудительно, не помогло. Набор данных всё одно переводится в режим browse. Как можно сделать, чтобы данные сохранялись?


Timka   (2002-04-26 16:59:00) [1]

>to VAleksey ©
всё...спасибо, ф-цию нашёл, разобрался... буду думать дальше...


Timka   (2002-04-25 17:37:00) [2]

> в смысле, смотрел в справке, непонятно...


Timka   (2002-04-25 17:35:00) [3]

to VAleksey ©
dbiRegenIndexis
procedure TForm1.ReIndexes(TblName: TTable);


а из какого модуля эта функция? что надо подключить? у меня выдаёт undeclared identifier "DbiRegenIndexes"... в справке


VAleksey   (2002-04-25 13:56:00) [4]


> их можно как-то ещё обновлять,кроме как уничтожить - создать?

dbiRegenIndexis

procedure TForm1.ReIndexes(TblName: TTable);
Var Table:TTable;
begin
Table:=TTable.Create(Self);
TblName.Close;
Table.DataBaseName:=TblName.DataBaseName;
Table.TableName:=TblName.TableName;
Table.Exclusive:=true;
Table.Open;
Check(DbiRegenIndexes(Table.Handle));
Table.Close;
Table.Free;
TblName.Open;
end;


Timka   (2002-04-25 11:33:00) [5]

ещё раз проверил, если только таблицы состав и продукты, прекрасно работает, пока кэширование выключено. при включенном - выдаёт "index is read only",а если изменить при выключенном кэшриовании, при попытке открыть базу потом повторно в кэшированном режиме выдаёт "Table is not indexed", получается, всё упирается в индексы? их можно как-то ещё обновлять,кроме как уничтожить - создать?


Timka   (2002-04-25 09:58:00) [6]

попробовал. те же ... в профиль.Выдаёт ошибку "index is read only". пробовал ещё один табле завести - говорит после изменения , что индекс либо устаревшиой, либо out of range. уточняя стуациЮ , может поможет: три таблицы, блюдо, состав, продукты. у состав - мастер таблица блюдо, в составе выбираю продукты из третей таблицы. пробовал блюдо.mastersource.enabled:=false, отключать мастер-поля и брать другой индекс, (перед Post),всё одно Выдаёт ошибку "index is read only"


Севостьянов Игорь   (2002-04-24 18:42:00) [7]

IrenFD © (24.04.02 18:02)
Вообще-то я с тобой согласен


IrenFD   (2002-04-24 18:02:00) [8]

Не спорьте, TTable.Edit with FieldKind = fkLookup отлично работает, только у парня кешируемое обновление и ему нужно либо TUpdateSQL, либо он не сбрасывает кеш в базу типа CommitUpdates и ApplyUpdates.
Попробуй не кешировать таблицу, что получится?


Севостьянов Игорь   (2002-04-24 17:17:00) [9]

VAleksey © (24.04.02 14:26)
Объясните причины подобного заявления.
А ты попробуй TTable.Edit with FieldKind = fkLookup

Determines whether the field is specified as a lookup field.

property Lookup: Boolean;

Description

Lookup is provided for backward compatibility. To determine if a field is a lookup field, use the FieldKind property instead.

If the field is a lookup field, the KeyFields property indicates which fields in the dataset must match the LookupKeyFields in the LookupDataSet, to identify a record in the LookupDataSet. The value of the LookupResultField for that record becomes the Value of the field component.


Timka   (2002-04-24 16:05:00) [10]

>to VAleksey ©

>Timka © блин, ты вообще сейчас о чем ? Я тебя правильно понимаю:

абсолютно верно. Ещё деталь: кроме всего прочего, изменяемая таблица связанная, по индексированному полю(единственному)

>Я имел ввиду ...
>...при помощи трассировки отследить то место...

я так и делал с самого начала. вставлять Labeli стал уже от полной безысходности. Подумал, может так будет наглядней.(что-то типа дубоватого лога на панели :) )

>все сюда тянет :)

ВСЕГДА РАД ТЕБЯ УВИДЕТЬ!!! (до сих пор как вспомню про
var MyTable: TTable , тянет к зеркалу, прикинуть длину своих ушей... :))) )


Timka   (2002-04-24 15:42:00) [11]

>Севостьянов Игорь © большое спасибо за пример.

TUpdateSQL работает, но тогда при повторном открытии таблицы (у меня парадоксовская,связанная) выдаёт сообщение
index is out of date, т.е. ещё каким-то образом надо обновлять индекс, у Table я такой процедуры не нашёл, только AddIndex и DeleteIndex. Следовательно, каждый раз придётся при отключать таблицу, создавать индекс заново и подключать? или есть ещё методы?


VAleksey   (2002-04-24 14:26:00) [12]

все сюда тянет :)

> Севостьянов Игорь © (24.04.02 12:50)


> А насчет принудительного Edit - не получится, если ты в
> TTable определил поле FieldKind = fkLookUp, то прийдется
> воспользоваться TUpdateSQL как тебе посоветовал IrenFD ©
> (22.04.02 18:44)

Объясните причины подобного заявления.


VAleksey   (2002-04-24 14:24:00) [13]


>
> Timka © (23.04.02 18:29)
> Обработчик такой(для наглядного пошагового отслеживания)

Я имел ввиду использование в коде точки останова при переводе НД в состояние редактирования и затем при помощи трассировки отследить то место в коде программыгде таблица переходит в состояние просмотра.
ЗЫ
Просто была у меня похожая ситуация, так что разберемся !


VAleksey   (2002-04-24 14:19:00) [14]

Timka © блин, ты вообще сейчас о чем ? Я тебя правильно понимаю:
1) Запись не хочет сохранятся
2) Ввод значения в поле ч/з лукап
3) НД из состояния редактирования переходит в состояние просмотра(причем переходит необосновано (без вызова соответстующих методов))
4) Есть обработчики событий смены состояния НД
5) Частично эти обработчики вызываются в событиях
> onDataChange и onStateChange

Я все правильно излагаю ?
Твоя проблема: сделать доступным редактирование таблицы используя лукап поле ?


Севостьянов Игорь   (2002-04-24 12:50:00) [15]

Вариантов для перевода нет - только массивом
-----------
SA_DataSetState: array [TDataSetState] of Integer = ("dsInactive", "dsBrowse", "dsEdit", "dsInsert", "dsSetKey", "dsCalcFields", "dsFilter", "dsNewValue", "dsOldValue", "dsCurValue","dsBlockRead", "dsInternalCalc", "dsOpening");
-----------
State: TDataSetState;
-----------
Label1.Caption := SA_DataSetState[State]
-----------


А насчет принудительного Edit - не получится, если ты в TTable определил поле FieldKind = fkLookUp, то прийдется воспользоваться TUpdateSQL как тебе посоветовал IrenFD © (22.04.02 18:44)


Timka   (2002-04-24 11:25:00) [16]

> onDataChange и onStateChange ?

да, именно. И не только там. Что касается обработчика индикации состояния НД - если бы ты увидел, как выглядит форма, на которой я обкатываю эту методу - ужаснулся бы :) , но пошагово - отслеживает всё наглядно и постадийно ,на форме видны одновременно результаты прохода постадийно. Конечно, я могу поставить индикаторы цветом, или тот же DBGreed подцвечивать, или мессагу выдавать,но словами мне проще. или имеется в виду что-то ещё? свойство State имеет тип TDataSetState, перечислимый. как его перевести в например,в строковый,без IF ... THEN либо CASE.. DO я не нашёл. Если кто-нибудь подскажет, это было бы здорово.


VAleksey   (2002-04-24 08:28:00) [17]


> onDataChange и onStateChange ?



VAleksey   (2002-04-24 08:27:00) [18]

Сноси нафиг обработчики
> на onDataChange и onStateChange

Придумывай другие способы отслеживания смены состояния НД. (Это тоже совет)

< I>
> with DataModule1.Table1 do
> begin
> if State = dsBrowse then Form1.label3.Caption := "dsBrowse";
> if State = dsEdit then Form1.label3.Caption := "dsEdit";
> if State = dsInsert then Form1.label3.Caption := "dsInsert";
> if State = dsSetKey then Form1.label3.Caption := "dsSetKey";
> end;
Этот код стоит в


Timka   (2002-04-23 18:29:00) [19]

Обработчик такой(для наглядного пошагового отслеживания)
with DataModule1.Table1 do
begin
if State = dsBrowse then Form1.label3.Caption := "dsBrowse";
if State = dsEdit then Form1.label3.Caption := "dsEdit";
if State = dsInsert then Form1.label3.Caption := "dsInsert";
if State = dsSetKey then Form1.label3.Caption := "dsSetKey";
end;

таблица кэшируется, поэтому видно, что до момента ApplyUpdates состояние набора данных либо dsInsert, либо dsEdit, а потом сообщение об ошибке и потом бровзе. Файлы посмотрел, указано лишь, что архивный.даже после снятия результат тот-же.
обработчик поставил в нескольких местах, в том числе и в датасоурсе,на onDataChange и onStateChange, лабели, естественно, задавал разные. Счастья так и нет. Ж:(


VAleksey   (2002-04-23 14:25:00) [20]

Попробуй с места, где задаешь Table.Edit; пошагово отследить то место в коде, где ее состояние переходит в dsBrowse
ЗЫ
Это совет такой. А там сам поймешь куда копать !


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо