Seite 1 von 1
easyDB-lib
Verfasst: 15.10.2004 21:19
von Maurizio555
Hallo!
Hab' die easyDB-lib runtergeladen und im Forum (auch im alten-) nach Beispielanwendungen gesucht, aber nichts brauchbares gefunden. Das beigelegte (zur .lib) Beispiel ist ein biss. mager...
Weiß da jemand 'was?
Verfasst: 16.10.2004 01:51
von ts-soft
Vielleicht hilft Dir dieses kleine Beispiel?
Code: Alles auswählen
Procedure.s edbGetH(p1.s)
p2 = edbGetIndexLen(p1)
*smem = AllocateMemory(p2) ;GlobalAlloc_(0, p2)
res = edbGet(p1,*smem)
Value.s = PeekS(*smem)
FreeMemory(*smem) ;GlobalFree_(*smem)
ProcedureReturn Value.s
EndProcedure
Procedure CreateNewAdressDB(FileName.s)
edbCreateNulldb(FileName, "", "")
edbOpen(0, FileName, "", "")
edbCreateAddField("NAME, C, 50, 0")
edbCreateAddField("VORNAME, C, 50, 0")
edbCreateAddField("STRASSE, C, 50, 0")
edbCreateAddField("PLZ, C, 50, 0")
edbCreateAddField("WOHNORT, C, 50, 0")
edbCreateAddField("TELEFON, C, 50, 0")
edbCreateAddField("HANDY, C, 50, 0")
edbCreateAddField("EMAIL, C, 50, 0")
edbCreateAddField("URL, C, 50, 0")
edbAppend()
edbPut ("NAME", "Schulz")
edbPut ("VORNAME", "Thomas")
edbPut ("EMAIL", "ts-soft@web.de")
edbPut ("URL", "http://de.geocities.com/ts_softde/")
edbWriteRecord(0)
edbAppend()
edbPut ("NAME", "Mustermann")
edbPut ("VORNAME", "Georg")
edbPut ("STRASSE", "Musterstr. 1")
edbPut ("PLZ", "00000")
edbPut ("WOHNORT", "Musterstadt")
edbPut ("TELEFON", "0190-332332")
edbWriteRecord(0)
EndProcedure
CreateNewAdressDB("Adress.db")
found = edbSearch("MUSTERMANN", "", 2, 0, 0)
Debug edbGetH("VORNAME")
found = edbSearch("Schulz", "", 2, 0, 0)
Debug edbGetH("VORNAME")
Debug edbGetMaxRecord()
edbClose(0)
Beispiele
Verfasst: 16.10.2004 11:01
von Maurizio555
Hallo und vielen Dank erst mal.
Wenn ich dein Beispiel Compiliere, erhalte ich folgende Meldung:
Error at line 3: Can't allocate a memory block with a negative size!
Ist es richtig (bin neu in Pure Basic) wenn ich vermute, daß es sich nicht um einen Compiler-Fehler sondern um eine Compiler-Meldung handelt, die ignoriert werden sollte weil aus folgenden Grund entsteht:
Wenn der Compiler von oben nach unten compiliert, hat p2 noch keinen Wert, also NULL (eigentlich auch nicht negativ). Da p2 erst im laufenden Betrieb sein Wert erhält und dieser während der Compilierungszeit noch nicht bekannt ist, meldet der Debugger den Fehler.
Wie auch immer, hat noch jemand Beispiele? Vielleicht gut kommentierte?
Verfasst: 16.10.2004 11:34
von christian_dev
Kann es sein, das du ne ältere PB Version benutzt. Früher muste
man bei AllocateMemory 3, dann nur 2 parameter, und in der
neusten nur noch einen, den Speicher , angeben !!!!
Mit ew. Beispielen schau ich mal, hab da eins, wo Städte in einer
Datenbank mit Postlwitzahlen stehen !
AllocateMemory
Verfasst: 16.10.2004 11:51
von Maurizio555
Hallo!
Verstehe nicht was du meinst.
Im betroffen Satz "*smem = AllocateMemory(p2)" wird doch nur 1 Par übergeben und der Befehl funktioniert mit 1 Par auch einwandfrei.
Das Problem ist, daß "p2" beim Compilieren noch kein Wert erhalten hat (dies geschieht erst wenn die Anwendung läuft), deswegen die Compiler-Meldung. Warum der Compiler annimmt, daß p2 negativ ist, weiß ich auch nicht. Ersetze ich "(p2)" mit "(p2+1)", nimmt er an, der Wert sei NULL. Esetze ich es durch "(p2+2)", kommt keine Meldung mehr.
Ich dacht, beim Deklarieren on-the-fly wird der Variable (wie hier p2) NULL zugewiesen???

Re: AllocateMemory
Verfasst: 16.10.2004 12:54
von Danilo
Maurizio555 hat geschrieben:Das Problem ist, daß "p2" beim Compilieren noch kein Wert
erhalten hat (dies geschieht erst wenn die Anwendung läuft),
deswegen die Compiler-Meldung.
Warum der Compiler annimmt, daß p2 negativ ist, weiß ich auch
nicht. Ersetze ich "(p2)" mit "(p2+1)", nimmt er an, der Wert
sei NULL. Esetze ich es durch "(p2+2)", kommt keine Meldung
mehr.
Die Fehlermeldung kommt bestimmt nicht vom Compiler,
sondern vom Debugger. Der Debugger hat nichts mit dem
Compiler zu tun, sondern dann läuft Dein Programm schon.
Code: Alles auswählen
Procedure.s edbGetH(p1.s)
p2 = edbGetIndexLen(p1)
*smem = AllocateMemory(p2) ;GlobalAlloc_(0, p2)
p2 ist hier einfach -1, weil edbGetIndexLen(p1) das dann
zurückgegeben hat.
Rückgabewerte sollte man auswerten. -1 steht hier vielleicht
für einen Fehler bei edbGetIndexLen().
Compiler/Debugger
Verfasst: 16.10.2004 15:56
von Maurizio555
Sorry,
natürlich meinte ich "Debugger-Meldung" und nicht Compiler-Meldung.
Und ja, natürlich wird der Wert -1 von der Funktion zurückgegeben.
Hab' heute nacht zu wenig geschlafen
Aber zurück zu den Beispielcodes. Weiß jermand 'was?
easyDB-lib über Netzwerk
Verfasst: 16.10.2004 16:59
von Maurizio555
Hallo!
Was mich am Meisten interessieren würde:
laut Hilfe der easyDB-lib soll ein Zugriff auf die Datenbank per Netzwerk möglich sein. (Beispiele aus den Fehler-Codes der Hilfe: -22=Max. 10 gleichzeitige Verbindungen möglich. -28= Fehler beim Herstellen der Verbindung über Netzwerk. -29=Der Server konnte nicht erstellt werden.).
Es wird aber nirgendwo erwähnt, wie das überhaupt realisiert wird!
Verfasst: 16.10.2004 18:59
von ts-soft
Für den Netzwerkzugriff brauchst Du die "netbase100.dll" vom gleichem Autor (MRK-Soft,
http://www.mrk-soft.de ). Diese DLL befindet sich im aktuellen Paket nicht, so das Du den Autor kontaktieren solltest. Mir ist nicht bekannt, ob ich diese DLL weitergeben darf, da diese DLL's ursprünglich Shareware waren
Ich hoffe dies hilft Dir ein bißchen weiter. Mein Beispiel läuft ab PB 3.90 fehlerfrei
