Structure TABLE
Array column.s(0)
EndStructure
Global NewList rs.TABLE()
Procedure ExSQL(sql.s, List ll.TABLE())
ClearList(ll())
If DatabaseQuery(0, sql)
While NextDatabaseRow(0)
AddElement(ll())
ReDim rs()\column(DatabaseColumns(0)-1)
For i=0 To DatabaseColumns(0)-1
ll()\column(i) = GetDatabaseString(0, i)
Next
Wend
Else
If Len(Trim(DatabaseError())) > 0
Debug DatabaseError()
EndIf
EndIf
ResetList(ll())
EndProcedure
If UseODBCDatabase()
If OpenDatabase(0, DSN, USER, PW)
ExSQL("SELECT * FROM some_db;", rs())
ForEach rs()
buffer$ = ""
For i=0 To ArraySize(rs()\column())
buffer$ + rs()\column(i) + Chr(124)
Next
Debug buffer$
Next
EndIf
CloseDatabase(0)
EndIf
End
Habe keinen Ansatz in welche Richtung ich debuggen soll. Wäre super, wenn jemand eine Idee hat.
---------------------------
PureBasic
---------------------------
Zeile 26: Falscher Parameter-Typ: ein String wird erwartet.
---------------------------
OK
---------------------------
Grüße Nicknamefj
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller
Das ist logisch. Er öffnet eine Datenbank, deren Nutzername, Passwort und IP er uns sicherlich nicht verraten wird. Ich glaube hier wird's schwer einen funktionierenden Testcode zu erstellen.
NicTheQuick hat geschrieben:Ich glaube hier wird's schwer einen funktionierenden Testcode zu erstellen.
Denke ich mal nicht, weil es wahrscheinlich nichts mit der DB zu tun hat. Den Testcode auf SQLite umzustellen,
sollte kein so großes Problem sein. Außerdem wäre eine Aussage über die verwendete PB Version, Bitbreite und
evtl. OS sehr hilfreich.
Bei der bisherigen Form, wird Hilfe eher nicht möglich, bzw. in Hellsehen ausarten
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.
Procedure ExSQL(sql.s, List ll.TABLE())
ClearList(ll())
If DatabaseQuery(0, sql)
While NextDatabaseRow(0)
AddElement(ll())
ReDim rs()\column(DatabaseColumns(0)-1)
For i=0 To DatabaseColumns(0)-1
ll()\column(i) = GetDatabaseString(0, i)
Next
Wend
Else
If Len(Trim(DatabaseError())) > 0
Debug DatabaseError()
EndIf
EndIf
ResetList(ll())
EndProcedure
Also die Liste ll() statt rs() nehmen (obwohl es hier die gleiche Liste ist), und
das -1 weg lassen, denn wenn DatabaseColumns() mal 0 zurück gibt, würdest
Du das Array mit dem Wert -1 redimensionieren. '+1' wäre sicherer zum testen.
Mit Debugger solltest Du aber einen Fehler bekommen, 'Array: Out of Bounds Error' oder sowas.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
@all: verwende Pure 4.60 auf Win7 64bit, mit jaPBe tritt der Fehler nicht auf, nur bei der Standard-IDE
@Danilo: habe ich bereits geändert, keinen Erfolg
Der IMA tritt nicht immer an der selben Codezeile auf. Die DB Daten sind i.O.
Ja ich verwende teilweise Threads. Die Prozedur ExSQL(sql.s, List ll.TABLE()) wird aus einem Thread heraus aufgerufen, die Verarbeitung der rs.TABLE() erfolgt im selben Thread.
bullit611 hat geschrieben:@all: verwende Pure 4.60 auf Win7 64bit, mit jaPBe tritt der Fehler nicht auf, nur bei der Standard-IDE
Dann Tippe ich mal auf eine UserLib und entweder Unicode oder Threadsafe!
Einfach mal in die Hilfe der UserLib schauen und das richtige SubSystem einstellen, weil das macht die Standard-IDE nicht
automatisch.
Auf jeden Fall mal die Einstellungen überprüfen, weil die werden nicht übernommen. Es ist auch nicht ratsam zwei
verschiedene Editoren zu verwenden
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.
Danke für den Tip. Benutze auch keine zwei Editoren, habe aber mein Projekt von jaPBe auf Standard-IDE umgestellt, da ich SubVersion zur Versionskontrolle nutze. Und jaPBe schreibt ja immer am Dateiende die Config und SubVersion meldet sich dann natürlich, obwohl nur die Cursorposition verändert wurde.
Da du ja threads nutzt, rufen mehr als ein Thread diese Procedure auf oder nutzt mehr als ein Thread die selbe LinkedList? "Hauptcode / -Process" ist in dem Bezug natürlich auch als "Thread" anzusehen.
Vielleicht greifen das zwei Threads gleichzeitig auf Daten zu oder was eher sein kann, das ein Thread auf einen Bereich zugreifen will, der gar nicht mehr existiert.