Omfattende DB applikation

Tags:    delphi

Hej

Jeg skal igang med et større project i Delphi. Det drejer sig om et Lager system hvor der er ca. 50 DB tabeller. Hver tabel skal have sit eget vedligeholdelses program. Indtil i dag har jeg kun lavet mindre projekter (enkelte programmer) i Delphi. Hvad er den normale fremgangsmåde for et projekt i denne størrelse. Laver man et projekt i Delphi med en hulens masse Forms så man har det hele samlet i een exe fil (dette bliver efter min mening noget rod at vedligeholde) eller laver man et projekt til hvert vedligelsesprogram hvorefter man har ca. 50 exe filer (dette er jeg heller ikke så vild med. Jeg så helst at der kun var een exe fil). Kan man evt. lave en package eller DLL pr. program og så lave et hovedprogram (exe filen) som kalder disse. Jeg vil også gerne kunne lave kald i mellem de enkelte programmer.

Håber der er en der kan hjælpe. Gerne med henvisning til noget litteratur på området hvis der da findes noget. Problemet med de Delphi bøger jeg har læst er at de udelukkende har eksempler på små programstumper og ikke på hvordan man laver et større projekt af denne art hvor der indgår mange programmer som skal samles så det for brugeren ligner een applikation.

Rednex



10 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato

Håber der er en der kan hjælpe. Gerne med henvisning til noget litteratur på området hvis der da findes noget. Problemet med de Delphi bøger jeg har læst er at de udelukkende har eksempler på små programstumper og ikke på hvordan man laver et større projekt af denne art hvor der indgår mange programmer som skal samles så det for brugeren ligner een applikation.


Efter min mening vil du være bedst tjent med at samle hele svineriet i et program, evt. med nogle enkelte ting branched ud i dll'er. Grupper dine tabeller så vidt muligt og sørg for god navngivning af dine forme. Saml så meget fælles kode eet sted, som du kan, således du kan genbruge det, istedet for at have den samme kode flere forskellige steder.

Undgå metoder på flere hundrede linier, men undgå samtidig flere tusinde metoder (ja, det er en balance gang). Rent visuelt, kan du lave en MDI eller Modale vinduer til dine tabeller, det er udelukkende et spørgsmål om brugervenlighed, men det er også det næst vigtigste i enhver applikation (det vigtigste er fejlfrihed).

Du er velkommen til at skrive med opfølgende spørgsmål.

---
Thomas Due
tdue@mail.dk



Hej Rednex

Et lille hint, det du kunne var at lave dit program som et MDI (Multiple Document Interface), hvor du lavet et hoved program kaldet Parrent og så en række Child's som oprettes udfra Parrent. Dette er ligesom Microsoft Word f.eks. man arbejder med flere dokumenter under det samme hovedprogram.

Dette giver ligeledes noget kodeoptimering da man kun kode et child som man så oprette x-antal instance af. Dermed skal du kun servicere en form/applikation.

Med venlig hilsen
Thomas Vanting



Hej Thomas

Jeg har overvejet at lave det som en MDI applikation, men du skriver at jeg kun skal vedligeholde en form/applikation. De 50 tabeller der er i databasen skal have hver sin form da de indeholder forskellige felter. Hvordan styrer man dette uden at have eet projekt med alle disse forms i. Jeg vil gerne have et projekt i Delphi pr. vedl. program. Herefter vil jeg samle dem i et nyt projekt som kunne være en MDI applikation hvor man f.eks har en slags menu i venstre side hvor man kan vælge hvilken tabel man vil vedligeholde hvorefter den vises i et vindue til højre for menuen. Kan dette lade sig gøre på en eller anden måde.

Rednex



Hej Thomas

Jeg har overvejet at lave det som en MDI applikation, men du skriver at jeg kun skal vedligeholde en form/applikation. De 50 tabeller der er i databasen skal have hver sin form da de indeholder forskellige felter. Hvordan styrer man dette uden at have eet projekt med alle disse forms i. Jeg vil gerne have et projekt i Delphi pr. vedl. program. Herefter vil jeg samle dem i et nyt projekt som kunne være en MDI applikation hvor man f.eks har en slags menu i venstre side hvor man kan vælge hvilken tabel man vil vedligeholde hvorefter den vises i et vindue til højre for menuen. Kan dette lade sig gøre på en eller anden måde.

Rednex


Hej,

Thomas' idé er nu ikke helt dårlig :0)
Men jeg syntes måske at 50 DLL'er er lige i overkanten af hvad der er smart.
Du skulle måske lave det sådan at hvert DLL indeholder f.eks. 10 applikationer/forms som så kan loades fra hoved programmet.

Jeg ville gøre det sådan at et DLL indeholder 1 funktion som hoved programmet kan kalde. I denne funktion får hoved programmet afvide følgende:
1. Version af DLL'et
2. Antal applikationer/forms i DLL'et.
3. En struktur for hver app./form inde holdende:
- Navn (den som du bruger i din menu i venstre side).
- Forklaring.
- Funktioner som er tilrådighed for hver app/form.

Så kan du lade hoved programmet om at oprette de MDI childs som er nødvendig og derefter få DLL'et til at indsætte de komponenter osv. som tilhører app./formen. Eller lade DLL'et om at oprette MDI child'et.

På denne måde vil dit hoved program altid være dette samme kode mens det er dine DLL'er som bestemmer hvad der der skal ske i hver form.

Jeg prøver lige at stykke et lille eks. sammen og poster det lidt senere.
Michael.




Efter min mening vil du være bedst tjent med at samle hele svineriet i et program, evt. med nogle enkelte ting branched ud i dll'er. Grupper dine tabeller så vidt muligt og sørg for god navngivning af dine forme. Saml så meget fælles kode eet sted, som du kan, således du kan genbruge det, istedet for at have den samme kode flere forskellige steder.

Undgå metoder på flere hundrede linier, men undgå samtidig flere tusinde metoder (ja, det er en balance gang). Rent visuelt, kan du lave en MDI eller Modale vinduer til dine tabeller, det er udelukkende et spørgsmål om brugervenlighed, men det er også det næst vigtigste i enhver applikation (det vigtigste er fejlfrihed).


Problemet med dette er at det gør det mere besværligt ifb. med fejlrettelser. Hvis der f.eks. bliver tilføjet et nyt felt i en form så er du nødt til at sende alt andet med for at lave en opdatering hos en bruger. Jeg har arbejdet med et andet produkt (COOL:Plex). Det laver en DLL pr. applikation. Dvs. kundevedl. er een DLL. Vedl. af valutakoder er en anden DLL osv. Man får selvfølgelig en masse DLL'er men det er utrolig nemt at lave opdateringer hos brugeren.

Hvis jeg nu alligevel ender med at lave det hele i en stor exe fil er det så muligt at lave hvert vedligeholdelses program som sit eget project. Derefter laver man et hoved project som henviser til alle de andre projekter. Jeg synes det er mere overskueligt hvis man kan gøre det på denne måde.

Rednex




Hvis jeg nu alligevel ender med at lave det hele i en stor exe fil er det så muligt at lave hvert vedligeholdelses program som sit eget project. Derefter laver man et hoved project som henviser til alle de andre projekter. Jeg synes det er mere overskueligt hvis man kan gøre det på denne måde.


Du har ret i at ændringer i databasen, eller fejlrettelser, kræver opdatering af hele programmet med en monolitisk exe.

Alternativt kunne du lave en række selvstændige exe filer, en for hver tabel/gruppe af tabeller, og samle dem i een overordnet application som kalder det pågældende program. Samme princip som med DLL'er, men det enkelte program kan alternativt afvikles selvstændigt.

---
Thomas Due
tdue@mail.dk




Du har ret i at ændringer i databasen, eller fejlrettelser, kræver opdatering af hele programmet med en monolitisk exe.

Alternativt kunne du lave en række selvstændige exe filer, en for hver tabel/gruppe af tabeller, og samle dem i een overordnet application som kalder det pågældende program. Samme princip som med DLL'er, men det enkelte program kan alternativt afvikles selvstændigt.


Hvordan kalder man en exe fil fra et Delphi program? Er det vha. ShellExecute eller findes der en anden (og bedre) måde. Kan jeg også kalde exe filer fra en MDI applikation så den bliver en del af denne?

Rednex




Hvordan kalder man en exe fil fra et Delphi program? Er det vha. ShellExecute eller findes der en anden (og bedre) måde. Kan jeg også kalde exe filer fra en MDI applikation så den bliver en del af denne?


Mig bekendt findes der ikke nogen bedre løsning end ShellExecute. Jeg tror dog ikke at du kan anvende forme fra en exe fil som children til en MDI applikation. Jeg har dog set en artikel et sted, hvor forfatteren formår at kalde eksporterede funktioner i en exe fil, ligesom i en dll. Jeg skal prøve at se om jeg kan finde artiklen. Hvis DET kan lade sig gøre, er det jo bare at lave en eksporteret metode som ændrer formens style til MDIChild inden den åbnes. Så skulle det kunne lade sig gøre.

---
Thomas Due
tdue@mail.dk




Jeg har dog set en artikel et sted, hvor forfatteren formår at kalde eksporterede funktioner i en exe fil, ligesom i en dll.


Følgende link fører til en side hvor forfatteren har nogle artikler om hvordan man anvender dynamiske pakker. Eksempel kode til artiklen "Advanced Dynamic Packages" indeholder bl.a. et lille eksempel hvor en exe-application importerer fra en anden.

http://www.vinorodrigues.com/insight/delphi/articles.htm

---
Thomas Due
tdue@mail.dk




Jeg har dog set en artikel et sted, hvor forfatteren formår at kalde eksporterede funktioner i en exe fil, ligesom i en dll.


Følgende link fører til en side hvor forfatteren har nogle artikler om hvordan man anvender dynamiske pakker. Eksempel kode til artiklen "Advanced Dynamic Packages" indeholder bl.a. et lille eksempel hvor en exe-application importerer fra en anden.

http://www.vinorodrigues.com/insight/delphi/articles.htm


Jeg takker og bukker.

Rednex



t