AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language 2 Units zusammenfassen in eine Untergeordnete Logikschicht

2 Units zusammenfassen in eine Untergeordnete Logikschicht

Ein Thema von Impulz · begonnen am 21. Dez 2011 · letzter Beitrag vom 23. Dez 2011
Antwort Antwort
Seite 1 von 3  1 23   
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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 13:42
Du vermischst Objekte, die eigentlich nichts (direkt) mit einander zu tun haben. So ist es z.B. nicht einzusehen, wieso die Connect-Klasse Kunden speichern soll.
Was mir als Vorschlag spontan einfällt:
- ein Klasse für die Datenverbindung
- eine Basisklasse zum Anlegen/Bearbeiten/Löschen von Daten
- eine Basislistenklasse für die Abfrage/Filterung von Datenmengen
- spezielle Ableitungen dieser beiden Klassen für Kunden/Bücher etc.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Impulz

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

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 13:57
Hi,
vielen Dank erstmal an dich

aufgebaut ist es ja gerade so, dass die Logikschicht(Databaseconnect bzw connect) alles hat was mit datenbank zutun hat und die logik

die OBS (Oberfläche) pickt sich da einfach immer was raus (schichtenarchitektur)

die einzelnen Abteilungen sind in form von Units (hier ganz unten als UKunde) doch gegeben

abfrage und filterung der Datenmengen siehe: OBS und Databaseconnect (durch SQL wird doch abgefragt und mit der Oberfläche (OBS) aufgerufen)


die frage ist nur wie kriege ich das Kunden Objekt gebündelt mit den anderen Objekten hier zb noch eins von denen:


Code:
unit USendungsverfolgung;

interface

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

  TSendung = class(TObject)
  private
    FSendung_ID : integer;
    FSendung_Status: String;
    FSendung_Rechnung: String;
    procedure setStatus(newValue : String);
    procedure setRechnung(newValue: string);
  public
    constructor Create (ASendung_ID:integer; AStatus, Arechnung: string);
    property Status: string read FSendung_Status write setStatus ;
    property Rechnung: string read FSendung_Rechnung write setRechnung;
    property ID: integer read FSendung_ID;
  end;

  TSendungList = class(Tobject)
  private
    FSendungListe :TStringList;
  public
    procedure addSendung (ASendung:TSendung);
    function Count():integer;
    function getSendungById(ASendung_ID:integer):TSendung;
    function getSendungByIndex(AIndex: integer): TSendung;
    constructor create ();
  end;

implementation

uses StrUtils;

{ TKunde }

constructor TSendung.Create(ASendung_ID:integer; AStatus, Arechnung: string);
begin
  inherited Create();

  self.FSendung_ID:= ASendung_ID;
  self.FSendung_Status:= AStatus;
  self.FSendung_Rechnung:= ARechnung;
end;

{ TKUndeList }
function TSendungList.Count():integer;
Begin
  result:= FSendungListe.Count;
end;

procedure TSendungList.addSendung(aSendung:tSendung);
begin
  FSendungListe.AddObject(IntToStr(ASendung.ID),ASendung);
end;

constructor TSendungList.create;
begin
  inherited create();
  self.FSendungListe:=TStringList.Create;
end;

function TSendungList.getSendungByID(ASendung_ID:integer): TSendung;
var
  idx : Integer;
begin
  idx := FSendungListe.IndexOf(IntToStr(ASendung_ID));
  if (idx>-1)then
  begin
    Result:= TSendung(FSendungListe.Objects[idx]);
  end else
  begin
    result:= nil;
  end;
end;

function TSendungList.getSendungByIndex(AIndex: integer): TSendung;
begin
  if(AIndex>-1)and(AIndex<FSendungListe.Count) then
  begin
    result:= TSendung(FSendungListe.Objects[AIndex]);
  end else
  begin
    result:=nil;
  end;
end;

procedure TSendung.setRechnung(newValue: string);
begin
  if (Trim(newValue)<>'') then
  begin
    self.FSendung_Rechnung:=newValue;
  end;
end;

procedure TSendung.setStatus(newValue: String);
begin
  if (Trim(newValue)<>'') then
  begin
    self.FSendung_Status:=newValue;
  end;
end;

end.

damit ich daraus dann alles zur anzeige bringen kann.

mein ausbilder möchte leider, dass ich eine logik unit zur verknüpfung meiner Objekte anlege....

ich habe aber GARKEINE ahnung wie das gehen soll... nicht mal nen kleinen schimmer wie ich die Unit an sich aufbau: bisher bin ich soweit:

Code:
unit Objektezusammenfassen;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, ExtCtrls, ComCtrls,UKunde,UBuecher,Autoren,USendungsverfolgung;
type
  TLogObjects = class(TObject)


  private
  FlogObjects: Tlogobjects;

  public
  procedure addObjects (AAutor:TAutor;AKunde:TKunde;ABuch:TBuch;Asendung:Tsendung);









  end;

implementation

{ TLogObjects }

procedure TLogObjects.addObjects(AAutor: TAutor; AKunde: TKunde;
  ABuch: TBuch; Asendung: Tsendung);
begin

end;

end.
fehlt noch irgendwas an code zum verständniss?

oder wo wird was nicht verstanden?
gerne fragen
Danil
  Mit Zitat antworten Zitat
Impulz

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

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 13:59
Du vermischst Objekte, die eigentlich nichts (direkt) mit einander zu tun haben.
ja, das soll sich ja jetzt ändern damit ich die gleichzeitig zur anzeige sortiert bringen kann


wieso die connect klasse kunden speichert?

weil wenn die Oberfläche speichern würde und es zurückschicken würde wäre es A: doppelter weg
B falsche schichtenarchitektur
Danil
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 14:02
Meine Frage zielte dahin ab, wieso die Connection Kunden etc. kennen muss? Sie ist dem Namen nach doch dazu da, eine Verbindung zur DB zu verwalten. Kunden/Bücher/WasWeißIchSonstNoch hat sie doch überhaupt nicht zu interessieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Impulz

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

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 14:06
Die aufgabe der Connection Unit besteht darin:

wie du schon richtig sagtest: die Verbindung herzustellen.


Nur außerdem Erstellt sie die Queries und die Transaktionen und feuert die SQL's ab für verschiedene Situationen, DatenSpeichern, Laden,Löschen,bearbeiten.

Sie übernimmt die Funktion der Logik zwischen Datenbank und Oberfläche also alles was von der DB an die Oberfläche geht geht aus der Connection
als beispiel hier zb:




Code:
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;
und auf die funktion greift die oberfläche zu und zwar hier:::::::::::::
*SIEHE SENDUNG*

Code:
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;
Danil

Geändert von Impulz (21. Dez 2011 um 14:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 14:14
Das ist IMHO der falsche Ansatz. Gib mir ein paar Minuten Zeit, dann skizziere ich mal, wie ich das meinte.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 14:30
So, hier nun ein gaaanz grobes Modell:
Code:
TDataConnection
  - Servername
  - Benutzername
  - Passwort
  - DBName
  - Connect()
  - Disconnect()
 
TBasisdaten
  - Anlegen()
  - Bearbeiten()
  - Löschen()
 
TBasisliste(TObjectlist)
  - Connection: TDataConnection
  - Filter
  - Datenholen()
  - Aktualisieren()
 
TKunde(TBasisdaten)
  - ID
  - Name
  - Vorname
 
TKundenliste(TBasisliste)

Dasselbe dann für Bücher, etc.
Wenn man so etwas wie Referenzzählung und Klasseneigenschaften unter Delphi 7 hinbekommt, dann kommt man mit einer einzigen Connection aus, die vom ersten erzeugten Objekt erstellt und vom letzten zerstörten wieder freigegeben wird. Aber das sind Details, um die man sich später kümmern kann.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Impulz

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

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 14:37
okay.

aber wie löse ich nun mein problem.
ich müsste ja die Kunden, Buecher etc an ein 'Übergeordnetes' Objekt weitergeben und dann das Objekt zur anzeige bringen?

und dieses Übergeordnete objekt brauche ich ja auch um die beziehungen zwischen den tabellen auch in der syntax darzustellen.


und mein problem ist es: einen ansatz bei dem objekt zufinden um die Kunden usw zusammenzufassen.

wie sieht sowas aus?

BEISPIELWEISE

KUNDENOBJEKT= KUNDEN ID VORNAME NACHNAME
BUCHOBJEKT= ID PREIS NAME

ich will aber das zur anzeige bringen:


KUNDEN VORNAME NACHNAME BUCH PREIS BUCH NAME:

usw...
Danil

Geändert von Impulz (21. Dez 2011 um 14:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: 2 Units zusammenfassen in eine Untergeordnete Logikschicht

  Alt 21. Dez 2011, 14:48
Man könnte die Kundenklasse ja dahingehend erweitern, dass sie die ihr zugewiesenen Bücher ermittelt und in einer TBuchliste ablegt (das Gleiche dann vice versa, man kann das auch noch weiter abstrahieren, aber davon nehme ich hier erst einmal Abstand). So, als Ergebnis hättest Du dann z.B. so etwas im Speicher:
Code:
42, Meier, Heinz, Am Bahnhof 5, 12345 Hinterpfuiteifi
  - 100, Krieg und Frieden, Tolstoi, ISBN Lalala
  - 120, Es, Stephen King, ISBN Wuppdi
Hier pickst Du Dir die Daten des Kunden heraus, die Du anzeigen möchtest, dasselbe dann bei den ermittelten Büchern.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz