Struktur zurückgeben [Gelöst]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Micky91
Beiträge: 35
Registriert: 06.11.2013 19:35

Struktur zurückgeben [Gelöst]

Beitrag 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
Zuletzt geändert von Micky91 am 22.11.2013 12:50, insgesamt 1-mal geändert.
PureBasic 5.72 (x64) | Mac OSX 10.15.6
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Struktur zurückgeben

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
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

Re: Struktur zurückgeben

Beitrag 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
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
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Struktur zurückgeben

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Micky91
Beiträge: 35
Registriert: 06.11.2013 19:35

Re: Struktur zurückgeben

Beitrag von Micky91 »

Nicht streiten Jungs :D
Immerhin gibt es eine Lösung, die mich weiter bringt. Danke! :allright:
PureBasic 5.72 (x64) | Mac OSX 10.15.6
Antworten