0 / 0 / 0
Регистрация: 27.03.2007
Сообщений: 37
|
||||||
1 | ||||||
Oracle DBGrid, обновление содержимого столбца07.11.2007, 10:51. Показов 8941. Ответов 10
Метки нет Все метки)
(
ОЧЕНЬ ПРОШУ ПОМОЧЬ РЕШИТЬ ПРОБЛЕМУ.
Есть запрос,состоящий из 2-х таблиц:
Я в форме в DBGrid меняю содержание столбца SUMOPL - при этом мне ОЧЕНЬ надо ,чтобы изменилось содержание солбца SUMDOLG. НО он не меняется.Если я закрою окно и по-новому войду в него,то все меняется верно! В ЧЕМ ДЕЛО? Я очень прошу,помогите,может кто-то сталкивался с такой проблемой. СУБД-ОРАКЛ,СВЯЗЬ-ADOQuery.
0
|
|
07.11.2007, 10:51 | |
Ответы с готовыми решениями:
10
Обновление содержимого БД Вывод на печать содержимого stringrid или dbgrid
|
Администратор
83223 / 51801 / 244
Регистрация: 10.04.2006
Сообщений: 13,406
|
|
07.11.2007, 11:24 | 2 |
![]() ![]()
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
07.11.2007, 12:03 | 3 |
ну просто надо произвести рефреш датасета, т.е. закрыть и открыть и все изменится, просто на событие onchange повесить, но есть проблема, при большом объеме данных будет лихо моргать твой пересчет
0
|
Администратор
83223 / 51801 / 244
Регистрация: 10.04.2006
Сообщений: 13,406
|
|
07.11.2007, 12:14 | 4 |
Кстати, насколько я помню, в датасете должны быть вычисляемые поля
![]()
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
07.11.2007, 12:18 | 5 |
они пересчитываются ли, при редактировании, просто dbgrid - это крайне смурной компонент в билдере, хотя вполне возможно, что это самое простое решение...
0
|
Администратор
83223 / 51801 / 244
Регистрация: 10.04.2006
Сообщений: 13,406
|
|
07.11.2007, 12:21 | 6 |
Так тогда можно избавиться от рассчета этого поля в запросе, а считать в вычисляемом поле.
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
07.11.2007, 12:27 | 7 |
на том и порешили... только я помню программно настраивал - в первый раз, пока не понимаешь, что куда и зачем, это проблема
0
|
0 / 0 / 0
Регистрация: 27.03.2007
Сообщений: 37
|
||||||
07.11.2007, 15:05 [ТС] | 8 | |||||
Вот то,что пересчитать?А в какое событие впихнуть ?
При изменении столбца SUMOPL в DBGrid никаких изменений не происходит сразу. Надо закрыть окно и войти в него по-новому-только тогда изменения можно увидеть. Вопрос: Событие OnChange() я не могу найти.Есть OnDataChange(),OnStateChange().
0
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
07.11.2007, 16:50 | 9 |
нет, эти события зараты в поля датасета, т.е. тебе на конкретном поле надо создать это событие... в хелпе поищи:
In TField события OnChange OnGetText OnSetText OnValidate
0
|
Гость
|
|||||||||||
08.11.2007, 10:36 | 10 | ||||||||||
Я не знаю как это сделать.
Если можно,помогите кодом. Еще делала так: Запрос в ф-ии FormActive() .Когда меняла значение суммі в столбце,то в событии AfterPost() я закрыла и открыла по-новому свой запрос.Все меняется очень хорошо.НО!!! При этом аврийно завершается программа-при обращении к ф-ии меню (видит всего-то 1 столбец! А их 9!).Если я закомментировала строку сменю (как в примере),то при этом заголовки столбцов(на русском) в DBGrid исчезли,появились-английские названия столбцов.Может Вы поможете мне написать ,т.е. вернуть (но как???) заголовки столбцов на русском. Пример:
|
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
08.11.2007, 13:32 | 11 |
погоди, а зачем тебе название столбцов в этом событии назначать, обычно это все делается в конструкторе, и желательно структуру в DBGrid там же указать, тогда не надо будет после открытия запроса заново именовать title колонок:
Код
//--------------------------------------------------------------------------- // Формирование отображения таблиц на экране void __fastcall TMainForm::SetField() { TColumn *Column; for(int i = 0; i < Query1->FieldCount; i++){ Struct->Add(SetTableField(Query1, Query1->Fields->Fields[i]->FieldName)); Struct->Fields[i]->DisplayLabel = GridInfo->Strings[i]; Column = DBGrid1->Columns->Add(); Column->Field = Struct->Fields[i]; Column->Alignment = taCenter; } Query1->Close(); for(int i = 0; i < Struct->Count; i++){ Struct->Fields[i]->DataSet = Query1; } DBGrid1->Columns->Items[9]->Visible = false; Query1->Open(); } TField* TMainForm::SetTableField(TQuery *Table, AnsiString FName) { TField *FField; switch(Table->FieldByName(FName)->DataType){ case ftString: FField = new TStringField(this); FField->FieldName = FName; FField->Size = Table->FieldByName(FName)->Size; break; case ftSmallint: FField = new TSmallintField(this); FField->FieldName = FName; break; case ftInteger: FField = new TIntegerField(this); FField->FieldName = FName; break; case ftWord: FField = new TWordField(this); FField->FieldName = FName; break; case ftFloat: FField = new TFloatField(this); FField->FieldName = FName; break; case ftCurrency: FField = new TCurrencyField(this); FField->FieldName = FName; break; case ftBCD: FField = new TBCDField(this); FField->FieldName = FName; FField->Size = Table->FieldByName(FName)->Size; break; case ftDate: FField = new TDateField(this); FField->FieldName = FName; break; case ftTime: FField = new TTimeField(this); FField->FieldName = FName; break; case ftDateTime: FField = new TDateTimeField(this); FField->FieldName = FName; break; case ftAutoInc: FField = new TAutoIncField(this); FField->FieldName = FName; break; case ftMemo: case ftFmtMemo: FField = new TMemoField(this); FField->FieldName = FName; break; case ftBoolean: FField = new TBooleanField(this); FField->FieldName = FName; break; case ftUnknown: break; case ftBytes: FField = new TBytesField(this); FField->FieldName = FName; break; case ftVarBytes: FField = new TVarBytesField(this); FField->FieldName = FName; break; case ftBlob: FField = new TBlobField(this); FField->FieldName = FName; break; case ftGraphic: FField = new TGraphicField(this); FField->FieldName = FName; break; case ftParadoxOle: break; case ftDBaseOle: break; case ftTypedBinary: break; case ftCursor: break; } return FField; } а в конструкторе: .... GridInfo = new TStringList(); GridInfo->Add("Статус"); GridInfo->Add("Код документа"); GridInfo->Add("Класс абонента"); GridInfo->Add("Телефон"); GridInfo->Add("Номер запроса"); GridInfo->Add("Регистрация запроса"); GridInfo->Add("Номер наряда"); GridInfo->Add("Регистрация наряда"); GridInfo->Add("Тип дома"); GridInfo->Add("ID"); SetField(); ....
0
|
08.11.2007, 13:32 | |
Помогаю со студенческими работами здесь
11
Обновление данных в DBGrid Обновление данных в DBGrid Обновление данных в DBGrid Обновление данных в DBGrid Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |