Einzelnen Beitrag anzeigen

Impulz

Registriert seit: 19. Aug 2011
Ort: Lübeck
68 Beiträge
 
Delphi 7 Professional
 
#1

2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 12:43
Delphi-Version: 5
Liebe Community,

ich habe nun ein Problem, zu dem ich nichts finde und davon garkeine vorstellung und ahnung habe... .

Ich sag sag schon mal vorab, die quelltexte sind lang, aber da man irgendwie für die aufgabe alles braucht kann ich da auch nix weglassen.


Was ich habe: eine Datenbankoberfläche bestehend aus 12 Units.
und eine IBExpert Datenbank

ich habe eine Logikschicht, in der die Logikgespeichert wird.


BEISPIELE

ich habe eine: Kundentabellenanzeige und eine für Sendungsverfolgung eine für Bücher und eine für autoren.

Stellt euch mal vor ihr ruft die Kunden auf:

was ihr als benutzer nicht seht: (KUNDEN_ID)
was iht sehen könnt: Vorname und Nachname

wenn ihr nun auf den Kunden mit einem Linksklick draufklickt und ihn anwählt erscheint ein PopUpMenu ein weiterer Klick öffnet ein StringGrid was folgendes zeigen soll:



KUNDEN VORNAME KUNDEN NACHNAME SENDUNGS_ID RECHNUNGS_ID RECHNUNGSBETRAG BUCH_NAME AUTOR NAME


NUN DIE FRAGE::::::


Wie kriege ich das hin eine neue Unit anzulegen dort ein Logisches Objekt zu verankern, wodrauf meine Logik zugreifen kann und die daten abrufen kann...
ich muss also mehrere Objekte Kapseln....



NUN HIER IST DER QUELLCODE_________________________________________ ____________________________


OBS(Oberfläche)
Code:
unit OBS;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, ExtCtrls, ComCtrls,DataBaseConnect,UKunde,UBuecher,
  USendungsverfolgung,IB_Dialogs, DB, ADODB, IBServices,IBODataset, IB_Components,
  IB_Session,ColorButton, OleCtrls,Autoren, SHDocVw,shellapi, Menus, UDatenEditieren,
  Kundeninfo,Grids;

type
  TStartseite = class(TForm)
  rgAuswahl: TRadioGroup;
    pmEdit: TPopupMenu;
    Bea1: TMenuItem;
    Loeschen1: TMenuItem;
    lvAuswahl: TListView;
    Hinzufgen1: TMenuItem;
    imgLogo: TImage;
    imglschen: TImage;
    imgSLogan: TImage;
    pmKunden: TPopupMenu;
    Sendungen: TMenuItem;
    Rechnungen1: TMenuItem;
    mniBestellteBcher1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Loeschen1Click(Sender: TObject);
    procedure Bea1click (Sender: TObject);
    procedure lvAuswahlClick(Sender: TObject);
    procedure Hinzufgen1Click(Sender: TObject);
    procedure lvAuswahlColumnClick(Sender: TObject; Column: TListColumn);
    procedure imgLschnClick(Sender: TObject);
    function addKundetoLV (AKunde:TKunde): TKundeList;
    function addBuchtoLV (ABuch:TBuch): TBuchList;
    function addSendungetoLV (ASendung:TSendung): TSendungList;
    function addAutortoLV (AAutor:TAutor): TAutorList;
    procedure rgAuswahlClick(Sender: TObject);
    procedure SendungenClick(Sender: TObject);
  private
    { Private declarations }
  public
    connect : tdataconnect;
  end;

var
  Startseite: TStartseite;

implementation

{$R *.dfm}
uses Anmeldefenster, Math;

procedure TStartseite.FormCreate(Sender: TObject);
var
  i: integer;
  cols: array of string;
begin
  connect :=TDataconnect.create('SYSDBA','masterkey','127.0.0.1','c:\Dbs\FirstDB.fdb');
  lvAuswahl.ViewStyle:=vsReport;
  imgLogo.Align:=alClient;
  for i := 0 to length(cols)-1 do
  begin
    lvAuswahl.Columns.Add();
    lvAuswahl.Column[i].Caption:= cols[i];
    lvAuswahl.ShowColumnHeaders:=true;
    lvAuswahl.ViewStyle:=vsReport;
  end;
end;

procedure TStartseite.FormActivate(Sender: TObject);
var
  res : TModalResult;
begin
  res:= PasswordDlg.ShowModal;
  if res=mrCancel then
  begin
    Application.Terminate;
  end;
end;

procedure TStartseite.Loeschen1Click(Sender: TObject);
var
  Kunde: TKunde;
  Sendung: TSendung;
  Autor:TAutor;
  Buch: TBuch;
begin
  if IsPositiveResult( MessageBoxW(0, 'Sicher?', 'Warning', MB_YESNO + MB_ICONWARNING) ) then
  begin
    if (rgAuswahl.ItemIndex= 0)then
    begin
      Kunde:= TKunde(lvAuswahl.ItemFocused.SubItems.Objects[0]);
      connect.DeleteKunde(Kunde);
      lvAuswahl.DeleteSelected();
    end else
    if (rgAuswahl.ItemIndex=1)then
    begin
      Sendung:= TSendung(lvAuswahl.ItemFocused.SubItems.Objects[0]);
      connect.DeleteSendung(Sendung);
      lvAuswahl.DeleteSelected();
    end else
    if (rgAuswahl.ItemIndex=2)then
    begin
      Autor:= TAutor(lvAuswahl.ItemFocused.SubItems.Objects[0]);
      connect.DeleteAutor(Autor);
      lvAuswahl.DeleteSelected();
    end else
    if (rgAuswahl.ItemIndex=3)then
    begin
      Buch:= TBuch(lvAuswahl.ItemFocused.SubItems.Objects[0]);
      connect.DeleteBuecher(Buch);
      lvAuswahl.DeleteSelected();
    end else
  end;
end;

procedure TStartseite.Bea1click(Sender:TObject);
var
  Kunde :Tkunde;
  neuKunde:TKunde;
  neuItem: TListItem;
  Sendung :TSendung;
  neuSendung:TSendung;
  Autor :TAutor;
  neuAutor:TAutor;
  Buch :TBuch;
  neuBuch:TBuch;
  KItem: tLISTitem;
  SItem: TListItem;
  AItem: TListItem;
  BItem: TListitem;
begin
  lvAuswahl.Refresh;
  begin
    if (rgAuswahl.ItemIndex = 0) then
    begin
      Kunde:= TKunde(lvAuswahl.ItemFocused.SubItems.Objects[0]);
      Dateneditieren.giveKundeDataToGrid(Kunde);
      if IsPositiveResult(Dateneditieren.ShowModal()) then
      begin
        Kunde.Vorname := Dateneditieren.StrGrAuswahl.Cells[0,0];
        Kunde.Nachname := Dateneditieren.StrGrAuswahl.Cells[1,0];
        connect.SaveKunde(Kunde);
        kitem:=lvAuswahl.ItemFocused;
        KItem.SubItems[0] :=Kunde.Vorname;
        Kitem.SubItems[1] := Kunde.Nachname;
      end else
      begin
        IsNegativeResult(Dateneditieren.ShowModal())
      end;
    end else
    if (rgAuswahl.ItemIndex = 1) then
    begin
      sendung:= TSendung(lvAuswahl.ItemFocused.SubItems.Objects[0]);
      Dateneditieren.giveSendungDataToGrid(Sendung);
      if IsPositiveResult(Dateneditieren.ShowModal()) then
      begin
        Sendung.Status := Dateneditieren.StrGrAuswahl.Cells[0,0];
        Sendung.Rechnung := Dateneditieren.StrGrAuswahl.Cells[1,0];
        connect.SaveSendung(Sendung);
        SItem:=lvAuswahl.ItemFocused;
        Sitem.SubItems[0] :=Sendung.Status;
        Sitem.SubItems[1] :=Sendung.Rechnung;
      end else
      begin
        IsNegativeResult(Dateneditieren.ShowModal())
      end;
    end else
    if (rgAuswahl.ItemIndex = 2) then
    begin
      Autor:= TAutor(lvAuswahl.ItemFocused.SubItems.Objects[0]);
      Dateneditieren.giveAutorDataToGrid(Autor);
      if IsPositiveResult(Dateneditieren.ShowModal()) then
      begin
        Autor.Vorname := Dateneditieren.StrGrAuswahl.Cells[0,0];
        Autor.Nachname := Dateneditieren.StrGrAuswahl.Cells[1,0];
        connect.SaveAutor(Autor);
        Aitem:=lvAuswahl.ItemFocused;
        AItem.SubItems[0] :=Autor.Vorname;
        Aitem.SubItems[1] := Autor.Nachname;
      end else
      begin
        IsNegativeResult(Dateneditieren.ShowModal())
      end;
    end else
    if (rgAuswahl.ItemIndex = 3) then
    begin
      Buch:= TBuch(lvAuswahl.ItemFocused.SubItems.Objects[0]);
      Dateneditieren.giveBuchDataToGrid(Buch);
      if IsPositiveResult(Dateneditieren.ShowModal()) then
      begin
        Buch.Preis := (StrToInt(Dateneditieren.StrGrAuswahl.Cells[0,0]));
        Buch.Name := Dateneditieren.StrGrAuswahl.Cells[1,0];
        connect.SaveBuch(Buch);
        Bitem:=lvAuswahl.ItemFocused;
        BItem.Caption :=IntToStr(Buch.Preis);
        Bitem.SubItems[0] := Buch.name;
      end else
      begin
        IsNegativeResult(Dateneditieren.ShowModal())
      end;
    end;
    lvAuswahl.Refresh;
    lvAuswahl.Repaint;
  end;
end;


procedure TStartseite.lvAuswahlClick(Sender: TObject);
begin
    lvAuswahl.Selected.Focused:=true;
    pmKunden.Popup(1355,305);
   
end;



procedure TStartseite.Hinzufgen1Click(Sender: TObject);
var
  Kunde: TKunde;
  Buch: TBuch;
  Sendung: TSendung;
  Autor: TAutor;
begin
  Dateneditieren.StrGrAuswahl.Cells[0,0]:='';
  Dateneditieren.StrGrAuswahl.Cells[1,0]:='';
  if IsPositiveResult(Dateneditieren.ShowModal()) then
  begin
    case (rgAuswahl.ItemIndex) of
      0 : begin
            Kunde :=TKunde.create (0,Dateneditieren.StrGrAuswahl.Cells[0,0],Dateneditieren.strgrauswahl.cells[1,0]);
            connect.LegeKundeAn(Kunde);
            addKundetoLV(Kunde);

          end;
      1 : begin
            Sendung:= TSendung.Create(0,Dateneditieren.StrGrAuswahl.Cells[0,0],Dateneditieren.strgrauswahl.cells[1,0]);
            connect.LegeSendungAn(Sendung);
            addSendungetoLV(Sendung);
          end;
      2 : begin
            Autor:= TAutor.Create(0,dateneditieren.StrGrAuswahl.Cells[0,0],Dateneditieren.strgrauswahl.cells[1,0]);
            connect.LegeAutorAn(Autor);
            addAutortoLV(Autor);
          end;
      3 : begin
            Buch:= TBuch.Create(0,StrToInt(Dateneditieren.StrGrAuswahl.Cells[0,0]),Dateneditieren.StrGrAuswahl.Cells[1,0]);
            connect.LegeBuchAn(Buch);
            addBuchtoLV(Buch);
          end;
    else
      begin
        ShowMessage('Ups, beim Anlegen des Kunden lief etwas schief');
      end;
    end;
  end;
end;

procedure TStartseite.lvAuswahlColumnClick(Sender: TObject;
  Column: TListColumn);
var
  kunde: TKunde;
begin
  connect.orderbyID(Kunde);
end;

procedure TStartseite.imgLschnClick(Sender: TObject);
begin
  lvAuswahl.Clear;
  rgAuswahl.ItemIndex:= -1;
end;

function TStartseite.addKundetoLV(AKunde: TKunde): TKundeList;
var
  myItemAddKtoLV: TListItem;
begin
  myItemAddKtoLV:= lvAuswahl.Items.Add;
  myItemAddKtoLV.Caption:=(AKunde.Vorname);
  myItemAddKtoLV.SubItems.Add(AKunde.Nachname);
end;

function TStartseite.addAutortoLV(AAutor: TAutor): TAutorList;
var
  myItemAddKtoLV: TListItem;
begin
  myItemAddKtoLV:= lvAuswahl.Items.Add;
  myItemAddKtoLV.Caption:=(AAutor.Vorname);
  myItemAddKtoLV.SubItems.Add(AAutor.Nachname);
end;

function TStartseite.addBuchtoLV(ABuch: TBuch): TBuchList;
var
  myItemAddKtoLV: TListItem;
begin
  myItemAddKtoLV:= lvAuswahl.Items.Add;
  myItemAddKtoLV.Caption:=(IntToStr(ABuch.Preis));
  myItemAddKtoLV.SubItems.Add(ABuch.name);
end;

function TStartseite.addSendungetoLV(ASendung: TSendung): TSendungList;
var
  myItemAddKtoLV: TListItem;
begin
  myItemAddKtoLV:= lvAuswahl.Items.Add;
  myItemAddKtoLV.Caption:=(ASendung.Status);
  myItemAddKtoLV.SubItems.Add(ASendung.Rechnung);
end;

procedure TStartseite.rgAuswahlClick(Sender: TObject);
var
  all :integer ;
  KundeList: TKundeList;
 Kunde : TKunde;
  MyListItem : TListItem;
  Blist : TBuchList ;
  Buch : TBuch;
  neuBuch: integer;
  Slist : TSendungList ;
  Sendung : TSendung;
  Alist : TAutorList ;
  Autor : TAutor;

begin
  If ((rgAuswahl.ItemIndex=0) or (rgAuswahl.ItemIndex=1) or (rgAuswahl.ItemIndex = 2)
     or (rgAuswahl.ItemIndex=3)) then
  begin
  if (rgAuswahl.ItemIndex = 0) then
  begin
    KundeList:=connect.getKunden();
    lvAuswahl.clear();
    lvAuswahl.Column[0].Caption:= 'Vorname' ;
    lvAuswahl.Column[1].Caption:= 'Nachname';
    for all:=0 to KundeList.Count-1 do
    begin
      Kunde:=KundeList.getKundeByIndex(all);
      MyListItem:= lvAuswahl.Items.Add();
      MyListItem.caption:=(Kunde.Vorname);
      MyListItem.SubItems.addObject(Kunde.Nachname,Kunde);
      MyListItem.SubItems.AddObject(IntToStr(kunde.ID),kunde) ;
    end;
  end else
  if (rgAuswahl.ItemIndex = 3) then
  begin
    Blist:=connect.getBuecher;
    lvAuswahl.clear();
    lvAuswahl.Column[0].Caption:= 'Preis' ;
    lvAuswahl.Column[1].Caption:= 'Name';
    for all:=0 to Blist.Count-1 do
    begin
      Buch:=Blist.getBuchByIndex(all);
      MyListItem:= lvAuswahl.Items.Add();
      MyListItem.caption:= IntToStr((Buch.preis));
      MyListItem.SubItems.addObject(Buch.Name,Buch);
    end;
  end else
  if (rgAuswahl.ItemIndex = 1) then
  begin
    Slist:=connect.getSendung;
    lvAuswahl.Clear();
    lvAuswahl.Column[0].Caption:= 'Status' ;
    lvAuswahl.Column[1].Caption:= 'Rechnung';
    for all:=0 to Slist.Count-1 do
    begin
      Sendung:=Slist.getSendungByIndex(all);
      MyListItem:= lvAuswahl.Items.Add();
      MyListItem.Caption:= (Sendung.Status);
      MyListItem.SubItems.AddObject(Sendung.Rechnung,Sendung);
    end;
  end else
  if (rgAuswahl.ItemIndex = 2) then
  begin
    Alist:=connect.getAutor;
    lvAuswahl.clear();
    lvAuswahl.Column[0].Caption:= 'Vorname' ;
    lvAuswahl.Column[1].Caption:= 'Nachname';
    for all:=0 to Alist.Count-1 do
    begin
      Autor:=Alist.getAutorByIndex(all);
      MyListItem:= lvAuswahl.Items.Add();
      MyListItem.Caption:= (Autor.Vorname);
      MyListItem.SubItems.AddObject(Autor.Nachname,Autor);
    end;
  end;
  end else
  begin
    ShowMessage('wählen Sie bitte eine Option');
  end;

end;


procedure TStartseite.SendungenClick(Sender: TObject);
var
  kunde:tkunde;
  myitem: tlistitem;
  Sendung: TSendung;
  SList: TSendungList;
begin
  Kunde:= TKunde(lvAuswahl.ItemFocused.SubItems.Objects[0]);
  SList:= connect.getSendungByKunde(Kunde);
//  Sendung:=Slist.getSendungByIndex(0);
//   connect.getPreis(Sendung);
  KunInformation.getdataforgrid(Kunde,Slist);
//  connect.getKundenInformation(Sendung,kunde);

  KunInformation.ShowModal();
end;



HIER IST MEINE LOGIKUNIT die später auf die neue zugreifen soll______________________________________________ _



Code:
unit DataBaseConnect;

interface

uses
  Windows, SysUtils, Variants, Classes,controls,
  Dialogs, ComCtrls, IBODataset, IB_Components, IB_Session,IB_Dialogs,UKunde,UBuecher
  ,Usendungsverfolgung,Autoren,URechnung;

type TDataconnect = Class(TObject)
  private
    FDataBase : TIBODatabase;
    function IsConnected() : Boolean;
  public
    function getKunden():TKUndeList;
    function getBuecher():TBuchList;
    function getSendung():TSendungList;
    function getSendungByKunde(AKunde:TKunde): TSendungList;
    function getAutor(): TAutorList;
    procedure SaveKunde(AKunde : TKunde);
    procedure SaveSendung(ASendung: TSendung);
    procedure SaveAutor(AAutor: TAutor);
    procedure SaveBuch(Abuch: TBuch);
    procedure DeleteKunde (Akunde: TKunde);
    procedure DeleteBuecher (ABuch: TBuch);
    procedure DeleteSendung (Asendung:TSendung);
    procedure DeleteAutor (AAutor:TAutor);
    procedure LegeKundeAn (Akunde: TKunde);
    procedure LegeBuchAn (ABuch:TBuch);
    procedure LegeAutorAn (AAutor:TAutor);
    procedure LegeSendungAn (ASendung:TSendung);
    procedure ORDERbyID (AKunde:TKunde);
    procedure getPreis (Asendung:Tsendung);
    constructor create(User,Passw,Server,Path: string);
    property Connected : Boolean read IsConnected;
  end;
implementation

uses DateUtils, Grids, Forms, DB;

{ TDataconnect }
constructor TDataconnect.create(User,Passw,Server,Path: string);
begin
  FDataBase := TIBODatabase.Create(nil);
  FDataBase.Username := User;
  FDataBase.Password := Passw;
  FDataBase.Server := Server;
  FDataBase.Path := path;
  FDataBase.Protocol := cpTCP_IP;
  try
    FDataBase.Connect()
  except
    on e:Exception do
    begin
      ShowMessage('Verbindung fehlgeschlagen. Überprüfen Sie ihre Login Daten.');
    end;
  end;
end;

function TDataconnect.getKunden():TKundeList;
var
   Kunde  : TKunde;
   KundeQuery : TIBOQuery;
   KundeTransa : TIBOTransaction;
begin
  Result:= TKundeList.create();
  KundeQuery:= TIBOQuery.Create(nil);
  KundeQuery.SQL.Text:= 'SELECT * FROM KUNDEN ';
  KundeQuery.IB_Connection:= FDataBase;
  KundeTransa:= TIBOTRansaction.Create(nil);
  KundeTransa.IB_Connection:= FDataBase;
  KundeQuery.IB_Transaction:= KundeTransa;
  KundeTransa.StartTransaction();
  try
    KundeQuery.Open();
    while not KundeQuery.Eof do
    begin
     kunde:= TKunde.Create(KundeQuery.Fieldbyname('Kunden_ID').asInteger,
                            KundeQuery.FieldbyName('Vorname').asString,
                            KundeQuery.FieldbyName('nachname').AsString);
      Result.addkunde(Kunde);
      KundeQuery.Next();
    end;
    KundeTransa.Commit();
  except
    on e:Exception do
    begin
      ShowMessage('FEHLER IN GETKUNDEN');
      KundeTransa.Rollback();
    end;
  end;
end;

function TDataconnect.getBuecher():TBuchList;
var
  Buch  : TBuch;
  BuchQuery : TIBOQuery;
  BuchTransa : TIBOTransaction;
begin
  Result:= TBuchList.create();
  BuchQuery:= TIBOQuery.Create(nil);
  BuchQuery.SQL.Text:= 'SELECT * FROM BUECHER ';
  BuchQuery.IB_Connection:= FDataBase;
  BuchTransa:= TIBOTRansaction.Create(nil);
  BuchTransa.IB_Connection:= FDataBase;
  BuchQuery.IB_Transaction:= BuchTransa;
  BuchTransa.StartTransaction();
  try
    BuchQuery.Open();
    while not BuchQuery.Eof do
    begin
      Buch:= TBuch.Create (BuchQuery.Fieldbyname('Buch_ID').asInteger,
                          BuchQuery.FieldbyName('Preise').asInteger,
                            BuchQuery.FieldbyName('Name').asString,);
      Result.addBuch(Buch);
      BuchQuery.Next();
    end;
    BuchTransa.Commit();
  except
    on e:Exception do
    begin
      ShowMessage('FEHLER IN GETBUECHER');
      BuchTransa.Rollback();
    end;
  end;
end;

function TDataconnect.getSendung():TSendungList;
var
  Sendung  : TSendung;
  SendungQuery : TIBOQuery;
  SendungTransa : TIBOTransaction;
begin
  Result:= TSendungList.create();
  SendungQuery:= TIBOQuery.Create(nil);
  SendungQuery.SQL.Text:= 'SELECT * from Sendungsverfolgung';
  SendungQuery.IB_Connection:= FDataBase;
  SendungTransa:= TIBOTRansaction.Create(nil);
  SendungTransa.IB_Connection:= FDataBase;
  SendungQuery.IB_Transaction:= SendungTransa;
  SendungTransa.StartTransaction();

  try
    SendungQuery.Open();
    while not SendungQuery.Eof do
    begin
      Sendung:= TSendung.Create(SendungQuery.Fieldbyname('Sendungsverfolgung_ID').asInteger,
                            SendungQuery.FieldbyName('Status').asString,
                           SendungQuery.FieldbyName('Rechnung').AsString);
      Result.addSendung(Sendung);
      SendungQuery.Next();
    end;
    SendungTransa.Commit();
  except
    on e:Exception do
    begin
      ShowMessage('FEHLER IN GET SENDUNG');
      SendungTransa.Rollback();
    end;
  end;
end;

function TDataconnect.getAutor():TAutorList;
var
  Autor  : TAutor;
  AutorQuery : TIBOQuery;
  AutorTransa : TIBOTransaction;
begin
  Result:= TAutorList.create();
  AutorQuery:= TIBOQuery.Create(nil);
  AutorQuery.SQL.Text:= 'SELECT * FROM Autoren ';
  AutorQuery.IB_Connection:= FDataBase;
  AutorTransa:= TIBOTRansaction.Create(nil);
  AutorTransa.IB_Connection:= FDataBase;
  AutorQuery.IB_Transaction:= AutorTransa;
  AutorTransa.StartTransaction();

  try
    AutorQuery.Open();
    while not AutorQuery.Eof do
    begin
      Autor:= TAutor.Create(AutorQuery.Fieldbyname('Autor_ID').asInteger,
                            AutorQuery.FieldbyName('Vorname').asString,
                            AutorQuery.FieldbyName('nachname').AsString);
      Result.addautor(Autor);
      AutorQuery.Next();
    end;
    AutorTransa.Commit();
  except
    on e:Exception do
    begin
      ShowMessage('fehler in get Autor');
      AutorTransa.Rollback();
    end;
  end;
