|
Antwort |
Registriert seit: 19. Aug 2011 Ort: Lübeck 68 Beiträge Delphi 7 Professional |
#1
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:
zum orientieren das stringgrid mit Bearbeiten Loeschen und Hinzufügen -----------------------------
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.
Code:
ACHTUNG JETZT KOMMEN DIE UNITS MIT DEN OBJEKTEN !!!!!!!!!!!!!!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. DA SIE SICH ÄHNLICH SIND ZEIGE ICH ERSTMAL NUR DIE KUNDEN
Code:
SOOOO und wie soll ich jetzt die Unit angehen
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.
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
|
Zitat |
Registriert seit: 17. Sep 2006 Ort: Barchfeld 27.625 Beiträge Delphi 12 Athens |
#2
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 |
Zitat |
Registriert seit: 19. Aug 2011 Ort: Lübeck 68 Beiträge Delphi 7 Professional |
#3
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:
fehlt noch irgendwas an code zum verständniss?
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. oder wo wird was nicht verstanden? gerne fragen
Danil
|
Zitat |
Registriert seit: 19. Aug 2011 Ort: Lübeck 68 Beiträge Delphi 7 Professional |
#4
Du vermischst Objekte, die eigentlich nichts (direkt) mit einander zu tun haben.
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
|
Zitat |
Registriert seit: 17. Sep 2006 Ort: Barchfeld 27.625 Beiträge Delphi 12 Athens |
#5
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 |
Zitat |
Registriert seit: 19. Aug 2011 Ort: Lübeck 68 Beiträge Delphi 7 Professional |
#6
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:
und auf die funktion greift die oberfläche zu und zwar hier:::::::::::::
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; *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) |
Zitat |
Registriert seit: 17. Sep 2006 Ort: Barchfeld 27.625 Beiträge Delphi 12 Athens |
#7
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 |
Zitat |
Registriert seit: 17. Sep 2006 Ort: Barchfeld 27.625 Beiträge Delphi 12 Athens |
#8
So, hier nun ein gaaanz grobes Modell:
Code:
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.
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.
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 |
Zitat |
Registriert seit: 19. Aug 2011 Ort: Lübeck 68 Beiträge Delphi 7 Professional |
#9
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) |
Zitat |
Registriert seit: 17. Sep 2006 Ort: Barchfeld 27.625 Beiträge Delphi 12 Athens |
#10
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:
Hier pickst Du Dir die Daten des Kunden heraus, die Du anzeigen möchtest, dasselbe dann bei den ermittelten Büchern.
42, Meier, Heinz, Am Bahnhof 5, 12345 Hinterpfuiteifi
- 100, Krieg und Frieden, Tolstoi, ISBN Lalala - 120, Es, Stephen King, ISBN Wuppdi
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 |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |