Seite 1 von 1

Struktur zurückgeben [Gelöst]

Verfasst: 22.11.2013 10:52
von Micky91
Ein offensichtlich kleines Problem, aber ich seh den Fehler nicht :|

Möchte ein Struktur aus einer Procedur zurück ans Hauptprogramm geben:

Code: Alles auswählen

EnableExplicit

UseSQLiteDatabase()

Global DatabaseFile$ = GetTemporaryDirectory()+"Database.sqlite"
Define Ergebnis

Structure Food
    Name$
    Weight.i 
EndStructure


Procedure GetFood(Name$)
  Protected Essen.Food
  If OpenDatabase(0, DatabaseFile$, "", "")
    Debug "Datenbank geöffnet"
  
    If (DatabaseQuery(0, "SELECT * FROM food WHERE name='" + Name$ + "'"))
      Debug "Query ausgeführt"
      FirstDatabaseRow(0)
      Essen.Food
      Essen\Name$ = GetDatabaseString(0,0)
      Essen\Weight= Val(GetDatabaseString(0,1))
      FinishDatabaseQuery(0)
      CloseDatabase(0)
      Debug "Name: "+ Essen\Name$
      Debug "Weight: "+ Essen\Weight
      ProcedureReturn Essen
    Else
      Debug "Kein Ergebnis!"
    EndIf
    
  Else
     Debug "Can't open database !"
  EndIf

EndProcedure

;Ergebnis.Food ; Führt dazu das er der Struktur keine Strukur zufügen kann, logisch
Ergebnis = GetFood("pear")
Debug Ergebnis\Name$ ; Die folgende Variable hat keine Strukur...

End

Re: Struktur zurückgeben

Verfasst: 22.11.2013 12:04
von STARGÅTE
Micky91 hat geschrieben:Möchte ein Struktur aus einer Procedur zurück ans Hauptprogramm geben
Geht nicht, bzw nicht nicht möglich.

Code: Alles auswählen

EnableExplicit

UseSQLiteDatabase()

Global DatabaseFile$ = GetTemporaryDirectory()+"Database.sqlite"

Structure Food
    Name$
    Weight.i 
EndStructure


Procedure GetFood(*Essen.Food, Name$)
  If OpenDatabase(0, DatabaseFile$, "", "")
    Debug "Datenbank geöffnet"
  
    If (DatabaseQuery(0, "SELECT * FROM food WHERE name='" + Name$ + "'"))
      Debug "Query ausgeführt"
      FirstDatabaseRow(0)
      *Essen\Name$ = GetDatabaseString(0,0)
      *Essen\Weight= Val(GetDatabaseString(0,1))
      FinishDatabaseQuery(0)
      CloseDatabase(0)
      Debug "Name: "+ *Essen\Name$
      Debug "Weight: "+ *Essen\Weight
    Else
      Debug "Kein Ergebnis!"
    EndIf
    
  Else
     Debug "Can't open database !"
  EndIf

EndProcedure

Define Ergebnis.Food
GetFood(@Ergebnis, "pear")
Debug Ergebnis\Name$ ; Die folgende Variable hat keine Strukur...

End

Re: Struktur zurückgeben

Verfasst: 22.11.2013 12:06
von ts-soft
Geht nicht, gibts nicht :wink:

Code: Alles auswählen

EnableExplicit

UseSQLiteDatabase()

Global DatabaseFile$ = GetTemporaryDirectory()+"Database.sqlite"
Define Ergebnis

Structure Food
  Name$
  Weight.i
EndStructure


Procedure GetFood(Name$)
  Static Essen.Food
  If OpenDatabase(0, DatabaseFile$, "", "")
    Debug "Datenbank geöffnet"
    
    If (DatabaseQuery(0, "SELECT * FROM food WHERE name='" + Name$ + "'"))
      Debug "Query ausgeführt"
      FirstDatabaseRow(0)
      Essen.Food
      Essen\Name$ = GetDatabaseString(0,0)
      Essen\Weight= Val(GetDatabaseString(0,1))
      FinishDatabaseQuery(0)
      CloseDatabase(0)
      Debug "Name: "+ Essen\Name$
      Debug "Weight: "+ Essen\Weight
      ProcedureReturn @Essen
    Else
      Debug "Kein Ergebnis!"
    EndIf
    
  Else
    Debug "Can't open database !"
  EndIf
  
EndProcedure

;Ergebnis.Food ; Führt dazu das er der Struktur keine Strukur zufügen kann, logisch
Define *Ergebnis.Food
*Ergebnis = GetFood("pear")
If *Ergebnis <> 0
  Debug *Ergebnis\Name$
EndIf

End 
Ungetested, da ich keine entsprechende Datenbank habe ("Can't open database !")

Gruß
Thomas

Re: Struktur zurückgeben

Verfasst: 22.11.2013 12:13
von STARGÅTE
ts-soft hat geschrieben:Geht nicht, gibts nicht
Zählt nicht!

Auch hier wird keine Struktur zurückgegeben, sondern nur die Adresse zur statischen Variablen in der Prozedure.

Re: Struktur zurückgeben

Verfasst: 22.11.2013 12:16
von Micky91
Nicht streiten Jungs :D
Immerhin gibt es eine Lösung, die mich weiter bringt. Danke! :allright: