Fakturując w Delphi: Pokaż Mi Pieniądze Czy szukasz drogi oswoić faktury w twoim małym biznesie? W tym artykule, pierwszej z dwóch części, będziemy tworzyli w pełni działanie fakturujące system, który może zostać użyty w prawie jakieś środowisko i sytuacja. Zainteresował? Trzymaj czytanie. Pokaż Mi Pieniądze Ponieważ to będą miejscowym podaniem i nie klient klientem - serwerem jednym, będziemy używali Microsoft Dostęp bazy danych jako przechowywanie. Też będziemy używali własnościowych komponentów bazy danych trochę Microsoft, zadzwonionego ADO, zrobić związek do bazy danych Dostępu. Artykuł będzie widoczny jak przejść przez proces bycie człowiekiem sukcesu do miejscowej bazy danych, stopniowo. Tak jakie są wymaganie dla naszego fakturującego podania? Zobacz listę poniżej: * Nasze podanie musi zrobić to łatwe, by utworzyć nową fakturę. * Podanie musi mieć opcję, by oglądnąć fakturę w zarówno krótkie i szczegółowe widoki. * Podanie musi mieć zdolność, by albo być w druku albo utworzyć PDF faktury. * Podanie musi mieć udogodnienie przeszukać. * Podanie musi mieć zdolność, by usunąć albo zmienić fakturę. * Podanie powinno utworzyć, zmienia i dodaje klientów. Tylko kilka słów cautionary wcześniej zaczynamy. Podanie faktury zostało utworzone z Delphi Borland 7 i szczęśliwie zostało przetestowane na zarówno Windows 2000 i Windows XP. To może albo nie może pracować nad innymi systemami Windows. Podanie jest przeznaczone dla niskiego użycia tomu, odtąd użycie Access MS. Ponieważ Access MS jest przeznaczony dla niskiej działalności tomu, to mogłoby zwolnić twoje podanie, jeżeli przeładowujesz bazę danych, więc spróbować usunąć zbyteczne dane od tak często jak bazy danych możliwego, albo dobrego jeszcze, zmiana na bazę danych, który może radzić większe tomy danych takie jak MySQL albo SQL MS. Fakturując w Delphi: Pokaż Mi Pieniądze - Budując Bazę danych Baza danych będzie miała tylko dwa stoły: stół Klientów, by trzymać informację klienta i stół Faktur, by trzymać informację faktury. W Microsoft Dostęp tworzą te dwa stoły z poszły za polem: Stół dla klientów: * clientno - tworzy unikalnego id dla każdego nowego klienta. * imię - sklep imię dla każdego nowego klienta albo przedsiębiorstwa. * zwróć do - sklepy adres przedsiębiorstwa. * email - sklep adres emailowy klienta. * telefon - sklep telefoniczna liczba klienta. * faks - sklep liczba faksu klienta. * kontakt - sklepy imię kontaktu, że będziesz zajmował się z kiedykolwiek jesteś w kontakcie z klientem. Pole stołu faktur: * invno - tworzy i gromadzi nowy numer faktury dla każdej nowej faktury, która jest utworzony. * invname - sklep imię klienta, dla którego faktura została utworzona. * invdate - sklep data, że faktura została utworzona. * notatki - sklepy jakaś dodatkowa informacja o fakturze. Raz utworzyłeś stoły, jedyna rzecz zostawiona, by zrobić ma łączyć ich do podania. Zrobimy to kiedy dyskutujemy kod podania. Fakturując w Delphi: Pokaż Mi Pieniądze - Budując Interfejs Podania Zacznij nowy projekt w Delphi i dodaj siedem form do tego. Uratuj części z poszły za imionami: Unit Name Save as... unit1 invmain unit2 newinv unit3 settings unit4 stats unit5 viewchange unit6 viewclients unit7 about W końcu uratuj projekt jako: fakturując. Teraz zamykają się wszystkie inne formy, chyba, że to zapisało jako invmain, ponieważ to jest tym, że potrzebujemy zacząć rozwijać pierwszego. Raz masz Form1 z przodu ciebie, z Standardowej kropli tabulatora komponent Mainmenu na formie. Podwójne kliknąć na to i dodaj poszłe za menu rzeczy: Plik z rzeczą podmenu zadzwonił Wyjście. Podwójne kliknąć na podmenu wyjścia podobnie i dodaj poszły za kodem: procedure TForm1.Exit1Click(Sender: TObject); begin close; end; Teraz utwórz drugą rzecz menu, zadzwonionych Klientów, z rzeczą podmenu zadzwonioną Zarządzają Klientów. Podwójne kliknąć na to i dodaj poszły za kodem: procedure TForm1.ViewAllClients1Click(Sender: TObject); begin form6.show; end; Utwórz trzecie menu podobnie i zadzwoń to Obrabia. Wtedy dodają poszłe za podmenu rzeczy: Ustawienia Podwójne kliknąć na powyższe podmenu podobnie i dodaj poszły za kodem: procedure TForm1.Settings1Click(Sender: TObject); begin form3.show end; Dana Podwójne kliknąć na powyższe podmenu podobnie i dodaj poszły za kodem: procedure TForm1.Statistics1Click(Sender: TObject); begin form4.show; end; Wtedy utwórz końcową rzecz menu zadzwonioną Pomoc i dodaną rzecz podmenu zajrzała Około. Podwójne kliknąć na to i dodaj poszły za kodem: procedure TForm1.About1Click(Sender: TObject); begin form7.show; end; To jest to dla rzeczy menu. Teraz na formie dodają panel i szeregują to by "wszystek szczyt." Nałożyć panel poszły za komponentami: Dwa przełączniki - Imię ich rb1 i rb2 kolejno.Wtedy daj im nagłówki: Poszukiwanie przez Imię Faktury i Poszukiwanie przez Numer Faktury. Tedit - Imię edit "edsearch." Jasny własność tekstu, jeżeli jest jakiś tekst w tym. Przycisk - nazwij przycisk "btnsearch" i dodaj nagłówek "Poszukiwanie." Uratuj twoją pracę. Następny, od tabulatora sprawdzań danych dodają siatkę bazy danych i ustawiają jego szeregują własność do wszystkiego klienta. Podwójne kliknąć na siatkę i edytor własności kolumny powinny wejść. Dodaje pięć kolumien i dać im poszły za nagłówkami: Invoice Number Invoice Name Invoice Date Status Dodajesz nagłówki przez jechanie do własności tytułu każdej kolumny. Następny, dodajemy inny panel i ustawiamy jego szeregują własność do "alBottom." Na tym panelu dodają poszły za wiercipiętami: * Dwa statyczny tekst -- z nagłówkiem nazywa "Suma Fakturuje" i "Aktualna Faktura #." * Dwie etykiety * Trzy przyciski, nazwany btnDelete, btnAddInv i btnExit kolejno. Do trzech przycisków, dodaj poszły za kodem, w rozkazie danego: btnDelete: procedure TForm1.btndeleteClick(Sender: TObject); begin if ado1.RecordCount > 0 then begin ado1.Delete; end else showmessage('No invoices to delete'); end; btnAddInv: procedure TForm1.btnAddInvClick(Sender: TObject); begin ado1.Active:=false; //form1.ado1.TableName:=''; form2.show; end; btnExit: procedure TForm1.btnExitClick(Sender: TObject); begin close; end; Wtedy w końcu upuść komponent datasource (imię to d1) od tabulatora Dostępu Danych i komponentu stołu ADO (imię to ado1) od Tabulatora Zamieszania. Ustawiony form1 's nagłówek do Kierownika Faktury. To uzupełnia projektowanie na pierwszej formie. Twoja forma powinna spojrzenie coś podobnego do tego: 
Fakturując w Delphi: Pokaż Mi Pieniądze - Skończony Kod Poniżej jest wykazem dla całej głównej części: unit invmain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, RpDefine, RpCon, RpConDS, DB, ADODB, Grids, DBGrids, RpRave, Menus, ExtCtrls, ToolWin, ComCtrls,math, INIFiles, RpRender, RpRenderPDF, RpRenderRTF, RpRenderHTML; type TForm1 = class(TForm) MainMenu1: TMainMenu; PopupMenu1: TPopupMenu; File1: TMenuItem; Windows1: TMenuItem; Clients1: TMenuItem; ools1: TMenuItem; Settings1: TMenuItem; ViewAllClients1: TMenuItem; About1: TMenuItem; Exit1: TMenuItem; Panel1: TPanel; btndelete: TBitBtn; Statistics1: TMenuItem; btnAddInv: TBitBtn; srchpnl: TPanel; rb1: TRadioButton; rb2: TRadioButton; edsearch: TEdit; btnsearch: TBitBtn; BitBtn1: TBitBtn; Label1: TLabel; Label2: TLabel; StaticText2: TStaticText; StaticText3: TStaticText; db1: TDBGrid; ado1: TADOTable; d1: TDataSource; ado1invno: TAutoIncField; ado1invname: TWideStringField; ado1invdate: TDateTimeField; ado1notes: TMemoField; ado1status: TWideStringField; ado1amount: TBCDField; ado1total: TBCDField; procedure File1Click(Sender: TObject); procedure CreateNewInvoice1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure db1DblClick(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure db1CellClick(Column: TColumn); procedure FormShow(Sender: TObject); procedure btndeleteClick(Sender: TObject); procedure btnAddInvClick(Sender: TObject); procedure Statistics1Click(Sender: TObject); procedure btnsearchClick(Sender: TObject); procedure Settings1Click(Sender: TObject); procedure ViewAllClients1Click(Sender: TObject); procedure About1Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure ado1AfterPost(DataSet: TDataSet); procedure ado1AfterScroll(DataSet: TDataSet); { procedure ado1AfterPost(DataSet: TDataSet); procedure ado1AfterScroll(DataSet: TDataSet); } private { Private declarations } public { Public declarations } vat:real; con,rav:string; num:integer; end; var Form1: TForm1; implementation {$R *.dfm} uses newinv,viewchange, stats, settings, viewclients, about; procedure TForm1.File1Click(Sender: TObject); begin close; end; procedure TForm1.CreateNewInvoice1Click(Sender: TObject); begin form2.Show; end; procedure TForm1.BitBtn2Click(Sender: TObject); begin close; end; procedure TForm1.db1DblClick(Sender: TObject); begin //num:=db1.Fields[0].AsInteger; num:=ado1.RecNo; ado1.recno:=num; with TForm5.Create(Application) do begin ShowModal; Free; end; //form5.show; end; procedure TForm1.Exit1Click(Sender: TObject); begin close; end; procedure TForm1.FormCreate(Sender: TObject); var settings : TINIFile; begin settings := TINIFile.Create(ExtractFilePath(Application.EXEName) + 'settings.ini'); try con:=settings.ReadString('Settings', 'con',''); //showmessage(con); vat:=settings.ReadFloat('Settings', 'vat',8.5); // showmessage(floattostr(vat)); rav:=settings.ReadString('Settings', 'rav',''); showmessage(rav); finally settings.Free; end; {if (ip= 'Empty') or (port<1) then begin messagedlg('Your connection details are not set. Click ok to continue.', mtInformation,[mbOk], 0); } end; procedure TForm1.db1CellClick(Column: TColumn); begin //a:='clicked'; end; procedure TForm1.FormShow(Sender: TObject); var i:integer; begin //set ado properties ado1.ConnectionString:=con; ado1.TableName:='invoices'; ado1.Active:=true; label1.caption:=inttostr(ado1.RecordCount); i:=ado1.RecordCount; label2.Caption:=inttostr(i); end; procedure TForm1.btndeleteClick(Sender: TObject); begin if ado1.RecordCount > 0 then begin ado1.Delete; end else showmessage('No invoices to delete'); end; procedure TForm1.btnAddInvClick(Sender: TObject); begin ado1.Active:=false; //form1.ado1.TableName:=''; form2.show; end; Fakturując w Delphi: Pokaż Mi Pieniądze - Reszta Kodu i Wniosku procedure TForm1.Statistics1Click(Sender: TObject); begin form4.show; end; procedure TForm1.btnsearchClick(Sender: TObject); begin if edsearch.Text = '' then showmessage('Please enter a term for the search!') else begin //now check to see that the user selected a search method if not rb1.Checked and not rb2.Checked then begin messagedlg('Either select to search by: '+#13#10+' Invoice number OR Invoice name', mtError , [mbOK], 0); exit; end; //search by invoice name if rb1.Checked then begin if not form1.ado1.Locate('invname',edsearch.Text,[]) then messagedlg(' Invoice for "' +edsearch.Text+ '" was not found', mtError ,[mbOK], 0); end; //search by invoice number if rb2.Checked then begin //check to see if entered value is number, before continuing try StrToInt(edsearch.Text); except messagedlg('Please enter a number in the search box.'+#13#10+' You entered "' +edsearch.Text+ '" which is not a number!', mtError , [mbOK],0); exit; end; if not form1.ado1.Locate('invno',edsearch.Text,[]) then messagedlg(' Invoice number ' +edsearch.Text+ ' could not be found', mtError , [mbOK], 0); end;//end rb2 search end;//edsearch check end; procedure TForm1.Settings1Click(Sender: TObject); begin form3.show end; procedure TForm1.ViewAllClients1Click(Sender: TObject); begin form6.show; end; procedure TForm1.About1Click(Sender: TObject); begin form7.show; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin close; end; procedure TForm1.ado1AfterPost(DataSet: TDataSet); begin showmessage('It is done'); label1.caption:=inttostr(ado1.RecordCount); end; procedure TForm1.ado1AfterScroll(DataSet: TDataSet); begin label2.caption:=inttostr(ado1.Recno); end; end. Wniosek W następnym artykule nie skupimy się tak bardzo na projektowaniu podania, ale raczej na kodzie, który robi to pracuje. Też będziemy wprowadzali fakturę zgłaszającą używanie Poszaleć Donoszącą komponenty. DISCLAIMER: Zawartość dostarczona w tym artykule nie jest zagwarantowana albo jest gwarantowana przez Producenta Zrzucił, Inc. Zawartość dostarczona jest przeznaczona dla rozrywki i / albo edukacyjne cele żeby wprowadzić do pomysłów klucza czytelnika, pojęć i / albo przeglądy wyrobów. Jako taki to jest ciążące na czytelniku, by zatrudnić prawdziwy światową taktykę dla bezpieczeństwa i wprowadzania najlepszych praktyk. Jesteśmy nie odpowiedzialny za jakieś przeczące konsekwencje, który mogą być skutkiem wprowadzanie w życie jakąś informację zakopaną nasze artykuły albo podręczniki. Jeżeli to jest recenzja sprzętu komputerowego, to nie jest polecone, by otworzyć i / albo zmodyfikować twój sprzęt komputerowy.
|