24. august 2005 - 09:24Der er
12 kommentarer og 1 løsning
Problem med sletning af post i two-dimensional array
Hej Eksperter. Har søgt efter det svar jeg mangler herinde, men er ikke rigtigt kommet frem til noget, så here comes: Jeg har oprettet et array, og nu har jeg et problem med at slette en bestemt post, hvor det derefter skal være muligt at indsætte en ny post på samme plads. Nedenstående er min array Dim x As Integer Dim gifts(10) As arrayvare gifts(x).id = 4 gifts(x).vareid = 13 gifts(x).varenavn = "Skovl" x = x + 1 gifts(x).id = 2 gifts(x).vareid = 12 gifts(x).varenavn = "Maskine" x = x + 1 gifts(x).id = 3 gifts(x).vareid = 12 gifts(x).varenavn = "Spade" x = x + 1 gifts(x).id = 4 gifts(x).vareid = 12 gifts(x).varenavn = "Hammer" Jeg ved ikke om jeg er på helt galt spor, men jeg har tænkt mig at benytte det første attribut som en slags ID ligesom en database. Så vil jeg løbe array'et igennem og slette objektet hvor det matchende id er. Dette er dog ikke lykkedes helt...
Ja godt være såørgsmålet er dårligt formuleret...måske endda misvisende. Ide'en er, at man fra et dataset af varer skal vælge nogle varer som skal tilføjes en ordre. Eller i første gang et array, som så skal gennemløbes hvis man til sidst ønsker at oprettet det som en rigtig ordre i systemet. Arrayet vil jeg så binde til et table så man har mulighed for at se hvad der er i arrayet. Derfor skal der være muligheden for at slette en tilfældig objekt i arrayet. Jeg er nødt til at lave det til et flere dimensionel array, da jeg gerne skal have flere attributter gemt i arrayet, da disse skal vises i tabellen i programmet. Hvordan vil du anbefale jeg griber det an? Forventer ikke du laver noget af det, men bare hvordan man kunne gøre det. Det med arrayvare har jeg fundet i en bog, men efter at have søgt på lignede på eksperten bærer det ikke præg af at være en udbredt metode at gøre det på...
Jeg ville anvende listebokse eller evt. MSFlexGrid til at vise brugeren, hvilke varer der er udvalgt. Nu har jeg ikke erfaring med dataset, selv om anvendelsen er meget udbredt. Jeg har for alle de databaser, jeg har opbygget, valgt ascii-filer.
Det vil ikke være noget problem at fjerne nogle blandt de valgte poster fra en listeboks igen. Det kan f.eks. udføres under dobbeltklik.
Hvis du har beskrevet det system, du er ved at udvikle, ville du ikke spørge sådan! Enten må du gemme i den database hvor varerne ligger, eller også må du have en database over kunder, der kan indeholde de ordrer kunderne efterhånden afgiver.
En tredie mulighed er at alle ordrer gemmes i en selvstændig base, med referencen fakturanummer til kundedatabasen.
Hvis du kigger i en lærebog for VB er netop strukturen kunder - varer - ordrer - betaling - ofte et anvendt eksempel.
Men du må beskrive dit system inden du programmerer.
Data i en listeboks eller i en grid, ligger i RAM akkurat som data i et array gør - data er IKKE gemt i disse tilfælde. Det bliver de først når de skrives til disk som en fil eller en del af en større fil.
Jeg vil ikke yderligere svare bredt, hvorledes du opbygger et sådant projekt, det bliver alt for omfattende. Spørg om konkrete detaljer.
Ok det misforstod du furldstændig desværre... Jeg er godt klar over at ordrer mv skal gemmes i en database og det er allerede gjort...Problemet er hvor varerne "gemmes" INDEN de ryger i databasen. Altså når de bliver valgt til en given ordre. Så skal de efter mit hoved gemmes et eller andet sted, lige indtil brugeren trykker "opret ordre", hvor programmet så skal gennemløbe arrayet og tage hver enkelt linie/vare og gemme dem i databasen.
Som det jeg har nu, bliver ordrelinierne/varerne gemt i databasen med det samme, men det er lidt et problem hvis brugeren halvvejs alligevel ikke ønsker at lave ordren. Så skal jeg ind og slette de varelinier i databasen som egentlig aldrig har tilhørt en "godkendt ordre" Håber du forstår for det er lidt svært at forklare...
-Brugeren får en bestilling -Brugeren vælger de varer som skal på ordren (Hvor og hvordan gemmes disse!?!) -Brugeren slette måske nogle af varerne igen -Brugeren trykket "godkend ordren", og her køres alle de ovenstående varer igemmem, og ordrelinierne gemmes i databasen og ordren er oprettet.
Måske dette viser lidt bedre hvor problemet ligger - ellers må du spørge igen...
Du må tage stilling til om de udvalgte varer skal gemmes på en måde, så brugeren kan afbryde programmet og senere genoptage sin bestilling - eller om alle valg mistes, når programmet afsluttes. Hvis det sidste er godt nok, så ER valgene jo gemt i RAM så længe de står i en listeboks - et array - eller en grid. Altså indtil noget andet indlæses i de pågældende kontroller.
Jeg vender ikke tilbage til dette spørgsmål foreløbig, der må andre på banen, der bedre forstår dit problem. Jeg synes kun der er det ene, at der gemmes straks ved valg. Det må væk!
Bare i orden - jeg siger tak for hjælpen. Som jeg har det nu gemmes varerne med det samme i databasen inden brugeren trykker godkend, og det skal jeg have lavet om. Brugeren har og skal ikke have muligheden for at genoptage en ordre. Jeg skal bare have fundet ud af at håndtere de varer der er gemt i RAM i en "et eller andet" på én eller anden måde...
Det ved jeg ikke, men jeg vil tro, at der ikke skulle være noget i vejen for det. Du har ikke skrevet præcis hvad problemet er, men ud fra tidligere erfaringer kunne jeg forestille mig det er et versionerings-problem. Se http://eksperten.dk/spm/435618 hvor det godt nok er en anden ocx - men problemet er her uoverensstemmelse mellem ocx-version og angivelsen i dependency-filen.
I følge de anvisninger og tuturials jeg har læst kan man i menuen add'e en component, men msflexgrid findet ikke herinde... Men det er ligemeget. Siden i går har jeg arbejdet på mit datagrid, som bliver løsningen på mit problem. Smid lige et svar - så får du pointene
Jeg mener at ocx'er frit kan downloades. Et problem kan være at inkludere dem i sine projekter på en måde, så de fungerer under ethvert OS hos brugerne.
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.