Meine Debugausgabe sieht so aus:
Wie kann das bei dem Code sein (Beta4 und 3)Ergebnis=999
dbRam_Pack()=6749696
Code: Alles auswählen
OpenConsole()
Procedure error(l.l,s.s)
EndProcedure
#DBMemoryIdControl = 0
#PointerValueTypDbHeader = 0
#PointerValueTypPos = 0
#DBColumnCount = 0
#DBRowCount = 0
#DBColumnPosID = 0
#DBColumnHeaderID=0
#DBRowHeaderID =0
#ColumnHeaderWidth =0
#ColumnDataBlockWidth =0
#ColumnType=0
#VarString =0
#VarFixedString =0
#VarCharAscii =0
#VarCharUnicode =0
#VarMemo =0
#RowHeaderWidth=0
#VarData =0
#RowDataBlockWidth=0
#RowHeaderRowID=0
#RowHeader2LoeschFlag=0
#RowHeader2UserFlag=0
#RowHeader2Width=0
#ecNoColumnExist=0
#ecDbNotExist=0
Procedure.l dbRam_Pack(*DbMemoryID)
Ergebnis.l
If 0
;PB_EnterCS(RAMDB,0,0)
If *DbMemoryID <> 0 And (PeekL(*DbMemoryID+#DBMemoryIdControl) = *DbMemoryID ) And (PeekB(*DbMemoryID+#PointerValueTypPos) = #PointerValueTypDbHeader)
RowCounter.l
ColumnCount = PeekL(*DbMemoryID+#DBColumnCount)
RowCount.l = PeekL(*DbMemoryID+#DBRowCount) ; Anzahl Zeilen = Long
*ColumnHeader = PeekL(*DbMemoryID+#DBColumnHeaderID)
*RowHeader = PeekL(*DbMemoryID+#DBRowHeaderID) ; MemPointer zu Daten Zeilenheader = *Long
*DBColumnPos = PeekL(*DbMemoryID+#DBColumnPosID)
If ColumnCount > 0
NewList PointerPosition.l()
For CC = 1 To ColumnCount
ColumnType = PeekB(*ColumnHeader+#ColumnHeaderWidth +((CC-1)*#ColumnDataBlockWidth)+#ColumnType)
If (ColumnType =#VarString) Or (ColumnType =#VarFixedString) Or (ColumnType =#VarCharAscii) Or (ColumnType =#VarCharUnicode) Or (ColumnType =#VarData ) Or (ColumnType =#VarMemo)
AddElement(PointerPosition())
PointerPosition() = PeekL(*DBColumnPos+(4*CC))
EndIf
Next CC
*DBColumnPos = PeekL(*DbMemoryID+#DBColumnPosID)
dbPackCounter.l
While RowCounter < RowCount
RowCounter + 1
*Row = PeekL(*RowHeader+#RowHeaderWidth+((RowCounter-1)*#RowDataBlockWidth)+#RowHeaderRowID) ;*Row
If PeekB(*Row+#RowHeader2LoeschFlag) > 0
If PeekL(*Row + #RowHeader2UserFlag) = 0
If CountList(PointerPosition()) > 0
ResetList(PointerPosition())
ForEach PointerPosition()
NextElement(PointerPosition())
*Pointer = PeekL(*Row+#RowHeader2Width+PointerPosition())
If *Pointer > 0
FreeMemory(*Pointer)
EndIf
Next
EndIf
FreeMemory(*Row)
dbPackCounter + 1
If RowCount > 0 ; RowHeader-Daten aktualisieren
;MoveMemory(*SourceMemoryID, *DestinationMemoryID, Length)
*SourceMemoryID = *RowHeader+#RowHeaderWidth+(RowCounter*#RowDataBlockWidth)
*DestinationMemoryID = *RowHeader+#RowHeaderWidth+((RowCounter-1)*#RowDataBlockWidth)
Length.l = (RowCount-1)*#RowDataBlockWidth
MoveMemory(*SourceMemoryID, *DestinationMemoryID, Length)
EndIf
RowCount - 1 ; Zhler um EINS zurckzhlen, da EIN Eintrag gelscht wurde
RowCounter - 1 ; Zhler um EINS zurckzhlen, da EIN Eintrag gelscht wurde
PokeL(*DbMemoryID+#DBRowCount, RowCount) ;dbHeader aktualisieren
EndIf
EndIf
Wend
Ergebnis = dbPackCounter
Else : Ergebnis = #ecNoColumnExist
EndIf
Else : Ergebnis = #ecDbNotExist : error(1,Str(#ecDbNotExist)+"#dbRam_select() - Datenbank existiert nicht")
EndIf
;PB_LeaveCS(RAMDB)
EndIf
Ergebnis = 999
Debug "Ergebnis="+Str(Ergebnis)
ProcedureReturn Ergebnis
EndProcedure
dbRam_Pack = dbRam_Pack(*DBid)
Debug "dbRam_Pack()=" +Str( dbRam_Pack )
Kürze ich die procedure um den "If-Teil", so stimmt es wieder. Der If-Teil aber wird ja nicht ausgeführt.
[edit]
Tritt der Fehler bei euch eigendlich auch auf?
Toshy