2. Ich wollte es erst nen neues Thema aufmachen, aber da du hier grad rumschwirrst, schreib ich mein - diesmal nicht ganz so schlimmes Maleur - mal hier rein, da du bislang am besten mit meinem Programm vertraut bist und dies hier wohl relativ früh lesen wirst, zudem puste ich damit das Forum nicht unnötig mit neuen Themen auf:
Komischerweise steigt antiproportional zur Komplexität der zu bewältigenden Aufgaben auch meine Fehlerfrequenz, mit anderen Worten: Bei den billigsten Dinger, schleichen sich die dicksten Hühner ein: Ich hab in meinem Programm eine Funktion, die es ermöglicht Datensätze zu löschen. Meine Tabellen in meiner Datenbank sind - wie du eventuell noch weisst - nach folgendem Schema aufgebaut:
FragenID INT, Frage STRING, AntwortID STRING, Thema STRING, HL INT, Link STRING.
Beim Löschen wird der Datensatz entfernt, es entsteht aber innerhalb der FragenID - Nummerierung eine Lücke. Beispiel: Lösche ich zwischen FragenID = 7 und Fragen ID = 9 den Datensatz mit der FragenID = 8 dann lautet die Nummerierung 1, 2, 3 ,4 , 5, 6, 7, 9, 10 .... Um das anschließend wieder zu korrigieren, habe ich in VB eine simple Prozedur geschrieben, die nach dem Löschvorgang die Datensätze neu nummeriert:
Code: Alles auswählen
ACHTUNG VB - CODE!
Public Sub Durchnummerieren()
Dim iMax, in As Integer
iMax = RS1.RecordCount ;RS1 ist ein Objekt von Typ Recordset
RS1.MoveFirst
For in = 1 To iMax
RS1.Fields("FragenID") =in
RS1.Update
If RS1.EOF Then Exit For
RS1.MoveNext
Next in
End Sub


Code: Alles auswählen
Procedure Durchnummerieren ()
in = 0
SSQLTemp = "SELECT * FROM " + sProjektname
If DatabaseQuery(#DB_QM, sSQLTemp)
FirstDatabaseRow(#DB_QM)
While NextDatabaseRow(#DB_QM)
in = in + 1
sTempAntwortID = ""
sTempFrage = ""
sTempAntwortID = GetDatabaseString(#DB_QM,2)
sTempFrage = GetDatabaseString(#DB_QM,1)
If sTempAntwortID <> ""
sSQLUpdate = "UPDATE " + sProjektname + " SET FragenID = " + Str (in) + " WHERE AntwortID = '" +sTempAntwortID +"' "
If Not DatabaseUpdate (#DB_QM, sSQLUpdate)
Error ("Fehler beim Durchnummerieren!")
EndIf
Else
sSQLUpdate = "UPDATE " + sProjektname + " SET FragenID = " + Str (in) + " WHERE Frage = '" +sTempFrage +"' "
If Not DatabaseUpdate (#DB_QM, sSQLUpdate)
Error ("Fehler beim Durchnummerieren!")
EndIf
EndIf
Wend
EndIf
EndProcedure
Dann habe ich aber in meinem SQL-Manager (ein Prog zur Editierung der Datenbank) gesehen, dass es rowid gibt, einen Wert der die Position des Datensatzes wiedergibt. Mithin lautete mein 2. Versuch:
Code: Alles auswählen
Procedure Durchnummerieren ()
in = 0
SSQLTemp = "SELECT * FROM " + sProjektname
If DatabaseQuery(#DB_QM, sSQLTemp)
FirstDatabaseRow(#DB_QM)
While NextDatabaseRow(#DB_QM)
in = in + 1
sSQLUpdate = "UPDATE " + sProjektname + " SET FragenID = " + Str (in) + " WHERE rowid = " + Str(in)
If Not DatabaseUpdate (#DB_QM, sSQLUpdate)
Error ("Fehler beim Durchnummerieren!")
EndIf
Wend
EndIf
EndProcedure

Wenn jetzt also das Scrollproblem und dieses hier behoben sind, dann gehe ich heute feiern! Sonst lief alles nämlich richtig genial und die restlichen Funktionen ließen sich zum Teil um einiges schneller proggen als erwartet, da manches in PB - man glaubt es kaum - schneller zu verwirklichen ist als mit VB, insbesondere Datenbank-Geschichten, und das trotz ADO...einzige Ausnahme: siehe oben...

Vielen Dank im Voraus!
//EDIT: Frage 1 hat sich erübrigt, hab eben gelesen, dass dieses Programmiergenie beim Hinweis auf ein neues Update tatsächlich mein Beispiel gewählt hat um seine neue Funktion vorzustellen, ich fühl mich grad so, als hätte ich Picasso nen Motiv geliefert...
