Seite 1 von 1

Liste an Procedur übergeben [Gelöst]

Verfasst: 19.11.2013 10:15
von Micky91
Moin,
versuche verzweifelt eine Liste an eine Prozedur zu übergeben, aber irgendwas mache ich wohl noch falsch.
Mittlerweile bekomme ich noch folgende Meldung:

Code: Alles auswählen

Zeile XY: Declare doesn’t match with real Procedure
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()

Re: Liste an Procedur übergeben

Verfasst: 19.11.2013 10:27
von Lord
Warum erklärst Du eine Struktur mit Strings als Long?

Re: Liste an Procedur übergeben

Verfasst: 19.11.2013 10:37
von Micky91
Ne, Long ist natürlich quatsch, hier soll die Liste übergeben werden.
Code angepasst.

Re: Liste an Procedur übergeben

Verfasst: 19.11.2013 11:05
von Kiffi
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

Re: Liste an Procedur übergeben

Verfasst: 19.11.2013 11:08
von Danilo
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()

Re: Liste an Procedur übergeben

Verfasst: 19.11.2013 13:28
von Micky91
Jau, jetzt hab ich´s kapiert. Danke :allright:

Der * ist ja für Pointer gedacht, was besagt das @-Zeichen?

Re: Liste an Procedur übergeben [Gelöst]

Verfasst: 19.11.2013 14:53
von NicTheQuick
Siehe Hilfe. Das @-Zeichen gibt die Speicheradresse (Pointer) einer Variablen oder Funktion zurück.