easyDB-lib

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Maurizio555
Beiträge: 53
Registriert: 03.10.2004 10:00
Wohnort: BW

easyDB-lib

Beitrag 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?
Mit fernem Wasser läßt sich nicht ein nahes Feuer löschen.
Tsue Hung (525 n.Chr.).
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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)
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.
Bild
Benutzeravatar
Maurizio555
Beiträge: 53
Registriert: 03.10.2004 10:00
Wohnort: BW

Beispiele

Beitrag 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?
Mit fernem Wasser läßt sich nicht ein nahes Feuer löschen.
Tsue Hung (525 n.Chr.).
christian_dev
Beiträge: 2
Registriert: 10.10.2004 13:13

Beitrag 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 !
Benutzeravatar
Maurizio555
Beiträge: 53
Registriert: 03.10.2004 10:00
Wohnort: BW

AllocateMemory

Beitrag 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??? :)
Mit fernem Wasser läßt sich nicht ein nahes Feuer löschen.
Tsue Hung (525 n.Chr.).
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: AllocateMemory

Beitrag 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().
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Maurizio555
Beiträge: 53
Registriert: 03.10.2004 10:00
Wohnort: BW

Compiler/Debugger

Beitrag 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 :mrgreen:
Aber zurück zu den Beispielcodes. Weiß jermand 'was?
Mit fernem Wasser läßt sich nicht ein nahes Feuer löschen.
Tsue Hung (525 n.Chr.).
Benutzeravatar
Maurizio555
Beiträge: 53
Registriert: 03.10.2004 10:00
Wohnort: BW

easyDB-lib über Netzwerk

Beitrag 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!
Mit fernem Wasser läßt sich nicht ein nahes Feuer löschen.
Tsue Hung (525 n.Chr.).
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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 :oops:
Ich hoffe dies hilft Dir ein bißchen weiter. Mein Beispiel läuft ab PB 3.90 fehlerfrei :allright:
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.
Bild
Antworten