Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
varSaveField: String;
begin
withTRXLookupControlHack(Lookup) do begin
SaveField := LookupDisplay;
LookupDisplay := '';
LookupDisplay := SaveField;
end;
end;
functionRxLookupValueInteger(Lookup: TrxLookupControl): Integer;
begin
withTRXLookupControlHack(Lookup) do try
ifValue <> EmptyValue thenResult := StrToInt(Value)
elseResult := 0;
except
Result := 0;
end;
end;
procedureInsertOrderBy(Query: TRxQuery; NewOrder: String);
var
Param: TParam;
OldActive: Boolean;
OldOrder: String;
Bmk: TPKBookMark;
begin
Param := FindParam(Query.Macros, 'Order');
if notAssigned(Param) thenExit;
OldOrder := Param.AsString;
ifOldOrder <> NewOrder then begin
OldActive := Query.Active;
ifOldActive thenBmk := GetPKBookmark(Query, '');
try
Query.Close;
Param.AsString := NewOrder;
try
Query.Prepare;
except
Param.AsString := OldOrder;
end;
Query.Active := OldActive;
ifOldActive thenSetToPKBookMark(Query, Bmk);
finally
ifOldActive thenFreePKBookmark(Bmk);
end;
end;
end;
procedureUpdateOrderFields(Query: TQuery; OrderFields: TStrings);
varNewOrderFields: TStrings;
procedureAddOrderField(S: String);
begin
ifNewOrderFields.IndexOf(S) < 0 thenNewOrderFields.Add(S);
end;
var
I, J: Integer;
Field: TField;
FieldDef: TFieldDef;
S: String;
begin
NewOrderFields := TStringList.Create;
withQuery do try
forI := 0 toOrderFields.Count - 1 do begin
S := OrderFields[I];
Field := FindField(S);
ifAssigned(Field) and(Field.FieldNo > 0) thenAddOrderField(IntToStr(Field.FieldNo))
else try
J := StrToInt(S);
ifJ < FieldDefs.Count thenAddOrderField(IntToStr(J));
except
end;
end;
OrderFields.Assign(NewOrderFields);
finally
NewOrderFields.Free;
end;
end;
procedureHandleOrderMacro(Query: TRxQuery; Field: TField);
var
Param: TParam;
Tmp, OldOrder, NewOrder: String;
I: Integer;
C: Char;
TmpField: TField;
OrderFields: TStrings;
begin
Param := FindParam(Query.Macros, 'Order');
if notAssigned(Param) orField.Calculated orField.Lookup thenExit;
OldOrder := Param.AsString;
I := 0;
Tmp := '';
OrderFields := TStringList.Create;
try
OrderFields.Ad(Field.FieldName);
whileI < Length(OldOrder) do begin
Inc(I);
C := OldOrder[I];
ifC inFieldNameChars thenTmp := Tmp + C;
if( not(C inFieldNameChars) or(I = Length(OldOrder))) and(Tmp <> '') then begin
TmpField := Field.DataSet.FindField(Tmp);
ifOrderFields.IndexOf(Tmp) < 0 thenOrderFields.Add(Tmp);
Tmp := '';
end;
end;
UpdateOrderFields(Query, OrderFields);
NewOrder := OrderFields[0];
forI := 1 toOrderFields.Count – 1 doNewOrder := NewOrder + ', ' + OrderFields[1];
finally
OrderFields.Free;
end;
InsertOrderBy(Query, NewOrder);
end;
end.
DBGrid и TQuery
Delphi 1
1. Расположите на вашей форме 2 TQuerie с двумя соответствующими TDatasource (Query1 будет вашим Мастером, Query2 будет вашей Деталью)
2. Разместите 2 TDBGrid, связанных с Datasource'ами (вероятно, вы уже это сделали)
3. Используйте базу данных, поставляемую с Delphi:
Query1.SQL := 'Select * from customer'
Query2.SQL := 'Select * from Orders whereOrders."CustNo" = :CustNo'
(это можно сделать как во время выполнения приложения, так и во время его разработки)
4. В свойствах Query2 выберите свойство Params и напишите в строке 'CustNo'. 'CustNo' был определен как параметр, поскольку в SQL строке было использовано ':'.
5. ОЧЕНЬ ВАЖНО: установите Query2.Datasource в набор данных, связанный с Query1.
Каждый раз при изменении записи в наборе данных Query1, Query2 будет обновляться. Имя параметра 'CustNo' соответствует имени реального поля в таблице Customer.
P.S.: Для получения дополнительной информации обратитесь к разделу электронной справки 'dynamic SQL'
DBGrid как навигатор
Delphi 1
1. Расположите компонент table на пустой форме и свяжите его с вашего таблицей Client.
2. Добавьте компонент Datasource и свяжите его с компонентом table, описанным выше.
3. Добавьте компонент grid и свяжите его с компонентом datasource, описанным выше.
4. Используя Редактор Полей (Fields Editor), создайте компоненты TField для всех полей таблицы client.
5. Установите свойство Visible всех компонентов TField, кроме Client Name (или другого поля, которое будет отображаться в DBGrid), в False. Grid теперь будет отображать только Client Name.
6. Для отображения полей таблицы Client (которые вы хотите показать, или которые вы хотите сделать доступными для редактирования пользователем), ниже табличной сетки расположите компоненты DBEdit. Они могут использовать тот же набор данных, что и DBGrid.
Теперь пользователь может воспользоваться DBGrid для навигации и ввода/редактирования данных посредством DBEdit'ов.
Позиция DBGrid
Delphi 1
В режиме разработки дважды щелкните на компоненте TQuery, и выберите все поля, которые вы хотите использовать в DBGrid. Затем в обработчике события DBGrid doubleclick смотрите значение DBGrid.SelectedIndex. Если оно < 0, выбранных пунктов нет. Также, текущая запись TQuery будет указывать на ту же самую строку, которая выбранна в DBGrid. Таким образом, вы можете использовать что-то типа requiredvalue := Query1Field1.AsString; и т.д., естественно, компоненты TQuery и DBGrid должны быть подключены друг к другу.
DBGrid – переход к следующей записи
Delphi 1
Для перехода к следующей записи:
MyDBGrid.SelectedIndex := MyDBGrid.SelectedIndex + 1;
Колонки DBGrid индексируются с 0, поэтому SelectedIndex := 0 даст вам первую колонку. Свойство FieldCount вернет вам количество колонок, так что вы без труда можете пробежаться по всей матрице данных.
onClick и DBGrid
Многие программисты хотели бы использовать OnClick у TDBGrid. Но TDBGrid не имеет такого события. В данном документе рассказывается о том, как обеспечить поддержку события OnClick для TDBGrid. Рассказанная здесь технология может пригодиться при добавлении других свойств к различным объектам. Если вы знаете, что сделать это мог предок, то можно заставить сделать это и наследника. Ключевым моментом здесь можно считать добавление csClickEvents к свойству-набору элемента управления ControlStyle. Это позволит элементу управления, приведенному к типу THack, получать и правильно обрабатывать системные сообщение о щелчке мышью. Назначение OnClick какого-либо элемента управления OnClick DBGrid1 позволяет воспользоваться событием OnClick для элемента управления, которое его не поддерживает.
Читать дальшеИнтервал:
Закладка: