AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Insert erst beim schließen
Thema durchsuchen
Ansicht
Themen-Optionen

Insert erst beim schließen

Ein Thema von Tobinator · begonnen am 21. Aug 2009 · letzter Beitrag vom 24. Aug 2009
 
Tobinator

Registriert seit: 18. Mai 2008
Ort: Cottbus
53 Beiträge
 
#14

Re: Insert erst beim schließen

  Alt 21. Aug 2009, 20:45
Das Projekt ist mit DB ca. 8 MB groß, und das ist mit DSL-Light so ne sache... aber ich kann dir mal die beiden Units schicken, auf die es ankommt:

Code:
unit URech;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UKunden1, UKunden2, UArtikel1, UArtikel2, StdCtrls, UAbgabe, ComCtrls,
  Grids, DB, IBCustomDataSet, IBDatabase, frxClass, frxDBSet, UQuittung;

type
  TFRech = class(TForm)
    Kunde: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    LKdNr: TLabel;
    LAnr: TLabel;
    LName: TLabel;
    LTel: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    LOrt: TLabel;
    LStr: TLabel;
    LDat: TLabel;
    Button1: TButton;
    GroupBox1: TGroupBox;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    LGHA: TLabel;
    LGHQ: TLabel;
    BSuch: TButton;
    EMeng: TEdit;
    Label7: TLabel;
    StringGrid1: TStringGrid;
    GroupBox2: TGroupBox;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    LRestA: TLabel;
    LRestQ: TLabel;
    LSum: TLabel;
    LSumS: TLabel;
    LSumA: TLabel;
    LSumQ: TLabel;
    Button2: TButton;
    Button3: TButton;
    DS_Posten: TIBDataSet;
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    procedure Button1Click(Sender: TObject);
    procedure ArtTabelle_show;
    procedure BSuchClick(Sender: TObject);
    procedure EMengExit(Sender: TObject);
    procedure StringGrid1Click(Sender: TObject);
    procedure Gesamt;
    procedure clear;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  TArtikel=record
    Artikelnummer,
    Bezeichnung,
    Tauschware_str,
    Einheit:String;
    Menge,
    Tauschware,
    Tauschmenge,
    Tauschmenge_ges:integer;
    EzPreis,
    GesPreis,
    Steuer:Currency;
  end;

type
  TArtikeltabelle=Array of TArtikel;

var
  FRech: TFRech;
  GHA, GHQ, RestGHA, RestGHQ, GesGHA, GesGHQ:Integer;
  ArtT:TArtikelTabelle;
  len:integer;
  Sum,SumS:Currency;

  function NextFreePostenID:integer;


implementation

{$R *.dfm}

procedure TFRech.ArtTabelle_show;
var i:integer;
begin
if length(ArtT)>0 then
begin
for i := 0 to Stringgrid1.RowCount - 1 do
  Stringgrid1.Rows[i].Clear;
  Stringgrid1.RowCount:=2;

  Stringgrid1.Cells[0,0]:='Artikelnummer';
  Stringgrid1.Cells[1,0]:='Bezeichnung';
  Stringgrid1.Cells[2,0]:='Menge';
  Stringgrid1.Cells[3,0]:='Einheit';
  Stringgrid1.Cells[4,0]:='Einzelpreis';
  Stringgrid1.Cells[5,0]:='Steuer';
  Stringgrid1.Cells[6,0]:='Gesamtpreis';
  Stringgrid1.Cells[7,0]:='Tauschware';
  Stringgrid1.ColWidths[0]:=90;
  Stringgrid1.ColWidths[1]:=150;
  Stringgrid1.ColWidths[2]:=50;
  Stringgrid1.ColWidths[3]:=70;
  Stringgrid1.ColWidths[4]:=70;
  Stringgrid1.ColWidths[5]:=70;
  Stringgrid1.ColWidths[6]:=70;
  Stringgrid1.ColWidths[7]:=90;

  Stringgrid1.RowCount:=length(ArtT)+1;

  for i := 0 to length(ArtT)-1 do
  begin
    Stringgrid1.Cells[0,i+1]:=ArtT[i].Artikelnummer;
    Stringgrid1.Cells[1,i+1]:=(ArtT[i].Bezeichnung);
    Stringgrid1.Cells[2,i+1]:=(inttostr(ArtT[i].Menge));
    Stringgrid1.Cells[3,i+1]:=(ArtT[i].Einheit);
    Stringgrid1.Cells[4,i+1]:=(FloatToStrF(ArtT[i].EzPreis,ffFixed,10,2));
    Stringgrid1.Cells[5,i+1]:=(FloatToStrF(ArtT[i].Steuer,ffFixed,10,2));
    Stringgrid1.Cells[6,i+1]:=(FloatToStrF(ArtT[i].GesPreis,ffFixed,10,2));
    Stringgrid1.Cells[7,i+1]:=(ArtT[i].Tauschware_str);
  end;
  EMeng.Clear;
end;

end;

function NextFreePostenID:integer;
begin
  with FRech do
  begin
  DS_Posten.SelectSQL.Text:='SELECT * From POSTEN Order By ID';
  DS_Posten.Open;
  DS_Posten.Last;
  result:=DS_Posten.FindField('ID').AsInteger+1;
  end;

end;

procedure TFRech.BSuchClick(Sender: TObject);
var i : integer;
begin


  if FArtikel.ShowModal=mrok then
    begin
      len:=length(ArtT);
      EMeng.SetFocus;
      EMeng.Text:='1';
      EMeng.SelectAll;
      SetLength(ArtT,len+1);
      ArtT[len].Artikelnummer:=resArt.Artikelnummer;
      ArtT[len].Bezeichnung:=resArt.Bezeichnung;
      ArtT[len].Einheit:=resArt.Einheit;
      ArtT[len].Tauschware:=resArt.Tauschware;
      ArtT[len].Tauschmenge:=-resArt.Tauschmenge;
      ArtT[len].EzPreis:=resArt.VKPreisBrutto;
      ArtT[len].Steuer:=resArt.VKPreisBrutto - resArt.VKPreisNetto;
    end;

end;

procedure TFRech.Button1Click(Sender: TObject);
begin
  if FKundenverwaltung.showmodal=mrok then
  begin
    LKdNr.Caption:=resKd.KdNr;
    LAnr.Caption:=Anreden[resKd.Anrede];
    LName.Caption:=resKd.Name1;
    LTel.Caption:=resKd.Tel;
    LStr.Caption:=resKd.Strasse;
    LOrt.Caption:=resKd.PLZ+' '+resKd.Ort;
    LDat.Caption:=DateToStr(date);
    GHA:=GHLadenApfL(resKd.KdNr);
    GHQ:=GHLadenQuittL(resKd.KdNr);
    LGHA.Caption:=FloatToStr(GHLadenApfKG(resKd.KdNr)) +' kg/ ' + IntToStr(GHA)+ ' Liter';
    LGHQ.Caption:=FloatToStr(GHLadenQuittKG(resKd.KdNr)) +' kg/ ' + IntToStr(GHQ)+ ' Liter';
  end;
end;

procedure TFRech.Button2Click(Sender: TObject);  // Der OK-Button
  var s:string;
      i,k :Integer;
begin
if (LKdNr.Caption<>'') and (GesGHA>=-GHA) and (GesGHQ>=-GHQ) then
begin

  IBTransaction1.StartTransaction;

  s:=NextFreeVorgNr;
  with FAbgabe do
  begin
    DS_Vorgang.Open;
    DS_Vorgang.Insert;
    DS_Vorgang.FieldByName('Vorgangsnummer').AsString:=s;
    DS_Vorgang.FieldByName('Datum').AsDateTime:=Date;
    DS_Vorgang.FieldByName('Art').asinteger:=2;
    DS_Vorgang.FieldByName('Kunde').AsString:=FRech.LKdNr.Caption;
    DS_Vorgang.FieldByName('Posten').AsString:='';
    DS_Vorgang.FieldByName('TauschApfelKg').AsFloat:=0;
    DS_Vorgang.FieldByName('TauschApfelL').AsInteger:=GesGHA;
    DS_Vorgang.FieldByName('AufkaufA').AsFloat:=0;
    DS_Vorgang.FieldByName('TauschQuitteKg').AsFloat:=0;
    DS_Vorgang.FieldByName('TauschQuitteL').AsInteger:=GesGHQ;
    DS_Vorgang.FieldByName('AufkaufQ').AsFloat:=0;
    DS_Vorgang.FieldByName('BetragNetto').AsFloat:=Sum;
    DS_Vorgang.FieldByName('BetragBrutto').AsFloat:=Sum-SumS;

    DS_Vorgang.Post;

  end;


  k:=NextFreePostenID;
  DS_Posten.Open;

  for i := 0 to length(ArtT) - 1 do
    begin
      DS_Posten.Insert;
      DS_Posten.FieldValues['ID']:=k+i;
      DS_Posten.FieldValues['Vorgangsnummer']:=s;
      DS_Posten.FieldValues['Artikelnummer']:=ArtT[i].Artikelnummer;
      DS_Posten.FieldValues['Menge']:=ArtT[i].Menge;
      DS_Posten.FieldValues['BetragNetto']:=ArtT[i].GesPreis;
      DS_Posten.FieldValues['BetragBrutto']:=ArtT[i].GesPreis-ArtT[i].Steuer;
      DS_Posten.Post;
    end;

  IBTransaction1.Commit;

  modalresult:=mrOk;
  clear;
  hide;
  showrep(s);
end;

end;

procedure TFRech.Button3Click(Sender: TObject);
begin
  clear;
  hide;
end;

procedure TFRech.clear;
var i:integer;
begin
  LKdNr.Caption:='';
  LAnr.Caption:='';
  LName.Caption:='';
  LTel.Caption:='';
  LStr.Caption:='';
  LOrt.Caption:='';
  LDat.Caption:='';
  GHA:=0;
  GHQ:=0;
  LGHA.Caption:='';
  LGHQ.Caption:='';
  for i := 0 to length(ArtT) - 1 do
  begin
    ArtT[i].Artikelnummer:='';
    ArtT[i].Bezeichnung:='';
    ArtT[i].Tauschware_str:='';
    ArtT[i].Einheit:='';
    ArtT[i].Menge:=0;
    ArtT[i].Tauschware:=0;
    ArtT[i].Tauschmenge_ges:=0;
    ArtT[i].EzPreis:=0;
    ArtT[i].GesPreis:=0;
    ArtT[i].Steuer:=0;
  end;

  SetLength(ArtT,0);

  LRestA.Caption:='';
  LRestQ.Caption:='';

  LSum.Caption:='';
  LSumS.Caption:='';
  LSumA.Caption:='';
  LSumQ.Caption:='';
  EMeng.Clear;

  for i := 0 to Stringgrid1.RowCount - 1 do
  Stringgrid1.Rows[i].Clear;
  Stringgrid1.RowCount:=2;

  ResKd:=K2;
  ResArt:=A2;

end;

procedure TFRech.EMengExit(Sender: TObject);
begin
  if resArt.Artikelnummer<>'' then
    begin
    ArtT[len].Menge:=StrToIntDef(EMeng.Text,0);
    ArtT[len].Tauschmenge_ges:=StrToIntDef(EMeng.Text,0)*ArtT[len].Tauschmenge;
    ArtT[len].GesPreis:=StrToIntDef(EMeng.Text,0)*ArtT[len].EzPreis;
    ArtT[len].Tauschware_str:=Tauschwaren[ArtT[len].Tauschware]+' ('+InttoStr(StrToIntDef(EMeng.Text,0)*ArtT[len].Tauschmenge)+' Liter)';
    end
    else
    begin
    //ArtT[Stringgrid1.Row-1].Menge:=StrToIntDef(EMeng.Text,0);
    //ArtT[Stringgrid1.Row-1].Tauschmenge_ges:=StrToIntDef(EMeng.Text,0)*ArtT[len].Tauschmenge;
    //ArtT[Stringgrid1.Row-1].GesPreis:=StrToIntDef(EMeng.Text,0)*ArtT[len].EzPreis;
    //ArtT[Stringgrid1.Row-1].Tauschware_str:=Tauschwaren[ArtT[len].Tauschware]+' ('+InttoStr(StrToIntDef(EMeng.Text,0)*ArtT[len].Tauschmenge)+' Liter)';
    end;
  ArtTabelle_show;
  resArt:=A2;
  gesamt;
end;

procedure TFRech.Gesamt;
var i:integer;
begin
  RestGHA:=0;
  RestGHQ:=0;
  GesGHA:=0;
  GesGHQ:=0;
  Sum:=0;
  SumS:=0;

  for i := 0 to length(ArtT) - 1 do
  begin
  if ArtT[i].Tauschware=1 then GesGHA:=GesGHA+ArtT[i].Tauschmenge_ges;
  if ArtT[i].Tauschware=2 then GesGHQ:=GesGHQ+ArtT[i].Tauschmenge_ges;
  Sum:=Sum+ArtT[i].GesPreis;
  SumS:=SumS+ArtT[i].Steuer;
  end;

  RestGHA:=GHA+GesGHA;
  RestGHQ:=GHQ+GesGHQ;

  LRestA.Caption:=inttostr(RestGHA)+' Liter';
  LRestQ.Caption:=inttostr(RestGHQ)+' Liter';

  LSum.Caption:=floattostrf(Sum,ffFixed,10,2);
  LSumS.Caption:=floattostrf(SumS,ffFixed,10,2);
  LSumA.Caption:=inttoStr(GesGHA)+' Liter';
  LSumQ.Caption:=inttoStr(GesGHQ)+' Liter';

end;

procedure TFRech.StringGrid1Click(Sender: TObject);
begin
if Stringgrid1.Row>0 then
  EMeng.Text:=inttostr(ArtT[Stringgrid1.Row-1].Menge);
end;

end.
Die Unit, die es einfügt.

Code:
unit UQuittung;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, frxClass, frxDBSet, DB, IBCustomDataSet, IBQuery, StdCtrls,
  IBDatabase;

type
  TFQuittung = class(TForm)
    frxReport1: TfrxReport;
    frxDBDataset5: TfrxDBDataset;
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    IBDataSet1: TIBDataSet;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FQuittung: TFQuittung;

  procedure showrep(VgNr:String);

implementation

{$R *.dfm}

procedure showrep(VgNr:String);
var a : TStrings;
begin

a:=TStringList.Create;
with FQuittung do
begin
  show;
  a.Clear;
  a.Add('SELECT V.VORGANGSNUMMER, V.DATUM, V.KUNDE, V.TAUSCHAPFELL, V.TAUSCHQUITTEL, V.BETRAGBRUTTO, ' + 'P.VORGANGSNUMMER, P.ARTIKELNUMMER, P.MENGE, P.BETRAGBRUTTO, A.ARTIKELNUMMER, A.BEZEICHNUNG, A.VKPREISBRUTTO, K.KUNDENNUMMER, K.ANREDE, K.NAME1, K.TEL, K.STRASSE, K.PLZ, K.ORT');
  a.Add('FROM');
  a.Add(' VORGANG V,');
  a.Add(' POSTEN P,');
  a.Add('  ARTIKEL A,');
  a.Add(' KUNDEN K');
  a.Add('WHERE');
  a.Add(' V.VORGANGSNUMMER = '+chr(39)+VgNr+chr(39)+' AND');
  a.Add(' P.VORGANGSNUMMER = V.Vorgangsnummer AND');
  a.Add(' A.ARTIKELNUMMER = P.Artikelnummer AND');
  a.Add(' V.KUNDE = K.KUNDENNUMMER');
  IBDataSet1.SelectSQL:=a;
  IBDataSet1.RefreshSQL:=a;

  IBDataSet1.Open;
  IBDataset1.Refresh;

  frxReport1.ShowReport(true);
  Memo1.Lines:=IBDataSet1.SelectSQL;
  showmessage(IBDataSet1.FieldByName('Vorgangsnummer').AsString);
end;


end;

procedure TFQuittung.Button1Click(Sender: TObject);
begin
  frxReport1.ShowReport(true);
end;

procedure TFQuittung.Button2Click(Sender: TObject);
begin
  showrep('V.00073'); // der letzte Datensatz
end;

end.
Die Unit, die den Report erstellen soll.

Zur erklärung: Das soll eine Art Buchhaltungs-Programm werden für ein Lohnobst annahme- und umtauschstelle.
(Ich weis, das es noch nicht wirklich effektiv arbeitet, aber es muss erstmal fertig werden. Überarbeitet wir später )
Tobias
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz