gennemførelsen af foxpros spredes og samle memvar i delphi

, gennemførelse af foxpro er spredte og samle memvar i delfi.,, delphi entreprenør,, i februar 2001, ophavsret pinnacle forlagsvirksomhed, inc. alle rettigheder forbeholdt.,,,, gennemførelse af foxpro er spredte og samle memvar i delphi, steve zimmelman,,,,,, teknologi er altid i bevægelse fremad, normalt fører til mere produktive udvikling.imidlertid er der tidspunkter, hvor nåede ind i fortiden kan være gavnligt for.kopiering eller at sammenligne data i tabel foxpro var en ret enkel opgave.steve zimmelman hævder, at dette måske er værd, når teknologien.,,,,,, foxpro er spredte og samle kommandoer altid er nyttige til at kopiere optegnelser fra et bord til en sammenligning af data, eller registrere replikation blandt flere tabeller.for dem af jer, der ikke har haft den fornøjelse at arbejde sammen med foxpro, sprede og samle kommandoer arbejde sådan her.,,, hvis du har brug for at kopiere en plade af et skema til en anden.ville du gøre noget som:,,, udvælge i figur 1, sprede memvar, udvælge, tabel 2, saml memvar,,,, sprede - kommando aflæser alle inden for den nuværende, registrering og placerer dem i erindring variabler.hver enkelt variabel, der er skabt med spredte har samme navn som det område, som det fra.de samler kommando ajourfører det eksisterende rekord med hukommelse variabler, der har navne, der svarer til de områder.så hvis i figur 1 er de områder, navn, adresse, telefon, og variablerne navn, adresse og telefon findes, når de samles kommando er gennemført det ajourfører den rekord med værdien opbevares i disse variabler,.,,, der er mange måder at gøre dette med delphi, men der er ikke noget natively leveres i vcl, der arbejder på tdataset niveau.i min seneste anvendelse anstrengelser, jeg havde brug for den gamle spredning og samle funktionalitet.så jeg endte med at skrive min egen scattermemvar og gathermemvar metoder.,,,,,, at sprede og samle funktioner,,,,,, at begge disse metoder er på papiret, for et objekt, kaldet tmemvar.tmemvar opretholder et dynamisk system af en plade kaldet tmemvarfields.hvert element af memvarfields system indeholder fieldname, datatype, og værdien af et tilsvarende område i et datasæt.så hver enkelt instans af den tmemvar indeholder data fra en enkelt tabel rekord.,,,,, type, memvarfield = pakket rekord, fieldname: string,,, - værdi: variant,, datatype: tfieldtype,,,,,,, tmemvarfields = antal tmemvarfield,,,,,, når scattermemvar funktion er gældende, det skaber et tilfælde af tmemvar og returnerer et fingerpeg om, at f.eks.når tmemvar er skabt, belastninger de områder, fra den udpegede datasæt i nettet.for at undgå datasæt overlapning, hver enkelt instans af den tmemvar identificeres ved sit datasæt ejendom.før en ny instans tmemvar er skabt en eftersøgning udføres for en tilsvarende datasæt i alle eksisterende tilfælde af tmemvar.hvis man har konstateret, at de tilsvarende instans genbruges.hvis ikke, er der skabt en ny instans,.,,, funktion scattermemvar (datasæt: tdataset): tmemvar;, begynder, hvis (datasæt = 0), med undtagelse af. skabe ('dataset ikke nul), //genbrug genstand, hvis den allerede findes.,, resultat: = findmemvarobject (dataset), hvis (resultat = 0) og derefter begynder, resultat: = tmemvar. skabe (dataset);,, ellers begynder, result.loadfielddata,,,,,,,,,, konstruktøren tmemvar. skabe (datasæt: tdataset), begynder, fflds: = 0,,, fdataset: = datasæt, hvis (fdataset = 0) så begynde, med undtagelse. skabe ('dataset ikke nul),,,,,,, hvis fscatterlist = 0),, fscatterlist: = tlist. skabe;,, fscatterlist tilsættes (sel.f);,, loadfielddata,,,,,,,,, tmemvar.loadfielddata procedure, var, jeg: heltal, begynder, hvis ikke datasæt. aktive så datasæt. åben;,, fflds: = nul; //fastsætte varigheden for det system, setlength (., fflds, fieldcount), for jeg: = 0 - datasæt. fieldcount-1) kan begynde med datasæt. områder [i] begynder, fflds [i]. fieldname: = fieldname;,, fflds [i]. værdi: = værdi;,, fflds [i]. datatype: = datatype,,,,,,,,,,,,,, når du skabe en genstand, er det nødvendigt at befri de formål, når det ikke længere er nødvendig.men den enhed, der indeholder koden til dette formål fastholder sin egen liste over tmemvar tilfælde og ødelægger dem automatisk, når anvendelsen lukker.så du kan befri de genstande, når de ikke er nødvendige eller ignorere dem og lad den enhed, tage sig af sig selv.,,, at forvalte tmemvar objekter, der er oprettet for hver scattermemvar anvendelse, tilføjer jeg hvert nyt tilfælde af tmemvar til fscatterlist, en form for tlist.den enhed, der tager sig af denne kodeks indeholder initialization og færdiggørelsen sektioner.den initialization sikrer, fscatterlist er sat til nul.dette er gjort for at skabe metode til tmemvar kan afhøre den værdi af fscatterlist og skabe et eksempel på det, når det er nødvendigt.det har de ressourcer, som enheden skal ned til et minimum.den endelige udformning, afsnit spinder listen igennem og frigør en tmemvar objekter det henvisninger.,,, procedure freescatterlist;,, var jeg: heltal, begynder, hvis (fscatterlist = 0), udpassage, prøv, for jeg: = (fscatterlist. count-1) til 0 begynder. prøver, tmemvar (fscatterlist. produkter [i]). fri;, undtagen,,,,,,,,, og endelig, fscatterlist. gratis;,, fscatterlist: = 0,,,,,,,,,, initialization,, fscatterlist: = nul,,, den endelige udformning, freescatterlist,,,,,, at undgå potentielle adgang undtagelser, tmemvar fjerner sig fra de fscatterlist, når det er befriet.kan du se, at hvis alle poster er blevet slettet fra fscatterlist, listen er befriet.igen, dette er gjort for at holde på fremme af ned.,,, giver tmemvar. ødelægge;,, var jeg: heltal, begynder, //klart array - elementer,.,, fflds: = nul;,, for jeg: = 0 (fscatterlist. count-1) begynder,,, hvis (tmemvar (fscatterlist. produkter [i]). datasæt = fdataset) så begynde, fscatterlist. slette (i);,,,,,,,,,,,,,, hvis fscatterlist.count = 0) og derefter begynder, fscatterlist. gratis;,, fscatterlist: = nul,,,,,,,,,, som,,,,,,,, efter scattermemvar er blevet brugt til et datasæt i erindring, at specifikke tmemvar genstand kan benyttes af enhver enhed i ansøgningen.for hver enkelt instans af den tmemvar opbevares i fscatterlist, kan det betragtes som en global objekt, der kan benyttes af enhver enhed, der har en henvisning til de memvar enhed i dens anvendelsesformål erklæring.,,, den metode, gathermemvar bruges til at få oplysninger i samme tabel, der oprindeligt kom, eller om nødvendigt et andet bord.gathermemvar spinder gennem marken lagres i tmemvar formål og opdateringer målet rekord med områder, der svarer til fieldname og datatype.så de områder, de tmemvar objekt, behøver ikke at være en nøjagtig strukturelle match til målet.områder, der ikke svarer til fieldname og datatype ignoreres.desuden er tmemvar værdier kan ændres, før de bruger gathermemvar, så du kan kopiere lidt forskellige data, hvis behovet opstår.,,, gathermemvar gennemføres i to varianter, ved hjælp af overbelastning direktiv i metoden erklæring:,,, procedure gathermemvar (kilde: tmemvar. mål: tdataset;,, tgatheroptions muligheder:), overbelastning,,,, procedure gathermemvar (kilde: tdataset mål;,, muligheder: tgatheroptions); overbelastning,,,,,, at den eneste forskel mellem disse to metoder er det første parameter.den første gennemførelse anvender den faktiske tmemvar objekt reference.den anden bruger datasæt, der blev brugt til at skabe de tilfælde af tmemvar.bortset fra, at de er identiske.faktisk er den første gennemførelse faktisk kalder den anden.der er også nogle muligheder, der gør det muligt for dem at kontrollere, hvordan de gathermemvar metode, indsamler de data.du kan erstatte eller vedlægge data, en post, eller gratis genstand, når de samles er fuldført.hvis nej, valgmuligheder, der er til stede i parameter, misligholdelse, er at erstatte, målet er datasæt, registrere og efterlade den i edit stat, efter at den ændrer feltdata.,,, tgatheroption = (goreplace, goappend, gopost, gofree);,, tgatheroptions = sæt tgatheroption;,,, procedure gathermemvar (kilde: tmemvar. mål: tdataset;,, muligheder: tgatheroptions), begynder, hvis (kilde: nul), med undtagelse af. skabe ('source tmemvar formål kan ikke være lig nul),,, gathermemvar (kilde. datasæt, mål, optioner),,,,,, procedure gathermemvar (kilde: tdataset mål; muligheder: tgatheroptions);,, var, jeg: heltal,, iindex: heltal,, memobj: tmemvar;,, fr: tmemvarfield;,, begynder, memobj: = findmemvarobject (skilde), hvis (memobj = 0) så begynde, med undtagelse. skabe ('source datasæt (+, kilde. navn + «), ikke er blevet spredt! ");,, End;,, If (goAppend In Options) Then Begin,, Target.Append;,, End Else Begin,, If Not (Target.State In [dsEdit,dsInsert]) Then,, Target.Edit;,, End;,,, For i := 0 To (Target.FieldCount-1) Do Begin,, iIndex := MemObj.FindFieldIndex(Target.Fields[i].FieldName);,, If iIndex >= 0 Then Begin,, If (Target.Fields[i].DataType = MemObj.Fields[iIndex].DataType) Then,, Target.Fields[i].Value := MemObj.Fields[iIndex].Value;,, End;,, End;,, If (goPost In Options) Then,, Target.Post;,,, If (goFree In Options) Then,, MemObj.Free;,, End;,, ,,,,Putting the new functions to use ,,, Here are a couple of examples of how these methods can be used.,,, Prprocedure myexample1 kopier felt data fra i figur 1 og tabel 2 vedlægges en plade med data fra i figur 1.de muligheder, gopost og give den metode, gofree parameter til at udstede en post til tabel 2, så befri de tmemvar objekt.,,, procedure myexample1;,, var, memobj: tmemvar;,, begynder, memobj: = scattermemvar (i figur 1); //< nogle tabel ting >,,, //sætte en plade, tabel 2, efter det, så de tmemvar //fri gøre indsigelse.,, gathermemvar (memobj, tabel 2, [goappend, gopost, gofree]);,,,,,,, procedure myexample2 kopier felt data fra i figur 1, vedlægges en plade, tabel 2 med data fra i figur 1, så ændrer navnet område før forsynet med en plade, tabel 3.i begge gathermemvar tilfælde, det er udstationeret.det sidste også frigør den tmemvar objekt.,,, procedure myexample2;,, var, memobj: tmemvar, begynder, memobj: = scattermemvar (i figur 1); //< nogle tabel ting >,,, //sætte en plade, tabel 2 &, tabel 3, efter det, så de tmemvar //fri gøre indsigelse.,, gathermemvar (i figur 1, tabel 2, [goappend, gopost]);,,, //ændre en memvar område værdi før tilføjer, //en plade, tabel3.,, memobj. fieldvalue ['name ']: = "steve zimmelman",,,,,,, gathermemvar (i figur 1, tabel 3, [goappend, gopost, gofree]);,,,,,,,,,,,,,



Previous:
Next Page: