Datenbank ist DB2 von IBM. Das Programm nimmt durch den Benutzer angegebene
SQL Befehle entgegen und führt sie aus. Sobald der SQL an die DB übergeben ist, wartet
das Programm auf das Ergebnis. Die Länge der Laufzeit und die Menge der Daten hängt von der
Abfrage ab, die der User stellt. Da ich keine Eieruhr gefunden hab, habe ich ein Textfeld für die
Information benutzen wollen, dass der SQL noch läuft. Im Prinzip den Wait Cursor emuliert.
Verhalten des gleichen Source Codes auf Windows/Linux
-
- Beiträge: 23
- Registriert: 14.12.2018 23:01
Re: Verhalten des gleichen Source Codes auf Windows/Linux
Vielleicht hilft das!
http://www.purebasic.fr/german/viewtopi ... 21&t=30246
Hier einmal ein ganz einfaches schnell zusammengewurfenes Beispiel:
__________________________________________________
URL angepasst und SID entfernt
02.01.2019
RSBasic
http://www.purebasic.fr/german/viewtopi ... 21&t=30246
Hier einmal ein ganz einfaches schnell zusammengewurfenes Beispiel:
Code: Alles auswählen
Enumeration #PB_Event_FirstCustomValue
#EventBeginProcessing
#EventProcessingFinished
EndEnumeration
UseSQLiteDatabase()
Procedure CheckDatabaseUpdate(Database, Query$)
Result = DatabaseUpdate(Database, Query$)
If Result = 0
Debug DatabaseError()
EndIf
ProcedureReturn Result
EndProcedure
Global count.i = 0
Procedure Thread(Value)
PostEvent(#EventBeginProcessing)
DatabaseFile$ = GetTemporaryDirectory()+"Database.sqlite"
If CreateFile(0, DatabaseFile$)
CloseFile(0)
If OpenDatabase(0, DatabaseFile$, "", "")
CheckDatabaseUpdate(0, "CREATE TABLE food (name CHAR(50), weight INT)")
CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('apple', '10')")
CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('pear', '5')")
CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('banana', '20')")
If DatabaseQuery(0, "SELECT * FROM food WHERE weight > 3")
While NextDatabaseRow(0)
Delay(1000)
PostEvent(#PB_Event_Timer) ;Man sollte aber evtl. ein anderes Event nehmen ;)
Debug GetDatabaseString(0, 0)
Wend
FinishDatabaseQuery(0)
EndIf
CloseDatabase(0)
Else
Debug "Can't open database !"
EndIf
Else
Debug "Can't create the database file !"
EndIf
PostEvent(#EventProcessingFinished)
EndProcedure
OpenWindow(0, 200, 200, 100, 100, "PostEvent")
TextGadget(0, 10, 10, 120, 30, "0 %")
CreateThread(@Thread(), 0)
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_Timer
count + 1
gcount = 100 / 3 * count
SetGadgetText(0, Str(gcount)+"%")
Case #EventBeginProcessing
Debug "Thread begin processing "
Check = #True
Case #EventProcessingFinished
Debug "Thread processing finished"
SetGadgetText(0, "100%")
EndSelect
Until Event = #PB_Event_CloseWindow
URL angepasst und SID entfernt
02.01.2019
RSBasic
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
-
- Beiträge: 23
- Registriert: 14.12.2018 23:01
Re: Verhalten des gleichen Source Codes auf Windows/Linux
Hi Gemeinde!
Habe neue Erkenntnisse zum Thema Purebasic Windows/Linux mit ODBC und DB2.
Es gibt in Purebaisc die Möglichkeit, den Datenbank Datentypen zu cheken:
if DatabaseColumnType(0,i) = #PB_Database_String
oder
if DatabaseColumnType(0,i) = #PB_Database_Long
In DB2 gibt es den Datentypen CLOB (Character large Object), also ein langer String.
Wenn ich in Windows den Datentype abfrage, ergibt das #PB_Database_String, das ist so korrekt
wenn ich das in Linux mache, ergibt die gleiche Abfrage gegen die gleiche Datenbank
#PB_Database_Long, das ist ein Bug, da ein numerischer Wert hier erwartet wird.
Da ich numerische Werte rechtsbündig im Listiconiew anzeigen will, wird der Wert
ans Ende der Spalte geschrieben. Da so ein CLOB bis zu 2MB groß sein kann, wird dieses
"rechtsbündig" eine ziemlich große Spalte. So bei 1000 Zeilen dauert das dann eine Weile, bis das Programm
zurückkommt. Danach ist auch ein scrollen im Listiconview nicht wirklich performant.
Jetzt kann ich natürlich unter Linux (MAC OS hab ich noch nicht probiert) immer eine String nehmen, was die
Ausgabe aber nicht wirklich hübsch macht.
Hab das Problem auch im englischen Forum gepostet. Mal sehen, ob mir da jemand helfen kann.
Hier der Link zum englischen Forum:
https://www.purebasic.fr/english/viewto ... =4&t=71932
Jörg
Habe neue Erkenntnisse zum Thema Purebasic Windows/Linux mit ODBC und DB2.
Es gibt in Purebaisc die Möglichkeit, den Datenbank Datentypen zu cheken:
if DatabaseColumnType(0,i) = #PB_Database_String
oder
if DatabaseColumnType(0,i) = #PB_Database_Long
In DB2 gibt es den Datentypen CLOB (Character large Object), also ein langer String.
Wenn ich in Windows den Datentype abfrage, ergibt das #PB_Database_String, das ist so korrekt
wenn ich das in Linux mache, ergibt die gleiche Abfrage gegen die gleiche Datenbank
#PB_Database_Long, das ist ein Bug, da ein numerischer Wert hier erwartet wird.
Da ich numerische Werte rechtsbündig im Listiconiew anzeigen will, wird der Wert
ans Ende der Spalte geschrieben. Da so ein CLOB bis zu 2MB groß sein kann, wird dieses
"rechtsbündig" eine ziemlich große Spalte. So bei 1000 Zeilen dauert das dann eine Weile, bis das Programm
zurückkommt. Danach ist auch ein scrollen im Listiconview nicht wirklich performant.
Jetzt kann ich natürlich unter Linux (MAC OS hab ich noch nicht probiert) immer eine String nehmen, was die
Ausgabe aber nicht wirklich hübsch macht.
Hab das Problem auch im englischen Forum gepostet. Mal sehen, ob mir da jemand helfen kann.
Hier der Link zum englischen Forum:
https://www.purebasic.fr/english/viewto ... =4&t=71932
Jörg
-
- Beiträge: 23
- Registriert: 14.12.2018 23:01
Re: Verhalten des gleichen Source Codes auf Windows/Linux
Noch ein Update:
Auch BLOB Felder (binary large objects) werden unter Linux als #PB_Database_Long erkannt!!!
Auch BLOB Felder (binary large objects) werden unter Linux als #PB_Database_Long erkannt!!!
Re: Verhalten des gleichen Source Codes auf Windows/Linux
Hallo Jörg Burdorf,
ich wünsche mir das es hier, bzw. im englischen Forum jemand gibt der dir weiterhelfen kann.
Ich bin leider bei den Datanbanksachen zu inkompetent.
Ich kann dir nur sagen das ein Blob/LongBlob bei SQLLite auch als solchen gewertet wird.
Aber bei ODBC ?
ich wünsche mir das es hier, bzw. im englischen Forum jemand gibt der dir weiterhelfen kann.
Ich bin leider bei den Datanbanksachen zu inkompetent.
Ich kann dir nur sagen das ein Blob/LongBlob bei SQLLite auch als solchen gewertet wird.
Aber bei ODBC ?
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat