Avatar billede jesperthomsen1980 Nybegynder
24. august 2005 - 09:24 Der 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...
Avatar billede joern Nybegynder
24. august 2005 - 11:03 #1
Hej.

Jeg kender ikke typen 'arrayvare', men mener (fra VB5) at et to-dimensionalt array dimensioneres således

Dim gifts(100,2) as string      'så er der plads til 100 poster

Det virker også meget uhensigtsmæssigt at tildele posterne i array'et indhold i kildeteksten, det bør ske ved læsning i en ekstern fil.

Når du så senere vil gennemløbe array'et skal det skel med en For / Next løkke.

For x = 0 to 99
  If gifts(x, 1) = "Spade" then
      gifts(x, 1) = "Øloplukker"
      exit for
  End if
Next x

Håber du bliver inspireret.

M.v.h. Jørn
Avatar billede jesperthomsen1980 Nybegynder
24. august 2005 - 11:10 #2
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å...
Avatar billede joern Nybegynder
24. august 2005 - 11:40 #3
Hej.

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.

M.v.h. Jørn
Avatar billede jesperthomsen1980 Nybegynder
24. august 2005 - 11:55 #4
Hvor skal jeg så gemme de varer der er udvalgt? Kan man gemme dem direkte i f.eks et MsFlexGrid?
Avatar billede joern Nybegynder
24. august 2005 - 12:18 #5
Hej.

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.

M.v.h. Jørn
Avatar billede jesperthomsen1980 Nybegynder
24. august 2005 - 12:29 #6
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...
Avatar billede jesperthomsen1980 Nybegynder
24. august 2005 - 12:32 #7
Oversigt...eller hvad man vil kalde det...

-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...
Avatar billede joern Nybegynder
24. august 2005 - 12:55 #8
Hej.

Du må undlade at de udvalgte varer straks gemmes. 

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!

M.v.h. Jørn
Avatar billede jesperthomsen1980 Nybegynder
24. august 2005 - 13:14 #9
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...
Avatar billede jesperthomsen1980 Nybegynder
24. august 2005 - 23:58 #10
Kan det passe det ikke er muligt at bruge Msflexgrid hvis man ikke anvender pro eller enterprise versionen af visual studio?
Avatar billede joern Nybegynder
25. august 2005 - 12:23 #11
Hej.

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.

M.v.h. Jørn
Avatar billede jesperthomsen1980 Nybegynder
25. august 2005 - 13:20 #12
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
Avatar billede joern Nybegynder
25. august 2005 - 14:30 #13
Hej.

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.

http://www.spacejock.com/Runtimes.html

M.v.h. Jørn
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester