Anfängerfragen zum Programmieren mit PureBasic.
Micky91
Beiträge: 35 Registriert: 06.11.2013 19:35
Beitrag
von Micky91 » 19.11.2013 10:15
Moin,
versuche verzweifelt eine Liste an eine Prozedur zu übergeben, aber irgendwas mache ich wohl noch falsch.
Mittlerweile bekomme ich noch folgende Meldung:
Heißt das die Deklaration der Prozedur ist nicht richtig?
Dazu etwas Beispiel-Code:
Code: Alles auswählen
EnableExplicit
; Declare Structures
Structure sPerson
Name.s
Vorname.s
EndStructure
; Declare Procedures
Declare InsertIntoDatabase(Person)
Procedure Read_Liste()
NewList Person.sPerson()
AddElement(Person())
Person()\Name = "Person1"
Person()\Vorname = "Vorname Person1"
AddElement(Person())
Person()\Name = "Person2"
Person()\Vorname = "Vorname Person2"
ForEach Person()
Debug "Name: " + Person()\Name
Debug "Vorname: " + Person()\Vorname
; Insert to Database
InsertIntoDatabase(Person())
Next
EndProcedure
Procedure InsertIntoDatabase(List Person())
If OpenDatabase(0, DatabaseFile$, "", "")
Debug "Datenbankfile geöffnet"
Debug Person()\Name
;......
EndIf
EndProcedure
;Main
Read_Liste()
Zuletzt geändert von
Micky91 am 19.11.2013 13:29, insgesamt 2-mal geändert.
PureBasic 5.72 (x64) | Mac OSX 10.15.6
Lord
Beiträge: 324 Registriert: 21.01.2008 19:11
Beitrag
von Lord » 19.11.2013 10:27
Warum erklärst Du eine Struktur mit Strings als Long?
Micky91
Beiträge: 35 Registriert: 06.11.2013 19:35
Beitrag
von Micky91 » 19.11.2013 10:37
Ne, Long ist natürlich quatsch, hier soll die Liste übergeben werden.
Code angepasst.
PureBasic 5.72 (x64) | Mac OSX 10.15.6
Kiffi
Beiträge: 10714 Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Beitrag
von Kiffi » 19.11.2013 11:05
die Struktur muss mit angegeben werden:
Code: Alles auswählen
EnableExplicit
; Declare Structures
Structure sPerson
Name.s
Vorname.s
EndStructure
; Declare Procedures
Declare InsertIntoDatabase(List Person.sPerson())
Procedure Read_Liste()
NewList Person.sPerson()
AddElement(Person())
Person()\Name = "Person1"
Person()\Vorname = "Vorname Person1"
AddElement(Person())
Person()\Name = "Person2"
Person()\Vorname = "Vorname Person2"
ForEach Person()
Debug "Name: " + Person()\Name
Debug "Vorname: " + Person()\Vorname
; Insert to Database
InsertIntoDatabase(Person.sPerson())
Next
EndProcedure
Procedure InsertIntoDatabase(List Person.sPerson())
If OpenDatabase(0, DatabaseFile$, "", "")
Debug "Datenbankfile geöffnet"
Debug Person()\Name
;......
EndIf
EndProcedure
;Main
Read_Liste()
Grüße ... Kiffi
a²+b²=mc²
Danilo
-= Anfänger =-
Beiträge: 2284 Registriert: 29.08.2004 03:07
Beitrag
von Danilo » 19.11.2013 11:08
Mit Struktur, 1 Eintrag pro Aufruf von InsertIntoDatabase():
Code: Alles auswählen
EnableExplicit
; Declare Structures
Structure sPerson
Name.s
Vorname.s
EndStructure
; Declare Procedures
Declare InsertIntoDatabase(*Person.sPerson)
Procedure Read_Liste()
NewList Person.sPerson()
AddElement(Person())
Person()\Name = "Person1"
Person()\Vorname = "Vorname Person1"
AddElement(Person())
Person()\Name = "Person2"
Person()\Vorname = "Vorname Person2"
ForEach Person()
Debug "Name: " + Person()\Name
Debug "Vorname: " + Person()\Vorname
; Insert to Database
InsertIntoDatabase(@Person()) ; 1 Struktur übergeben
Next
EndProcedure
Procedure InsertIntoDatabase(*Person.sPerson)
Protected DatabaseFile$=""
;If OpenDatabase(0, DatabaseFile$, "", "")
Debug "Datenbankfile geöffnet"
Debug *Person\Name
;......
;EndIf
EndProcedure
;Main
Read_Liste()
Ganze Liste an InsertIntoDatabase():
Code: Alles auswählen
EnableExplicit
; Declare Structures
Structure sPerson
Name.s
Vorname.s
EndStructure
; Declare Procedures
Declare InsertIntoDatabase(List Person.sPerson())
Procedure Read_Liste()
NewList Person.sPerson()
AddElement(Person())
Person()\Name = "Person1"
Person()\Vorname = "Vorname Person1"
AddElement(Person())
Person()\Name = "Person2"
Person()\Vorname = "Vorname Person2"
InsertIntoDatabase(Person()) ; Ganze Liste übergeben
EndProcedure
Procedure InsertIntoDatabase(List Person.sPerson())
Protected DatabaseFile$=""
;If OpenDatabase(0, DatabaseFile$, "", "")
ForEach Person()
Debug "Datenbankfile geöffnet"
Debug Person()\Name
Next
;......
;EndIf
EndProcedure
;Main
Read_Liste()
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Micky91
Beiträge: 35 Registriert: 06.11.2013 19:35
Beitrag
von Micky91 » 19.11.2013 13:28
Jau, jetzt hab ich´s kapiert. Danke
Der * ist ja für Pointer gedacht, was besagt das @-Zeichen?
PureBasic 5.72 (x64) | Mac OSX 10.15.6
NicTheQuick
Ein Admin
Beiträge: 8809 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200 Ubuntu 24.04.2 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Beitrag
von NicTheQuick » 19.11.2013 14:53
Siehe Hilfe. Das @-Zeichen gibt die Speicheradresse (Pointer) einer Variablen oder Funktion zurück.