Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
8-73773
dr_neo1
2002-05-23 16:26
2002.09.23
Иконки в программах


14-73837
Evgeny
2002-08-27 13:42
2002.09.23
MOD Tracker


1-73666
kazaam
2002-09-13 08:25
2002.09.23
Как сделать кнопку нестандартной формы?


14-73823
K-Sergey
2002-08-26 20:24
2002.09.23
Как набрать номер с помощью модема


14-73893
lipskiy
2002-08-29 21:51
2002.09.23
test





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский