11. november 2001 - 18:52Der er
7 kommentarer og 1 løsning
borland forms
Hej! Jeg er ved at lave en database i Borland. I denne database har jeg et lager med forskellige numre. Der er så en for der viser hvad der er på de forskellige lagre, en form der kan oprette varer på lagerne. Databasen virker udemærket, problemet er at når jeg går ind på den første form sa vises lagernumrene udemærket, men kan så ikke vises på den anden form. Hvis jeg så først går ind på den sidste form vises lagernumrene ikke på den første. Altså den form jeg først klikker mig ind på virker.
Kører du en ny query i DB\'en hver gang eller hvad? Hvis ikke, så er recordsættet jo Eof 2. gang... Altså skal du enten ha\' et nyt recordsæt eller kalde MoveFirst før du løber sættet igennem!
Ja, nu er jeg jo lidt ny, så jeg forstår ikke helt. Altså jeg henter lagernumrene (id´et) fra databasen. For hvad har den ene form med den anden form at gøre? Hilsner karina
Nej! For jeg må være ærlig at indrømme at jeg ikke helt forstår svaret (der er første gang jeg laver en database med tilhørende forms). Mit problem er at jeg har 3 forms og en startmenu (en menu hvor jeg kan væle hvilke forms jeg vil ind på), den form jeg går ind på først er den som virker (den tredie form har ikke noget med lageret at gøre). Jeg forstår bare ikke hvad de to forms har med hinanden at gøre bortset fra at de begge henter lagre numrene. Jeg kan ikke rigtig se at jeg har gjort noget forkert, jeg kunne forstå det hvis ddatabasen ikke virkede, men jeg kan simpelthen ikke dreje hvorfor den form jeg går ind på første virker - men måske det er fordi jeg ikke er så øvet endnu? Jeg har en query i mit datamodul, hvis det er det du mener?
Bliver din query kaldt hver gang du viser en form? Det jeg mener er, at det datasæt du bruger har en intern \"pointer\" (cursor) der angiver hvorfra der skal læses/skrives. Det er den pointer du \"flytter\" hver gang du fx kalder DataMod->Lager->Next(); Pointeren rykkes altså til at pege på næste række i dit datasæt.
Det du så kan prøve er at positionere pointeren i starten af dit datasæt. Nu bruger jeg ikke Borland miljøet, men jeg vil tro funktionen hedder First eller MoveFirst. Altså kan du prøve at kalde DataMod->Lager->First(); (Du kan tjekke dokumentationen til Borland for at finde det rigtige navn på funktionen). Dette skal du så gøre for du går ind i dit while-loop.
DataMod->Lager->First(); // Peg på første række i datasættet int LagerId; while (!DataMod->Lager->Eof) { LagerId = DataMod->Lager->FieldByName(\"LagerId\")->AsInteger; LagerNrListe.push_back(LagerId); DataMod->Lager->Next(); }
Hej! Først lige tak fordi du gider at bruge din tid på at hjælpe mig og at sætte First() ind hjalp - men der opstor så bare et andet problem. Jeg har også en form der viser Varenumrene, nu er der pludselig gået kuk i den form. Hvis man går ind i varenumreformen første viser den rigtig nok alle varenumrene og hvis man så efterfølgende går ind i en af de forms som viser lagerid´et, så eksempelvis har lager nr. 1 varenr 4,5 og 6, de varenumre bliver så lagt oven i den form med varenumrene. Min kode ser ud som flg i modelkomponenten:
list<string> VareNumre = Vare->HentVarenumre(); list<string>::iterator il; for (il = VareNumre.begin(); il !=VareNumre.end(); il++) VareNrListe->Items->Add((*il).c_str());
Det sak lige sige at før jeg puttede First(); på, så virkede det fint med varenumrene. Jeg kan godt følge det med at pointeren nok på en eller anden måde peger forkert. Også lige endnu engang tak for hjælpen, håber ikke det er alt for besværligt. Hilsner karina
Opretter du en ny form hver gang du viser fx varenumrene, eller er det den samme du blot skjuler/viser? Det jeg vil frem til er, om det gamle indhold i VareNrListe fjernes før du putter noget nyt i? Du måske også fjerne sortering fra listen, hvis det er default og du ønsker at se elementerne i samme rækkefølge som i datasættet.
Lige et lille tip! Du kan lave en typedef øverst i din fil (eller en fil du includer hvor du skal bruge det), så du undgår at skrive list<string> hver gang: typedef list<string> Liste; Du kan så bare fx skrive efterfølgende når du skal bruge et list-objekt: Liste VareNrListe;
Jacob
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.