Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как из Table с вычисляемыми полями сделать новую таблицу? [D6, dBase, FoxPro]


Страницы:   1 2

Zn ©   (2003-04-04 10:09:00) 

Работаю с dbf. Есть таблица Table1 с несколькими вычисляемыми полями. Данные нужно сохранить в виде физической таблицы. Я создал Table2, в которой в FieldsDefs описаны все поля, такие же как и в Table1. Потом делаю Table2.CreateTable и Table2.BatchMove(Table1, batCopy). Table2.CreateTable таблицу создаёт, а Table2.BatchMove выдаёт ошибку "Invalid record structure" и удаляет физическую таблицу (Table2.TableName).
В чём ошибка? Или такая задача решается как-то по-другому?


Соловьев   (2003-04-04 11:03:00) [21]


> создал Table2, в которой в FieldsDefs описаны все поля

где это ты описал?
У тебе надо создать таблицу с полями такими как в той что с вычисляемыми, только в ней не должно быть вычисляемых. И в BatchMove прописать в свойстве Mappings соответсвие полей.


Zn   (2003-04-04 10:58:00) [22]

Код такой:
unit Unit7;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls,Unit4, Grids, DBGrids, DB, ADODB,DateUtils,
Buttons, Func, ExtCtrls, DBCtrls, Mask, DBTables, ActnList;

type
TForm7 = class(TForm)
BitBtn1: TBitBtn;
Penia: TTable;
Peniakod: TStringField;
Peniavb: TStringField;
Peniard: TStringField;
Peniapg: TStringField;
Peniast: TStringField;
Peniazn: TFloatField;
Peniadateup: TDateField;
Peniavid: TStringField;
PeniaNedoim: TFloatField;
PeniaStruct: TTable;
StringField1: TStringField;
StringField2: TStringField;
StringField3: TStringField;
StringField4: TStringField;
StringField5: TStringField;
FloatField1: TFloatField;
FloatField2: TFloatField;
DateField1: TDateField;
StringField6: TStringField;
procedure BitBtn1Click(Sender: TObject);
procedure PeniaCalcFields(DataSet: TDataSet);

private
{ Private declarations }
public
Dt1, Dt2: string;
{ Public declarations }
end;

var
Form7: TForm7;

implementation


{$R *.dfm}


procedure TForm7.BitBtn1Click(Sender: TObject);
begin
if not PeniaStruct.Exists then PeniaStruct.CreateTable;
PeniaStruct.BatchMove(Penia,batCopy);
end;

procedure TForm7.PeniaCalcFields(DataSet: TDataSet);
begin
PeniaNedoim.AsFloat:=NedoimForSht(Peniavid.AsString,Peniazn.AsFloat);
end;


function NedoimForSht(Vid1: string; Shts: Single): Real;
begin
case StrToInt(Vid1) of
280 : Result:=Shts/0.1;
281 : Result:=Shts/0.2;
282 : Result:=Shts/0.5;
else Result:=0
end;
end;

end.


Соловьев   (2003-04-04 10:19:00) [23]

поробуй просто в цыкле сохранять. Хотя судя по всему ты что-то со структурой намудрил. Код?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо