Форум: "Базы";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];
ВнизПомогите? Найти похожие ветки
← →
bib (2002-09-02 18:49) [0]Вот код:
datamodule1.Tables.StartTransaction;
try
with datamodule1.Тable1 do
begin
if Active then
begin
if mode=1 then Append;!!!<вот тут и вылетает>
if mode=2 then Edit;
FieldValues["NUMBER"]:=MaskEdit1.Text;
FieldValues["FULL_NAME"]:=Edit1.Text;
FieldValues["SHORT_NAME"]:=Edit3.text;
for i:=0 to Memo1.Lines.Count-1 do s:=s+Memo1.Lines.Strings[i]+" ";
FieldValues["ADRES"]:=S; S:="";
if tip.Text=tip.Items.Strings[1] then Memo3.Clear;
for i:=0 to Memo3.Lines.Count-1 do s:=s+Memo3.Lines.Strings[i]+" ";
FieldValues["PASSPORT"]:=S;
FieldValues["Tip"]:=tip.Text;
end;
end;
datamodule1.Tables.Commit;
mode:=0;
except
mode:=0;
datamodule1.Tables.Rollback;
raise
end;
A при Edit-e все нормально...
А по поводу индексов может это из-за BDE? может Apollo постваить?
посоветуйте
← →
ЮЮ (2002-09-03 02:03) [1]if mode=1 then Append;!!!<вот тут и вылетает>
Вот тут-то вылетать и не должно. С каким сообщение? Протрассируй "внутрь" с этой строчки. Ошибка возможна в Table1.onNewRecord. .BeforeInsert, AfterInsert , и т.д.
← →
bib (2002-09-03 16:58) [2]ЮЮ : "if mode=1 then Append;!!!<вот тут и вылетает&! gt;
Вот тут-то вылетать и не должно. С каким сообщение?Протрассируй "внутрь" с этой строчки.Ошибка возможна в Table1.onNewRecord. .BeforeInsert, AfterInsert , и т.д."
Сообщение:"Project Base.exe raised exception class EDatabaseError with message "Expession expected but nothing was found"
----------------------------
procedure TDataSet.Append;
...
EndInsertAppend; // здесь вовнутрь
end;
procedure TDataSet.EndInsertAppend;
...
DoAfterScroll; // тут и вылетает!
end;
----------------------------
Вылетает при AfterScroll :(
У меня стоит фильтр на AfterScroll таблицы 2:
datamodule1.Table2.Filter:="NUMBER="+datamodule1.Table1.fieldbyname("NUMBER").asstring;
datamodule1.Table2.Filtered:=true;
Может в этом дело, хотя мне кажется не должно, когда убрал фильтр все нормально, почему?
Наверное он пытается обратится к полю, которого еще нет....?
Если можно вот такой вопрос: что скажите про Apollo? им лучше пользоваться?
ЮЮ : "if mode=1 then Append;!!!<вот тут и вылетает&! gt;
Вот тут-то вылетать и не должно. С каким сообщение?Протрассируй "внутрь" с этой строчки.Ошибка возможна в Table1.onNewRecord. .BeforeInsert, AfterInsert , и т.д."
Сообщение:"Project Base.exe raised exception class EDatabaseError with message "Expession expected but nothing was found"
----------------------------
procedure TDataSet.Append;
...
EndInsertAppend; // здесь вовнутрь
end;
procedure TDataSet.EndInsertAppend;
...
DoAfterScroll; // тут и вылетает!
end;
----------------------------
Вылетает при AfterScroll :(
У меня стоит фильтр на AfterScroll таблицы 2:
datamodule1.Table2.Filter:="NUMBER="+datamodule1.Table1.fieldbyname("NUMBER").asstring;
datamodule1.Table2.Filtered:=true;
Может в этом дело, хотя мне кажется не должно, когда убрал фильтр все нормально, почему?
Наверное он пытается обратится к полю, которого еще нет....?
Если можно вот такой вопрос: что скажите про Apollo? им лучше пользоваться?
← →
bib (2002-09-03 17:07) [3]Здравствуйте Мастера.
Я по поводу вчерашнего вопроса...
" Вот код:
datamodule1.Tables.StartTransaction;
try
with datamodule1.Тable1 do
begin
if Active then
begin
if mode=1 then Append;!!!<вот тут и вылетает>
if mode=2 then Edit;
FieldValues["NUMBER"]:=MaskEdit1.Text;
FieldValues["FULL_NAME"]:=Edit1.Text;
FieldValues["SHORT_NAME"]:=Edit3.text;
for i:=0 to Memo1.Lines.Count-1 do s:=s+Memo1.Lines.Strings[i]+" ";
! ; FieldValues["ADRES"]:=S; S:="";
if tip.Text=tip.Items.Strings[1] then Memo3.Clear;
for i:=0 to Memo3.Lines.Count-1 do s:=s+Memo3.Lines.Strings[i]+" ";
FieldValues["PASSPORT"]:=S;
FieldValues["Tip"]:=tip.Text;
end;
end;
datamodule1.Tables.Commit;
mode:=0;
except
mode:=0;
datamodule1.Tables.Rollback;
raise
end;
A при Edit-e все нормально...
А по поводу индексов может это из-за BDE? может Apollo постваить?
посоветуйте "
ЮЮ : "if mode=1 then Append;!!!<вот тут и вылетает&! gt;
Вот тут-то вылетать и не должно. С каким сообщение?Протрассируй "внутрь" с этой строчки.Ошибка возможна в Table1.onNewRecord. .BeforeInsert, AfterInsert , и т.д."
Сообщение:"Project Base.exe raised exception class EDatabaseError with message "Expession expected but nothing was found"
----------------------------
procedure TDataSet.Append;
...
EndInsertAppend; // здесь вовнутрь
end;
procedure TDataSet.EndInsertAppend;
...
DoAfterScroll; // тут и вылетает!
end;
----------------------------
Вылетает при AfterScroll :(
У меня стоит фильтр на AfterScroll таблицы 2:
datamodule1.Table2.Filter:="NUMBER="+datamodule1.Table1.fieldbyname("NUMBER").asstring;
datamodule1.Table2.Filtered:=true;
Может в этом дело, хотя мне кажется не должно, когда убрал фильтр все нормально, почему?
Наверное он пытается обратится к полю, которого еще нет....?
Если можно вот такой вопрос: что скажите про Apollo? им лучше пользоваться?
ЮЮ : "if mode=1 then Append;!!!<вот тут и вылетает&! gt;
Вот тут-то вылетать и не должно. С каким сообщение?Протрассируй "внутрь" с этой строчки.Ошибка возможна в Table1.onNewRecord. .BeforeInsert, AfterInsert , и т.д."
Сообщение:"Project Base.exe raised exception class EDatabaseError with message "Expession expected but nothing was found"
----------------------------
procedure TDataSet.Append;
...
EndInsertAppend; // здесь вовнутрь
end;
procedure TDataSet.EndInsertAppend;
...
DoAfterScroll; // тут и вылетает!
end;
----------------------------
Вылетает при AfterScroll :(
У меня стоит фильтр на AfterScroll таблицы 2:
datamodule1.Table2.Filter:="NUMBER="+datamodule1.Table1.fieldbyname("NUMBER").asstring;
datamodule1.Table2.Filtered:=true;
Может в этом дело, хотя мне кажется не должно, когда убрал фильтр все нормально, почему?
Наверное он пытается обратится к полю, которого еще нет....?
Если можно вот такой вопрос: что скажите про Apollo? им лучше пользоваться?
← →
Val (2002-09-03 17:17) [4]конечно, он так и пишет - "ожидается выражение, но ничего не найдено".
если не секрет - в чем суть вашего фильтра, почему ставите именно в AfterScroll?
← →
MsGuns (2002-09-03 17:30) [5]А что, на dbf-ках (BDE) работает все это богатство типа
StartTransaction
..
If .. then
commit
else
rollback
???
← →
Val (2002-09-03 17:41) [6]симуляция :)
← →
bib (2002-09-03 18:06) [7]Val:
"конечно, он так и пишет - "ожидается выражение, но ничего не найдено".
если не секрет - в чем суть вашего фильтра, почему ставите именно в AfterScroll?"
Есть две таблицы и на форме два грида, при перемещении в первой во второй фильтровалися
записи по полю Number, т.е связь "один ко многим" табл1 и табл2 по полю Number. Я пользуюсь фильтром, потому что надо будет упорядочивать по др. полям.
MsGuns:
"А что, на dbf-ках (BDE) работает все это богатство типа
StartTransaction
..
If .. then
commit
else
rollback
???"
работает...
← →
Mike Kouzmine (2002-09-03 18:16) [8]Фильтр в AfterScroll? А почему все-таки там, а не в OnDataChange, например? А не проще нужный индекс создать? Или не вы базу разрабатываете?
← →
MsGuns (2002-09-03 18:23) [9]>bib (03.09.02 18:06)
работает...
Т.е. если я в начале такого алгоритма:
-Выбрать из таблицы 1 кол.А,Б,В
-Сохранить их во врем.таблице Т
-По колонке А таблицы Т изменить значения кол.Г в таблице 2
-По колонке Б таблицы Т изменить значения кол.Д в таблице 3
-По колонке А таблицы Т изменить значения кол.Е в таблице 4
.... (модифицируется штук 5 таблиц)
.... (создается штуки 3 табл.временные)
....
поставлю StartTransaction, а в конце RollBack, то вся эта лабуда типа исчезнет. В смысле восстановится физически вся БД в ее исходном (неизмененном) виде ?
И все это на таблицах dBase (Paradox, FoxPro) ?
Неужели я такой недотепа, что этим не пользовался ? Или это не я..
← →
bib (2002-09-03 18:26) [10]"Фильтр в AfterScroll? А почему все-таки там, а не в OnDataChange, например? А не проще нужный индекс создать? Или не вы базу разрабатываете?"
А как правильнее делать, посоветуйте, я начинающий
← →
Mike Kouzmine (2002-09-03 18:26) [11]Недотепа-то? Не только ты, но и я :(
← →
bib (2002-09-03 18:38) [12]да ладно...
я же говорю я начинющий, скажите что не так делаю
← →
Mike Kouzmine (2002-09-03 18:46) [13]Я бы сделал так
1 Создал бы индекс по тем полям, по которым необходима сортировка.
Например три поля по которым идет "фильтрация" a,b,c и поля для сортировки z,x,y Итого a,b,c,z,x,y
SetRange([1,1,1],[1,1,10]) - быстрая "фильтрация"
Т.е. на мастер OnDataChenge (in DataSource master table) вешаешь этот сетрандже, ну можешь проверить State of master table.
← →
MsGuns (2002-09-03 19:00) [14]bib (03.09.02 18:38)
>скажите что не так делаю
Скажу конкретно (имхо)
1.Транзакции здесь вообще ни при чем. С "STANDARD" БД (dBase,Fox,Paradox) все эти штучки (commit, fetch, rollback,..)
просто НЕ работают. BDE просто симулирует эти методы. При работе с TTable измененная запись текущей таблицы постируется непосредственно сразу после того как курсор перемещается в другую таблицу, если не предусмотрена спец.буферизация. Почитай книжки Фаронова по работе с БД: просто, ясно, исчерпывающе.
2.Для чего для данных кадровой карточки использовать TMemo - совершенно не понятно. Что, ФИО или адрес или паспортные данные для ОДНОГО человека могут быть такими длинными, что не вместятся в простой CHARACTER ?
3.Для проверки состояния датасета ни к чему исп-ть какие-то переменные типа "mode", достаточно проверить св-во TDataSet.State
4.Использовать TDataSet.FieldValues для обмена данными с конкретным полем датасета не совсем хорошо. (Не буду подробно объяснять почему, почитай в хелпах сам) Чаще всего используется методы класса TFields (AsXX) или в крайнем случае (Value или Text)
5.Для начала достаточно
← →
ЮЮ (2002-09-04 01:44) [15]>Наверное он пытается обратится к полю, которого еще нет....?
Поле то есть, только его значение ещё не определено, т.е.
фильтр принимает значение "NUMBER=", что неправильно.
Один из вариантов исправления:
if datamodule1.Table1.fieldbyname("NUMBER").asstring="" then
datamodule1.Table2.Filter:="NUMBER=-1" else //т.е. номер, которого заведомо нет в БД
datamodule1.Table2.Filter:="NUMBER="+datamodule1.Table1.fieldbyname("NUMBER").asstring;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c