Вот скрин
https://yadi.sk/i/yTFaXvOX3UV597 и исходник:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, DB {dbf.FieldDefs.Add need}, dbf, FileUtil, Forms, Controls, Graphics, Dialogs, Grids,
StdCtrls, ComCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
ButtonNomer: TButton;
ButtonEdit: TButton;
ButtonAdd: TButton;
ButtonOpen: TButton;
ButtonSave: TButton;
ButtonCreate: TButton;
Dbf: TDbf;
Edit1: TEdit;
Edit2: TEdit;
EditNo: TEdit;
Memo: TMemo;
StringGrid: TStringGrid;
UpDown1: TUpDown;
procedure ButtonAddClick(Sender: TObject);
procedure ButtonCreateClick(Sender: TObject);
procedure ButtonEditClick(Sender: TObject);
procedure ButtonNomerClick(Sender: TObject);
procedure ButtonOpenClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
dbf.Exclusive:= True; //необходимо для изменения установок
dbf.FilePath:='E:\dbfEdit\';
dbf.TableName:='simple.dbf'; //имя файла таблицы
end;
procedure TForm1.ButtonCreateClick(Sender: TObject);
begin
Memo.Lines.Add(dbf.FilePath+dbf.TableName);
IF not FileExists(dbf.FilePath+dbf.TableName) THEN BEGIN
dbf.TableLevel:= 7;
dbf.FieldDefs.Add('No',ftAutoInc,0, true);
dbf.FieldDefs.Add('Const',ftString, 50, true);
dbf.FieldDefs.Add('Value',ftFloat, 0, false);
dbf.FieldDefs[dbf.FieldDefs.Count-1].Precision := 2; //точность
dbf.CreateTable;
dbf.Open;
END
ELSE BEGIN //если таблица есть, просто открываем её
dbf.Open;
END;
end;
procedure TForm1.ButtonOpenClick(Sender: TObject);
var i: integer;
begin
dbf.Open;
Memo.Lines.Add('DBF.FieldCount '+IntToStr( Dbf.FieldCount));
Memo.Lines.Add('DBF.RecordCount '+IntToStr( Dbf.RecordCount));
StringGrid.RowCount:= Dbf.RecordCount+1;
Memo.Lines.Add(' ');
FOR i:=0 TO Dbf.FieldCount-1 DO BEGIN
Memo.Lines.Add(Dbf.Fields.Fields[i].FieldName); ;
END;
dbf.First;
while not dbf.EOF do begin
i:= dbf.PhysicalRecNo;
Memo.Lines.Add('Rec No '+IntToStr(i)+' '+
dbf.FieldByName('Const').AsString +' '+
FormatFloat( '0.00', dbf.FieldByName('Value').AsFloat));
StringGrid.Cells[0,i] := dbf.FieldByName('No').AsString;
StringGrid.Cells[1,i] := dbf.FieldByName('Const').AsString;
StringGrid.Cells[2,i] := FormatFloat( '0.00', dbf.FieldByName('Value').AsFloat);
dbf.Next;
end;
dbf.Close;
end;
procedure TForm1.ButtonAddClick(Sender: TObject);
var RealValue : real;
code : integer;
begin
dbf.Open;
dbf.Append;
dbf.FieldByName('Const').Text:=Edit1.Text;
Val(Edit2.Text,RealValue,code);
dbf.FieldByName('Value').Value:=RealValue;
dbf.Post;
dbf.Close;
end;
procedure TForm1.ButtonEditClick(Sender: TObject); //в текущую строку грида
var RealValue : real;
code : integer;
begin
dbf.Open;
dbf.PhysicalRecNo := StringGrid.Row; // в текущую строку грида
Memo.Lines.Add('CurrentRow = ' + IntToStr(dbf.PhysicalRecNo));
dbf.FieldByName('Const').Text:=Edit1.Text;
Val(Edit2.Text,RealValue,code);
dbf.FieldByName('Value').Value:=RealValue;
dbf.Post; // НЕ УДАЕТСЯ ЗАПИСАТЬ !!!!!!!
dbf.Close;
end;
procedure TForm1.ButtonNomerClick(Sender: TObject); //в выбранный спином номер
var RealValue : real;
code : integer;
begin
dbf.Open;
dbf.PhysicalRecNo := StrToInt(EditNo.Text); // в указанную номером строку dbf
Memo.Lines.Add('CurrentRow = ' + IntToStr(dbf.PhysicalRecNo));
dbf.FieldByName('Const').Text:=Edit1.Text;
Val(Edit2.Text,RealValue,code);
dbf.FieldByName('Value').Value:=RealValue;
dbf.Post; // НЕ УДАЕТСЯ ЗАПИСАТЬ !!!!!!!
dbf.Close;
end;
end.
В последнюю строку дбф-а добавляет значения из Edit-oв = OK
Хочу редактировать текущую (предпоследняя процедура)
и добавлять в указанную spin-ом строку, смещая остальные существующие строки вниз (последняя процедура)
В описании подобного нет ..... а очень надо НЕ через DBgrid с навигатором