Avatar billede elohim Nybegynder
07. februar 2002 - 19:11 Der er 10 kommentarer og
2 løsninger

DBGrid (Gange 2 Celler)

Hej Alle
Jeg er lidt ny i dette ENDNU ;-)
Er der nogen der ved hvordan man Ganger indholdet i 2 celler i en DBGrid
F.eks "antal" gange "stk. pris" = "resultat"
Avatar billede torbenmelander Nybegynder
07. februar 2002 - 19:22 #1
På tabellens BeforePost event skal du bare tilføje denne kode:

FakturaLinPris.Value := RoundDec2(FakturaLinAntal.Value * FakturaLinStkPris.Value)

hvor du selvfølge skal angive dine egne feltnavne :-)
Avatar billede torbenmelander Nybegynder
07. februar 2002 - 19:25 #2
Funktion RoundDec2 har du ikke, men koden til den er her:

function  RoundDec2( Value: Double ): Double;
begin { 5/1-99 1.2e }
  try
    Result := Trunc(Value) + (Round(Frac(Value)*100.0)/100.0);
  except
  on EInvalidOp do
    Result := Value;
  end;
end;
Avatar billede elohim Nybegynder
07. februar 2002 - 20:36 #3
HVAD gør jeg forkert ???

Pris = Feltnavn
Antal = Feltnavn
APris = Feltnavn
DBSalg = Databasenavn


procedure TDBSalg.DBGrid1Exit(Sender: TObject);
function  RoundDec2( Value: Double ): Double;
begin { 5/1-99 1.2e }
  try
    Result := Trunc(Value) + (Round(Frac(Value)*100.0)/100.0);
  except
  on EInvalidOp do
    Result := Value;
  end;
end;
Var
  Pris : TDBSalg;
  Apris : TDBSalg;
  Antal : TDBSalg;
begin
    Pris.DBSalg.value := RoundDec2(Antal.DBSalg.value * APris.DBSalg.value);

end;
Avatar billede stoney Nybegynder
07. februar 2002 - 23:19 #4
Du skal ligge din function efter implementation og før dine procedurer

implementation


function  RoundDec2( Value: Double ): Double;
begin { 5/1-99 1.2e }
  try
    Result := Trunc(Value) + (Round(Frac(Value)*100.0)/100.0);
  except
  on EInvalidOp do
    Result := Value;
  end;
end;
{$R *.dfm}

procedure TDBSalg.DBGrid1Exit(Sender: TObject);

Var
  Pris : TDBSalg;
  Apris : TDBSalg;
  Antal : TDBSalg;
begin
    Pris.DBSalg.value := RoundDec2(Antal.DBSalg.value * Pris.DBSalg.value);

end;

Stoney
Avatar billede elohim Nybegynder
07. februar 2002 - 23:57 #5
hej stoney
jeg får en "value"
undeclared identifier "value"
det kan jeg ikke forstå
Avatar billede elohim Nybegynder
08. februar 2002 - 00:25 #6
Jeg har flyttet function efter implementation men får samme fejl
Ubegribeligt for sådan en som mig der er ny
Avatar billede stoney Nybegynder
08. februar 2002 - 00:26 #7
Jeg så ikke lige hvor du havde sat din procedure.

Du skal IKKE sætte den på DBGridExit.
Her udfører den din kode når du forlader grid'en.

Du skal sætte koden på din table.beforepost

Jeg testede lige med et hurtigt eks. og det virker


implementation
function  RoundDec2( Value: Double ): Double;
begin { 5/1-99 1.2e }
  try
    Result := Trunc(Value) + (Round(Frac(Value)*100.0)/100.0);
  except
  on EInvalidOp do
    Result := Value;
  end;
end;

{$R *.dfm}

//ADOTable1 skal erstattes med dit table navn               

procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
begin
adotable1.FieldByName('ialt').Value :=  RoundDec2(adotable1.fieldbyname('pris').Value * adotable1.fieldbyname('antal').Value);

end;

have fun

Stoney
Avatar billede elohim Nybegynder
08. februar 2002 - 00:27 #8
300 poing til den der kan få dette til at virke

unit UDBSalg;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables, Grids, DBGrids, StdCtrls;

type
  TDBSalg = class(TForm)
    DBSalg: TTable;
    DSSalg: TDataSource;
    Luk: TButton;
    DBGrid1: TDBGrid;
    procedure LukClick(Sender: TObject);
    procedure DBGrid1Exit(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  DBSalg: TDBSalg;

implementation
function  RoundDec2( Value: Double ): Double;
begin { 5/1-99 1.2e }
  try
    Result := Trunc(Value) + (Round(Frac(Value)*100.0)/100.0);
  except
  on EInvalidOp do
    Result := Value;
  end;
end;
{$R *.DFM}
procedure TDBSalg.LukClick(Sender: TObject);
begin
  Close;
end;
procedure TDBSalg.DBGrid1Exit(Sender: TObject);
Var
  Pris : TDBSalg;
  Apris : TDBSalg;
  Antal : TDBSalg;
begin
    Pris.DBSalg.value := RoundDec2(Antal.DBSalg.value * APris.DBSalg.value);
end;
end.
Avatar billede stoney Nybegynder
08. februar 2002 - 00:29 #9
Det er kun i denne linie du skal erstatte adotable1 med dit table navn

procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);


Stoney
Avatar billede stoney Nybegynder
08. februar 2002 - 00:30 #10
Rolig nu

Du skal ikke fyre så mange point af på sådan et spørgsmål

:-)

Stoney
Avatar billede torbenmelander Nybegynder
08. februar 2002 - 06:39 #11
Du skal lave event'en på din ADOTable1.BeforePost ikke på DBGrid1.Exit ... Klik på din ADOTable1 og vælg fanebladdet Events ... nu skal du bare dobbeltklikke på BeforePost og indsætte denne kode:

adotable1.FieldByName('ialt').Value :=  RoundDec2(adotable1.fieldbyname('pris').Value * adotable1.fieldbyname('antal').Value);

Funktionen RoundDec2 skal du indsætte som du har gjort, men du skal lige tilføje linien:

function  RoundDec2( Value: Double ): Double;

under Private Declarations ...
Avatar billede torbenmelander Nybegynder
08. februar 2002 - 09:55 #12
Tak for point :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester