| Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
| Все форумы / Delphi |
![]() |
||
| Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] все |
|
V.Borzov Member Откуда: Саратов Сообщений: 284 |
А чем пользуетесь? |
||
| 7 фев 09, 20:45 [6792329] Ответить | Цитировать Сообщить модератору | |||
|
Senya_L Member Откуда: Москва Сообщений: 5381 |
> Автор: V.Borzov > А чем пользуетесь? > ADO и IBX в зависимости от СУБД. Хватает. Когда их перестает хватать и ручки тянутся к средствам кэширования навроде CDS - это первый признак проктологии. Posted via ActualForum NNTP Server 1.4 |
| 7 фев 09, 21:53 [6792420] Ответить | Цитировать Сообщить модератору | |
|
V.Borzov Member Откуда: Саратов Сообщений: 284 |
Ну вот примерный результат:
function ReadDataSet(DestinationCDS :TClientDataSet;
SourceDataSet :TDataSet;
AddField_Names: array of string;
AddField_Types :array of TFieldType ;
AddField_Kinds :array of TFieldKind;
AddField_Sizes :array of Integer
) :Boolean;
var iC :Integer;
k :Integer;
Field :TField;
begin
iC := High(AddField_Names);
if (iC <> High(AddField_Names))
or (iC <> High(AddField_Types))
or (iC <> High(AddField_Kinds))
then raise Exception.Create('Íåñîîòâåòñòâèå êîëè÷åñòâà ýëåìåíòîâ â ñïèñêàõ');
DestinationCDS.DisableControls;
try
if iC>=0
then begin
if not SourceDataSet.Active then SourceDataSet.Open;
DestinationCDS.Close;
DestinationCDS.Fields.Clear;
with SourceDataSet do
for k := 0 To FieldCount-1 do
begin
Field := TFieldClass(Fields[k].classtype).Create(DestinationCDS.Owner); // defaultfieldClasses[SourceDataSet.Fields[k].DAtatype].Create(DestinationCDS.Owner);
Field.FieldName := Fields[k].FieldName;
Field.Size := Fields[k].Size;
Field.DataSet := destinationcds;
end;
for k := 0 To iC do
begin
Field := defaultfieldClasses[addfield_types[k]].Create(DestinationCDS.Owner);
Field.FieldName := AddField_Names[k];
Field.FieldKind := addField_kinds[k];
if High(addField_Sizes[k]) >= ic
then Field.Size := AddField_Sizes[k];
Field.DAtaset := DestinationCDS;
end;
end;
DestinationCDS.data := REadDAtaset(SourceDataset);
finally
DestinationCDS.EnableControls;
end;
Result := True;
end;
function ReadDataset(SourceDataset :TDataSet) :OleVariant;
var dsp : TDatasetProvider;
begin
Result := NULL;
dsp := TDatasetProvider.Create(nil);
try
sourcedataset.DisableControls;
try
if sourcedataset.Active then sourcedataset.First; // Åñëè ýòîãî íå ñäåëàòü, òî âîçüìóòñÿ äàííûå ñ òåêóùåé ñòðîêè òîëüêî
dsp.DataSet := sourcedataset;
result := dsp.data;
finally
SourceDataSet.EnableControls;
end
finally
dsp.Free;
end;
end;
---------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var Field :TField;
begin
Table1.Open;
ReadDataSet(CDS2,Table1, ['Field2','Field3'],[ftInteger,ftString],[fkInternalCalc,fkCalculated],[0,100]);
end;
procedure TForm1.CDS2CalcFields(DataSet: TDataSet);
begin
dataset.FieldByName('field2').AsInteger := dataset.recno;
dataset.FieldByName('field3').AsString := 'Recno = '+IntToStr(dataset.recno);
end;
Вроде работает :) |
| 8 фев 09, 01:39 [6792712] Ответить | Цитировать Сообщить модератору | |
|
V.Borzov Member Откуда: Саратов Сообщений: 284 |
then raise Exception.Create('Несоответствие количества элементов в списках'); Остальное можно не переводить |
||
| 8 фев 09, 01:44 [6792718] Ответить | Цитировать Сообщить модератору | |||
|
Michael Longneck Member Откуда: Москва Сообщений: 2299 |
Создавая поля не забудьте выставить свойство .Name для полей. Не помню какие, но с этим были проблемы. |
| 8 фев 09, 01:48 [6792722] Ответить | Цитировать Сообщить модератору | |
|
V.Borzov Member Откуда: Саратов Сообщений: 284 |
ньюанс:... Result := DestinationCDS.Active; // true; end; хоть и бессмысленный, но рука чешется... |
| 8 фев 09, 01:58 [6792728] Ответить | Цитировать Сообщить модератору | |
|
Extender Member Откуда: Омск Сообщений: 90 |
|
|
| 11 мар 09, 07:58 [6908517] Ответить | Цитировать Сообщить модератору | ||
| Между сообщениями интервал более 1 года. |
|
BasilCat Member Откуда: Сообщений: 12 |
Типа так работает:
|
||
| 19 янв 19, 14:43 [21789279] Ответить | Цитировать Сообщить модератору | |||
| Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] все |
| Все форумы / Delphi | ![]() |
|