Variablen sind in PB nullinitalisiert. Wenn ich einfach so aus heiterem Himmel <Debug b> aufrufe, wird da 0 stehen. Um es bei strings ein bisschen deuticher zu machen: <Debug text$> wird aus heiterem Himmel auch "" ergeben.
<Debug Val(temp$)> wird 0 ergeben, dasselbe mit ValQ() stürzt komischerweise ab (Invalid memory access).
Definiere ich die Variable temp$ aber vorher etwa mit Define, klappt's wunderbar.
Na ja, ganz so ist es nicht. Er legt einen Verweis (Pointer) auf eine Speicheradresse, an der ein String abgelegt werden soll (bzw. von dort aus einen weiteren Verweis auf den Heap). Mehr nicht.
Wahrscheinlich ist dann in der Val()-Funktion eine Bedinungsabfrage enthalten - bei den anderen Versionen halt nicht.
Ist sowieso ´ne Unart, nicht initialisierte Variablen zu verwenden.
Hey AND51, füge mal das hier vor dem Debug ein und du wirst sehen:
Wenn z.B. die erste Spalte den Typ String hat und man erstellt eine neue
Zeile ohne gleich etwas reinzuschreiben, dann wird nur Speicherplatz für die
Spalten reserviert.
Liest man jetzt aus der neuen Zeile aus Spalte 1 einen Quad aus, liest er den
noch nicht gesetzten String aus und benutzt ValQ() um ihn umzuwandeln. Und
da passiert dann das Unglück.
Ich hab halt keine Lust, dass wenn man 20 String-Spalten hat und mit einem
Mal 1000 Zeilen einfügt, ich alle 20000 Strings automatisch initialisieren
muss, damit bei einem eventuellen GetQuad()-Aufruf kein Fehler passiert.
Ich hab das Problem jetzt so umgangen, dass ich zuerst auf *s\s <> ""
überprüfe und dann erst ValQ() mache. Aber ich finde, dass es anders auch
funktionieren sollte.
Kenne mich mit Datenbanken nicht so aus, aber ieso hängst du beim Speichern nicht ein Leerzeichen an den String an, leer oder nicht leer?
Dann würde ValQ() auch keinen Fehler machen und 0 zurückgeben. Merkst du dass der String doch nicht leer ist, benutzt du einfach <Leftstring$, Len(string$)-1)> oderRTrim()
AND51 hat geschrieben:´Dann würde ich an deiner Stelle aber richtig optimeiren:
*s\s <> "" raus und dafür Not *s\s schreiben
Du hast doch PB 4.00, oder?
wenn man optimeired wirds sowieso nichts
Deine vorgeschlagene Syntaxänderung beinhaltet keinerlei Optimierung!
Wie gesagt Syntaxänderung <> Optimierung
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.