Datenbank neu Berechnen, Wo ist mein Fehler ?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Schoppy

Betreff: Datenbank neu Berechnen, Wo ist mein Fehler ?

BeitragMo, Jan 31, 2005 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
irgendwo in meinem Code habe ich nen Fehler gemacht, vielleicht kann mir einer helfen ?

Wenn erst der dritte dann der zweite eintrag aus der Listbox gelöcht wird, wird die Datenbank korrekt neu angelegt,

Wenn erst der zweite dann der dritte Eintrag gelöscht wird ebenfallls,

aber sobald erst der erste Eintrag gelöscht wird dann stimmt die berechnung nicht mehr!

Irgendwo habe ich da nen Denkfehler drin !

Könnt ihr mir helfen ?

Code: [AUSKLAPPEN]


;-Datenbank aller ressourcen
Dim produktion$(50,5)
Dim produktion_tmp$(50,5) ;- " neu berechnung
;--


produktion$(num,0)= 500
produktion$(num,1)= 200
produktion$(num,2)= 50
produktion$(num,3)= 2010
produktion$(num,4)= "haus"
produktion$(num,5)= 10

num = num + 1

;-------------

produktion$(num,0)= 100
produktion$(num,1)= 300
produktion$(num,2)= 20
produktion$(num,3)= 2005
produktion$(num,4)= "Fabrik"
produktion$(num,5)= 5

num = num + 1

;-----------

produktion$(num,0)= 700
produktion$(num,1)= 500
produktion$(num,2)= 120
produktion$(num,3)= 20012
produktion$(num,4)= "test"
produktion$(num,5)= 12

num = num + 1

;-----------
;Print "NUM" + num

window=CreateWindow("Window",100,100,300,300,0)


produktion_LB=CreateListBox(10,10,200,50,window)


loe = CreateButton("löschen",10,90,100,20,window,0)
;---------------------------------------------------
For i = 0 To 10

If  produktion$(i,5) > 0 Then AddGadgetItem produktion_LB, produktion$(i,4) +" noch: " + produktion$(i,5) + " Monate"

Next


;------------------------------***** Start der Hauptschleife ********--------

Repeat

Select WaitEvent()

Case $401
;------------------Eintrag aus Produktionsliste löschen
If EventSource()=loe  Then


auswahl=SelectedGadgetItem(produktion_LB)


;-String werte in Integers zum Rechnen Umwandeln

umwandlung_string0% = produktion$(auswahl,0)
umwandlung_string1% = produktion$(auswahl,1)
umwandlung_string2% = produktion$(auswahl,2)

;---

RemoveGadgetItem produktion_LB, auswahl ;-ausgewählte löschen

Anzahl=CountGadgetItems (produktion_LB) ;- Einträge Zählen


;--------------------neu Berechnung der DIM
wert1% = 0

For i=0 To 50


If wert1% < auswahl Then   ;- Alle Einträge vor  dem ausgewählten
produktion_tmp$(wert1%,0) = produktion$(wert1%,0)
produktion_tmp$(wert1%,1) = produktion$(wert1%,1)
produktion_tmp$(wert1%,2) = produktion$(wert1%,2)
wert1% = wert1% + 1
EndIf

If wert1% > auswahl Then ;- Alle Einträge nach dem ausgewählten
produktion_tmp$(wert1%-1,0) = produktion$(wert1%,0)
produktion_tmp$(wert1%-1,1) = produktion$(wert1%,1)
produktion_tmp$(wert1%-1,2) = produktion$(wert1%,2)

EndIf


If wert1% = auswahl Then  ;- erster Ausgewählter Eintrag
wert1% = wert1% + 1
EndIf

Next
Print ""


; überschreiben leerer einträge
For i=0 To 50

If (i = anzahl) Or ( i > anzahl) Then ;- Bis gezählten oder grösser als gezählten
produktion_tmp$(i,0)=0
produktion_tmp$(i,1)=0
produktion_tmp$(i,2)=0
EndIf

Next


wert1% = 0

For i=0 To 50 ; wieder in die originale DIM schreiben
produktion$(wert1%,0) = produktion_tmp$(wert1%,0)
produktion$(wert1%,1) = produktion_tmp$(wert1%,1)
produktion$(wert1%,2) = produktion_tmp$(wert1%,2)
wert1% = wert1% + 1
Next

For i=0 To 5 ; alle ausgeben Print
Print produktion$(i,0)
Next


num = num - 1

Print "NUM "+num

;----------------------

EndIf

End Select



If WaitEvent()=$803 Then End
Forever


Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Jan 31, 2005 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde das mit Types lösen, das ist dann alles viel einfacher!
da braucht du dann nicht mit Temp und sowas arbeiten!

Was mir spontan aufgefallen ist:
2x Waitevent()
Denn bei Waitevent() bleibt das Programm stehen und warten darauf das etwas passiert,
darum kommt auch der Fehler das man öfter auf löschen klicken muß damit es auch funzt!

Wenn du ein Array Eintrag löschen willst und alle darauf folgenden sollen nachrücken, dann nimm eine Schleife
Code: [AUSKLAPPEN]
MaxEintraege = 10
Dim produktion$(MaxEintraege,5)
For t= 0 To MaxEintraege
produktion$(t,0) = T
Print produktion$(t,0)
Next


eintragloeschenNR = 0 ; je nachdem welcher gelöscht wird hier mal 0

;#################### __ Neu organisieren
For i = eintragloeschenNR+1 To MaxEintraege
    produktion$(i-1,0) =  produktion$(i,0) ; eintarg verschieben
    produktion$(i-1,1) =  produktion$(i,1) ; eintarg verschieben
    produktion$(i-1,2) =  produktion$(i,2) ; eintarg verschieben
   
    produktion$(i,0) = 0 ; eintrag Löschen da verschoben
    produktion$(i,1) = 0 ; eintrag Löschen da verschoben
    produktion$(i,2) = 0 ; eintrag Löschen da verschoben
Next


Print "nachher"
For t= 0 To MaxEintraege
Print produktion$(t,0)
Next
WaitKey
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group