end;

function TDataconnect.IsConnected: Boolean;
begin
  Result:= self.FDataBase.Connected;
end;

procedure TDataconnect.SaveKunde(AKunde: TKunde);
var
  SaveKuQuery : TIBOQuery;
  SaveKuTransa : TIBOTransaction;
begin
  SaveKuQuery:= TIBOQuery.Create(nil);
  SaveKuQuery.IB_Connection:= FDataBase;
  SaveKuTransa:= TIBOTRansaction.Create(nil);
  SaveKuTransa.IB_Connection:= FDataBase;
  SaveKuQuery.SQL.Text := 'UPDATE Kunden k SET K.Vorname = '+QuotedStr(AKunde.Vorname)+','+
  'K.Nachname ='+QuotedStr(AKunde.Nachname)+' WHERE k.Kunden_ID = '''+(inttoStr(AKunde.ID))+ ''';';
  SaveKuQuery.ExecSQL();
  SaveKuTransa.Commit;
  SaveKuQuery.Free;
  SaveKuTransa.Free;
end;

procedure TDataconnect.deleteKunde(AKunde: TKunde);
var
  delKuQuery: TIBOQuery;
  delKuTransa: TIBOTransaction;
begin
  delKuQuery:= TIBOQuery.Create(nil);
  try
    delKuQuery.IB_Connection:=FDataBase;
    delKuTransa:= TIBOTransaction.Create(nil);
    try
      delKuTransa.IB_Connection:= FDataBase;
      delKuQuery.IB_Connection:=delKuQuery.IB_Connection;
      try
          delKuQuery.SQL.Text :=' DELETE FROM Sendungsverfolgung S WHERE s.Kunden_ID = :id';
          delKuQuery.ParamByName('id').Value := AKunde.ID;
          delKuQuery.ExecSQL();
          delKuQuery.SQL.Text :=' DELETE FROM RECHNUNGEN R WHERE r.Kunden_ID = :id';
          delKuQuery.ParamByName('id').value := AKunde.ID;
          delKuQuery.ExecSQL();
          delKuQuery.SQL.Text :=' DELETE FROM Kunden K WHERE k.Kunden_ID = :id';
          delKuQuery.ParamByName('id').Value := AKunde.ID;
          delKuQuery.ExecSQL();
          delKuTransa.Commit;
      except
        on E: Exception do
          begin
            ShowMessage('FEHLER IN deleteKunde');
            delKuTransa.Rollback;
          end;
      end;
    finally
      delKuTransa.Free;
    end;
  finally
    delKuQuery.Free;
  end;

end;



procedure TDataconnect.SaveAutor(AAutor: TAutor);

var
  SaveAuQuery : TIBOQuery;
  SaveAuTransa : TIBOTransaction;
begin
  SaveAuQuery:= TIBOQuery.Create(nil);
  SaveAuQuery.IB_Connection:= FDataBase;
  SaveAuTransa:= TIBOTRansaction.Create(nil);
  SaveAuTransa.IB_Connection:= FDataBase;
  SaveAuQuery.SQL.Text := 'UPDATE Autoren A SET A.Vorname = '+QuotedStr(AAutor.Vorname)+','+
  'A.Nachname ='+QuotedStr(AAutor.Nachname)+' WHERE A.Autor_ID = '''+(inttoStr(AAutor.ID))+ ''';';
  SaveAuQuery.ExecSQL();
  SaveAuTransa.Commit;
  SaveAuQuery.Free;
  SaveAuTransa.Free;
end;


procedure TDataconnect.SaveBuch(Abuch: TBuch);
var
  SaveBuQuery : TIBOQuery;
  SaveBuTransa : TIBOTransaction;
begin
  SaveBuQuery:= TIBOQuery.Create(nil);
  SaveBuQuery.IB_Connection:= FDataBase;
  SaveBuTransa:= TIBOTRansaction.Create(nil);
  SaveBuTransa.IB_Connection:= FDataBase;
  try
    SaveBuQuery.SQL.Text := 'UPDATE Buecher B SET B.Preise = '+inttoStr(Abuch.Preis)+','+
    'B.Name ='+QuotedStr(Abuch.name)+' WHERE B.Buch_ID = '+(inttoStr(Abuch.ID));
    SaveBuQuery.ExecSQL();
    SaveBuTransa.Commit;
  except
    on e:Exception do
    begin
      showMessage ('FEHLER IN SAve buch: '+ e.message);
      SaveButransa.Rollback;
    end;
  end;
  SaveBuQuery.Free;
  SaveBuTransa.Free;
end;

procedure TDataconnect.SaveSendung(ASendung: TSendung);

var
  SaveSeQuery : TIBOQuery;
  SaveSeTransa : TIBOTransaction;
begin
  SaveSeQuery:= TIBOQuery.Create(nil);
  SaveSeQuery.IB_Connection:= FDataBase;
  SaveSeTransa:= TIBOTRansaction.Create(nil);
  SaveSeTransa.IB_Connection:= FDataBase;
  SaveSeQuery.SQL.Text := 'UPDATE Sendungsverfolgung S SET S.Status = '+QuotedStr(ASendung.Status)+','+
  'S.Rechnung ='+QuotedStr(ASendung.Rechnung)+' WHERE S.Sendungsverfolgung_ID = '''+(inttoStr(ASendung.ID))+ ''';';
  SaveSeQuery.ExecSQL();
  SaveSeTransa.Commit;
  SaveSeQuery.Free;
  SaveSeTransa.Free;
end;


procedure TDataconnect.LegeKundeAn(Akunde: TKunde);
var
  neuerKuQuery: TIBOQuery;
  neuerKuTransa:TIBOTransaction;
begin
  neuerKuQuery:= TIBOQuery.Create(nil);
  neuerKuTransa:= TIBOTransaction.Create(nil);
  neuerKuTransa.IB_Connection:=neuerKuQuery.IB_Connection ;
  try
    neuerKuQuery.IB_Connection:= FDataBase;
    neuerKuTransa.IB_Connection:= FDatabase;
    try
      neuerKuQuery.SQL.Text:= 'INSERT INTO KUNDEN (Vorname,Nachname) Values ('+QuotedStr(Akunde.Vorname)+','+QuotedStr(Akunde.Nachname)+') returning Kunden_ID';
      neuerKuQuery.ExecSQL;
      Akunde.ID := neuerKuQuery.ParamByName('Kunden_ID').AsInteger;
      neuerKuTransa.Commit;
    Except
      on E : Exception do
      begin
        ShowMessage('FEHLER IN Lege Kunde AN');
        neuerKuTransa.Rollback;
      end;
    end;
  Finally
    neuerKuQuery.Free;
    neuerKuTransa.Free;
  end;
end;

procedure TDataconnect.ORDERbyID(AKunde: TKunde);
var
  groupKuQuery : TIBOQuery;
  groupKuTrans : TIBOTransaction;
begin
  groupKuQuery:=TIBOQuery.Create(nil);
  groupKuTrans:=TIBOTransaction.Create(nil);
  try
    groupKuQuery.IB_Connection:= FDataBase;
    groupKuTrans.IB_Connection:=FDataBase;
    try
      groupKuQuery.SQL.Text:= 'Select * FROM KUNDEN ORDER BY Kunden_ID';
      groupKuQuery.ExecSQL;
      groupKuTrans.Commit;
    except
      on E: Exception do
      begin
        showMessage ('FEHLER IN ORDERBYID AN');
        groupKuTrans.Rollback ;
      end;
    end;
  finally
    groupKuQuery.Free;
    groupKuTrans.free;
  end;
end;
procedure TDataconnect.DeleteAutor(AAutor: TAutor);
var
  delAuQuery: TIBOQuery;
  delAuTransa: TIBOTransaction;
begin
  delAuQuery:= TIBOQuery.Create(nil);
  try
    delAuQuery.IB_Connection:=FDataBase;
    delAuTransa:= TIBOTransaction.Create(nil);
    try
      delAuTransa.IB_Connection:= FDataBase;
      try
        delAuQuery.SQL.Text :=' DELETE FROM Autoren A WHERE a.Autor_ID = :id';
        delAuQuery.ParamByName('id').value := AAutor.ID;
        delAuQuery.ExecSQL();
        delAuTransa.Commit;
      except
        on E: Exception do
          begin
            ShowMessage('FEHLER IN delete Autor AN');
            delAuTransa.Rollback;
          end;
      end;
    finally
      delAuTransa.Free;
    end;
  finally
    delAuQuery.Free;
  end;

end;

procedure TDataconnect.DeleteBuecher(ABuch: TBuch);
var
  delBuQuery: TIBOQuery;
  delBuTransa: TIBOTransaction;
begin
  delBuQuery:= TIBOQuery.Create(nil);
  try
    delBuQuery.IB_Connection:=FDataBase;
    delBuTransa:= TIBOTransaction.Create(nil);
    try
      delBuTransa.IB_Connection:= FDataBase;
      try
        delBuQuery.SQL.Text :=' DELETE FROM Buecher B WHERE B.Buch_ID = :id';
        delBuQuery.ParamByName('id').value := ABuch.ID;
        delBuQuery.ExecSQL();
        delBuTransa.Commit;
      except
        on E: Exception do
          begin
            ShowMessage('FEHLER IN delete buecher AN');
            delBuTransa.Rollback;
          end;
      end;
    finally
      delBuTransa.Free;
    end;
  finally
    delBuQuery.Free;
  end;

end;

procedure TDataconnect.DeleteSendung(Asendung: TSendung);
var
  delSeQuery: TIBOQuery;
  delSeTransa: TIBOTransaction;
begin
  delSeQuery:= TIBOQuery.Create(nil);
  try
    delSeQuery.IB_Connection:=FDataBase;
    delSeTransa:= TIBOTransaction.Create(nil);
    try
      delSeQuery.IB_Connection:= FDataBase;
     try
        delSeQuery.SQL.Text :=' DELETE FROM Sendungsverfolgung WHERE Sendungsverfolgung_ID = :id';
        delSeQuery.ParamByName('id').Value := Asendung.ID;
        delSeQuery.ExecSQL();
        delSeTransa.Commit;
      except
        on E: Exception do
          begin
            ShowMessage('FEHLER IN DELETE SENDUNG');
            delSeTransa.Rollback;
          end;
      end;
    finally
      delSeTransa.Free;
    end;
  finally
    delSeQuery.Free;
  end;

end;

procedure TDataconnect.LegeAutorAn(AAutor: TAutor);

var
  neuerAuQuery: TIBOQuery;
  neuerAuTransa:TIBOTransaction;
begin
  neuerAuQuery:= TIBOQuery.Create(nil);
  neuerAuTransa:= TIBOTransaction.Create(nil);
  neuerAuTransa.IB_Connection:=neuerAuQuery.IB_Connection ;
  try
    neuerAuQuery.IB_Connection:= FDataBase;
    neuerAuTransa.IB_Connection:= FDatabase;
    try
      neuerAuQuery.SQL.Text:= 'INSERT INTO Autoren (Vorname,Nachname) Values ('+QuotedStr(AAutor.Vorname)+','+QuotedStr(AAutor.Nachname)+') returning Autor_ID';
      neuerAuQuery.ExecSQL;
      neuerAuTransa.Commit;
    Except
      on E : Exception do
      begin
        ShowMessage('FEHLER IN LEGE AUTOR AN');
        neuerAuTransa.Rollback;
      end;
    end;
  Finally
    neuerAuQuery.Free;
    neuerAuTransa.Free;
  end;
end;


procedure TDataconnect.LegeBuchAn(ABuch: TBuch);

var
  neuerBuQuery: TIBOQuery;
  neuerBuTransa:TIBOTransaction;
begin
  neuerBuQuery:= TIBOQuery.Create(nil);
  neuerBuTransa:= TIBOTransaction.Create(nil);
  neuerBuTransa.IB_Connection:=neuerBuQuery.IB_Connection ;
  try
    neuerBuQuery.IB_Connection:= FDataBase;
    neuerBuTransa.IB_Connection:= FDatabase;
    try
  ////////////////////////////////////////////Buecher funktionieren wegen des Preises nicht//////////////////////////////////////////////////////////////////////
    neuerBuQuery.SQL.Text:= 'INSERT INTO Buecher(Preise,Name) Values ('+IntToStr(ABuch.Preis)+','+QuotedStr(ABuch.name)+') returning Buch_ID';
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      neuerBuQuery.ExecSQL;
      neuerBuTransa.Commit;

    Except
      on E : Exception do
      begin
        ShowMessage('FEHLER IN LEGE Buch AN');
        neuerBuTransa.Rollback;
      end;
    end;
  Finally
    neuerBuQuery.Free;
    neuerBuTransa.Free;
  end;
end;


procedure TDataconnect.LegeSendungAn(ASendung: TSendung);

var
  neuerSeQuery: TIBOQuery;
  neuerSeTransa:TIBOTransaction;
begin
  neuerSeQuery:= TIBOQuery.Create(nil);
  neuerSeTransa:= TIBOTransaction.Create(nil);
  neuerSeTransa.IB_Connection:=neuerseQuery.IB_Connection ;
  try
    neuerSeQuery.IB_Connection:= FDataBase;
    neuerSeTransa.IB_Connection:= FDatabase;
    try
      neuerSeQuery.SQL.Text:= 'INSERT INTO Sendungsverfolgung (Status,Rechnung) Values ('+QuotedStr(ASendung.Status)+','+QuotedStr(ASendung.Rechnung)+') returning Sendungsverfolgung_ID';
      neuerSeQuery.ExecSQL;
      neuerSETransa.Commit;
    Except
      on E : Exception do
      begin
        ShowMessage('FEHLER IN LEGE Sendung AN');
        neuerSeTransa.Rollback;
      end;
    end;
  Finally
    neuerSeQuery.Free;
    neuerSeTransa.Free;
  end;
end;


function TDataconnect.getSendungByKunde(AKunde:TKunde): TSendungList;
var
  KundInfoQuery : TIBOQuery;
  KundInfoTrans : TIBOTransaction;
  newSendung: TSendung;
  sendungID: integer;
  sendungStatus, sendungRechnung: string;
begin
  try
    Result := TSendungList.create();
    KundInfoQuery:=TIBOQuery.create(nil);
    KundInfoTrans:=TIBOTransaction.create(nil);
    KundInfoQuery.IB_Connection:=FDataBase;
    KundInfoTrans.IB_Connection:=FDataBase;
    KundInfoQuery.IB_Connection:= KundInfoTrans.IB_Connection;
    try
      KundInfoQuery.SQL.Text:='Select * From Sendungsverfolgung S where S.Kunden_ID= :id';
      KundInfoQuery.ParamByName('id').Value := AKunde.ID;
      KundInfoQuery.Open();
      // Hier wird das Ergebnis ausgelesen
      while not KundInfoQuery.Eof do
      begin
        sendungID := KundInfoQuery.FieldByName('Sendungsverfolgung_ID').AsInteger;
        sendungStatus := KundInfoQuery.FieldByName('Status').AsString;
        sendungRechnung := KundInfoQuery.FieldByName('Rechnung').AsString;
        newSendung := TSendung.Create(sendungID, sendungStatus, sendungRechnung);
        Result.addSendung(newSendung);
        KundInfoQuery.Next();
      end;
      KundInfoQuery.Close();
    except
      on E:Exception do
      begin
        showMessage('FEHLER IN GETKUNDENINFORMATION' + e.Message)
      end;
    end;
  finally
    KundInfoQuery.Free;
    KundInfoTrans.Free;
  end;
end;

procedure TDataconnect.getpreis(ASendung: TSendung);
var
  saveKuInfoQuery: TIBOQuery;
  SaveKuInfoTrans: TIBOTransaction;
begin
  try
    SaveKuInfoQuery:= TIBOQuery.Create(nil);
    SaveKuInfoQuery.IB_Connection:= FDataBase;
    SaveKuInfoTrans:= TIBOTRansaction.Create(nil);
    SaveKuInfoTrans.IB_Connection:= FDataBase;
    SaveKuInfoQuery.SQL.Text :='SELECT k.Kunden_ID, b.name, Sum( B.preise ), count( b.preise )from RECHNUNGEN r Inner join kunden k on (K.kunden_id = r.kunden_id) Inner join Buecher b on (B.buch_id= r.buch_id) where r.Sendungsverfolgung_ID = :id group by K.kunden_id, b.Name';
    saveKuInfoQuery.ParamByName('id').Value:= Asendung.id;

    SaveKuInfoQuery.ExecSQL();
    SaveKuInfoTrans.Commit;
  except

    SaveKuInfoQuery.Free;
    SaveKuInfoTrans.Free
  end;
end;
end.


HIER KOMMT DAS STRINGGRID WO DIE DATEN ZUR ANZEIGE GEBRACHT WERDEN SOLLEN__________________________________________

Code:
unit KundenInfo;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids,UKunde,Usendungsverfolgung,UBuecher,Autoren;

type
  TKunInformation = class(TForm)
    StrGrKundeAusw: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure getdataforgrid (AKUNde: TKunde;Asendunglist:TSendungList);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  KunInformation: TKunInformation;

implementation

{$R *.dfm}

procedure TKunInformation.FormCreate(Sender: TObject);
var
  arow,acol: integer;
  kunde: TKUnde;
  Autor: TAutor;
  Buch:TBuch;
  Sendung: TSendung;
  Slist: TSendungList;
begin
  StrGrKundeAusw.ColCount:=20;
  StrGrKundeAusw.Cells[arow,acol]:='';
  getdataforgrid(kunde,SList);
  hide;
end;

procedure TKunInformation.getdataforgrid(AKUNde: TKunde;Asendunglist:TSendungList);
var
  asendung:tsendung;
  all: integer;
begin
  Asendunglist.getSendungByIndex(all);
  StrGrKundeAusw.Cells[1,1]:=Akunde.Vorname;
  StrGrKundeAusw.cells[2,1]:=AKUNde.nachname;
  StrGrKundeAusw.Cells[3,1]:=asendung.Status;
  StrGrKundeAusw.cells[4,1]:=asendung.Rechnung;
end;

end.
zum orientieren das stringgrid mit Bearbeiten Loeschen und Hinzufügen -----------------------------

Code:

unit UDatenEditieren;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, IB_Grid, Buttons, ExtCtrls, UKunde,USendungsverfolgung,Autoren,UBuecher;

type
  TDatenEditieren = class(TForm)
    btnBeenden: TBitBtn;
    lblDataEdit: TLabel;
    StrGrAuswahl: TStringGrid;
    Speichern: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure StrGrAuswahlSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
  private
  public
    aRow: integer;
    acol: integer;
    procedure giveKundeDataToGrid(AKUnde:TKunde);
    procedure giveSendungDataToGrid (ASendung:TSendung);
    procedure giveAutorDataToGrid(AAutor:TAutor);
    procedure giveBuchDataToGrid(ABuch: TBuch);
  end;
Var
  Dateneditieren: Tdateneditieren;
 

implementation

{$R *.dfm}

{ TDatenEditieren }

procedure TDatenEditieren.giveKundeDataToGrid(AKUnde:TKunde);
Begin
  StrGrAuswahl.Cells[0,0]:= AKUnde.Vorname;
  StrGrAuswahl.Cells[1,0]:= AKUnde.Nachname;
end;

procedure TDatenEditieren.FormCreate(Sender: TObject);
begin
  StrGrAuswahl.ColCount:=20;
  StrGrAuswahl.Cells[arow,acol]:='';
  hide;
end;

procedure TDatenEditieren.StrGrAuswahlSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  StrGrAuswahl.Options:= [goEditing];
end;
procedure TDatenEditieren.giveSendungDataToGrid(ASendung:TSendung);
begin
  StrGrAuswahl.Cells[0,0]:= ASendung.Status;
  StrGrAuswahl.Cells[1,0]:=ASendung.Rechnung;
end;
procedure TDatenEditieren.giveAutorDataToGrid(AAutor: TAutor);
begin
  StrGrAuswahl.Cells[0,0]:= AAutor.Vorname;
  StrGrAuswahl.Cells[1,0]:= AAutor.Nachname;
end;

procedure TDatenEditieren.giveBuchDataToGrid(ABuch: TBuch);
begin
  StrGrAuswahl.Cells[0,0]:= IntToStr(Abuch.Preis);
  StrGrAuswahl.Cells[1,0]:= ABuch.name;
end;



end.
ACHTUNG JETZT KOMMEN DIE UNITS MIT DEN OBJEKTEN !!!!!!!!!!!!!!

DA SIE SICH ÄHNLICH SIND ZEIGE ICH ERSTMAL NUR DIE KUNDEN



Code:
unit UKunde;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, ExtCtrls, ComCtrls;
type

  TKunde = class(TObject)
  private
    FKunden_ID : integer;
    FKunden_Nachname: String;
    FKunden_Vorname: String;
    procedure setVorname(newValue : String);
    procedure setNachname(newValue: string);
    procedure setID(newValue: Integer);
  public
    constructor Create (AKunden_ID:Integer; AVorname, ANachname: string);
    property Vorname: string read FKunden_Vorname write setVorname;
    property Nachname: string read FKunden_Nachname write setNachname;
    property ID: integer read FKunden_ID write setID;
  end;

  TKundeList = class(Tobject)
  private
    FKundenListe :TStringList;
  public
    procedure addkunde (AKunde:TKunde);
    function Count():integer;
    function getKundeById(AKunden_ID:integer):TKunde;
    function getKundeByIndex(AIndex: integer): TKunde;
    constructor create ();
  end;

implementation

uses StrUtils;

{ TKunde }

constructor TKunde.Create(AKunden_ID:Integer; AVorname, ANachname: string);
begin
  inherited Create();

  self.FKunden_ID:= AKunden_ID;
  self.FKunden_Vorname:= AVorname;
  self.FKunden_Nachname:= ANachname;
end;

procedure TKunde.setVorname(newValue: String);
begin
  if (Trim(newValue)<>'') then
  begin
    self.FKunden_Vorname:=newValue;
  end;
end;
procedure TKunde.setNachname(newValue: String);
begin
  if (Trim(newValue)<>'') then
  begin
    self.FKunden_Nachname:=newValue;
  end;
end;
procedure TKunde.setID(newValue: Integer);
begin
  self.FKunden_ID := newValue;
end;

{ TKUndeList }
function TKundeList.Count():integer;
Begin
  result:= FKundenListe.Count;
end;

procedure TKundeList.addKunde(akunde:tkunde);
begin
  FKundenListe.AddObject(IntToStr(AKunde.ID),AKunde);
end;

constructor TKundeList.create;
begin
  inherited create();
  self.FKundenListe:=TStringList.Create;
end;

function TKundeList.getKundeByID(AKunden_ID:integer): TKunde;
var
  idx : Integer;
begin
  idx := FKundenListe.IndexOf(IntToStr(AKunden_ID));
  if (idx>-1)then
  begin
    Result:= Tkunde(FkundenListe.Objects[idx]);
  end else
  begin
    result:= nil;
  end;
end;

function TKundeList.getKundeByIndex(AIndex: integer): TKunde;
begin
  if(AIndex>-1)and(AIndex<FKundenListe.Count) then
  begin
    result:= Tkunde(FkundenListe.Objects[AIndex]);
  end else
  begin
    result:=nil;
  end;
end;
end.
SOOOO und wie soll ich jetzt die Unit angehen

Code:
???????????????????????????????????????????????


Schon alleine Danke für den der sich das durchgeschaut hat


tut mir leid für mein Quellcode... mach noch nicht so lange was ich hoffe, dass ihr mir das verzeiht.


Vielen Dank schonmal für eure Hilfe,
Danil
  Mit Zitat antworten Zitat