[gelöst] 2 Werte aus Procedure bekommen ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

[gelöst] 2 Werte aus Procedure bekommen ?

Beitrag von scholly »

moin, moin...

Ich habe 2 Subroutinen (AddNewItem und ReplaceItem), die einen Datensatz in eine SQLite-DB schreiben:

Code: Alles auswählen

  SQLiteExecute(DBref, "BEGIN TRANSACTION" )
  If SQliteExecute( DBref, "Insert Into mainTable (" + cols2write + ") Values (" + str4sql + ")" ) = #False
    MessageRequester("Error", SQliteErrorMsg(DBref))
    Debug SQliteErrorMsg(DBref)
  EndIf
  SQLiteExecute(DBref, "COMMIT" )
bzw

Code: Alles auswählen

  SQLiteExecute(DBref, "BEGIN TRANSACTION" )
  If SQliteExecute( DBref, "Replace Into mainTable (" + cols2write + ") Values (" + str4sql + ")" ) = #False
    MessageRequester("Replace Into mainTable: Error", SQliteErrorMsg(DBref))
    Debug SQliteErrorMsg(DBref)
  EndIf
  SQLiteExecute(DBref, "COMMIT" )
Die beiden Variablen cols2write und str4sql fülle ich bisher ebenfalls in einer subroutine:

Code: Alles auswählen

make_str4sql:
;############################################# 
;{
  cols2write  = ""
  str4sql     = "°" 

  If (GetGadgetText(#i_win_strg_titel) <> "")
    cols2write = cols2write + "Titel"
    str4sql  = str4sql + GetGadgetText(#i_win_strg_titel)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_genre) <> ""  
    cols2write = cols2write + ", Genre"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_genre)  + "°" 
  EndIf  
  If GetGadgetText(#i_win_spig_jahr) <> ""  
    cols2write = cols2write + ", Jahr"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_spig_jahr)  + "°" 
  EndIf
  If GetGadgetText(#i_win_CBxg_MeTYp) <> ""  
    cols2write = cols2write + ", MediumTyp"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_CBxg_MeTYp)  + "°" 
  EndIf
  If GetGadgetText(#i_win_strg_MeNam) <> ""  
    cols2write = cols2write + ", Mediumname"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_MeNam)  + "°" 
  EndIf
  If GetGadgetText(#i_win_CBxg_lager) <> ""  
    cols2write = cols2write + ", Owner"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_CBxg_lager)  + "°" 
  EndIf
  If GetGadgetText(#i_win_CBxg_quell) <> ""  
    cols2write = cols2write + ", Quelle"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_CBxg_quell)  + "°" 
  EndIf
  If GetGadgetText(#i_win_strg_dauer) <> ""  
    cols2write = cols2write + ", Dauer"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_dauer)  + "°" 
  EndIf
  If GetGadgetText(#i_win_CBxg_quali) <> ""  
    cols2write = cols2write + ", Qualität"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_CBxg_quali)  + "°" 
  EndIf
  If GetGadgetText(#i_win_strg_infos) <> ""  
    cols2write = cols2write + ", Infos"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_infos)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_artis) <> ""  
    cols2write = cols2write + ", Artist"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_artis)  + "°" 
  EndIf
  If GetGadgetText(#i_win_strg_path) <> ""  
    cols2write = cols2write + ", Path"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_path)  + "°" 
  EndIf
  If GetGadgetText(#i_win_strg_fname) <> ""  
    cols2write = cols2write + ", FileName"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_fname)  + "°" 
  EndIf
  If GetGadgetText(#i_win_strg_fsize) <> ""  
    cols2write = cols2write + ", FileSize"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_fsize)  + "°" 
  EndIf
  If GetGadgetText(#i_win_strg_vicod) <> ""  
    cols2write = cols2write + ", VideoCodec"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_vicod)  + "°" 
  EndIf
  If GetGadgetText(#i_win_strg_vibit) <> ""  
    cols2write = cols2write + ", VideoBitrate"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_vibit)  + "°" 
  EndIf  
  If GetGadgetText(#i_win_strg_auflo) <> ""  
    cols2write = cols2write + ", Auflösung"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_auflo)  + "°" 
  EndIf  
  If GetGadgetText(#i_win_strg_fps) <> ""  
    cols2write = cols2write + ", fps"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_fps)  + "°" 
  EndIf  
  If GetGadgetText(#i_win_strg_aucod) <> ""  
    cols2write = cols2write + ", AudioCodec"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_aucod)  + "°" 
  EndIf
  If GetGadgetText(#i_win_strg_aubit) <> ""  
    cols2write = cols2write + ", AudioBitrate"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_aubit)  + "°" 
  EndIf
  If GetGadgetText(#i_win_strg_kanal) <> ""  
    cols2write = cols2write + ", AudioKanäle"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_kanal)  + "°" 
  EndIf
  If GetGadgetText(#i_win_strg_srate) <> ""  
    cols2write = cols2write + ", SamplingRate"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_srate)  + "°" 
  EndIf
  Debug cols2write
  str4sql = ReplaceString(str4sql, "'", "''")
  str4sql =  ReplaceString(str4sql, "°", "'")
  Debug str4sql

;}
Return; make_str4sql


Nun bin ich grade beim "Aufräumen" und verfrachte soviel Subroutinene wie möglich/nötig/sinnvoll in Prozeduren, um das ganze Proggie etwas übersichtlicher zu bekommen.

Dummerweise bekomme ich aus einer Procedure ja nur einen Wert heraus, sodaß ich in diesem Fall besser bei der Subroutine bleibe.

Oder hab ich was übersehen, das es mir ermöglicht, irgendwie an beide Werte zu kommen.

etwas :? .... scholly
Zuletzt geändert von scholly am 17.05.2008 16:06, insgesamt 2-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

werfe einfach ein Pointer mit als Parameter in die Procedure

Code: Alles auswählen

Structure Werte
 Var1.l
 Var2.l
EndStructure

Procedure Test(*Var.Werte)
 *Var\Var1 = 3
 *Var\Var2 = 5
EndProcedure


Var.Werte
Var\Var1 = 2
Var\Var2 = 4
Test(Var)
Debug Var\Var1
Debug Var\Var2
dann kannst du eine structurierte Var reinwerfen und dann damit auf Globaler ebene arbeiten sodass die Procedure die Variabel direckt ändert
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
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

STARGÅTE hat geschrieben:werfe einfach ein Pointer mit als Parameter in die Procedure
.........
dann kannst du eine structurierte Var reinwerfen und dann damit auf Globaler ebene arbeiten sodass die Procedure die Variabel direckt ändert
sorry, versteh ich nich, ich hatte es noch nie so mit Pointern und Strukturen :?
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

also, wenn du einer Procedure ein Pointer gibst (also die Position im Speicher wo eine Variable oder eine Structureirte Variabel liegt) dann kann die Procedure direkt mit dieser (im Hauptprogramm liegenden) Variabel arbeiten und genau an der Stelle im Speicher änderungen vornehmen.

Damit ist es möglich Variablen im Hauptcode in einer Procedure zu verändern ohne diese Global zu machen

Damit kannst du in der Procedure mehrere Variablen änder und diese nach der Procedure dann weiter verwenden (wie eine art rückgabe)
Zuletzt geändert von STARGÅTE am 29.12.2007 01:49, insgesamt 1-mal geändert.
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
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@scholly:

mal eben so heruntergehackt. Ich hoffe, mit Deinem eigenen Code kannst
Du den Ausführungen von STARGÅTE besser folgen.

Code: Alles auswählen

Structure Werte
  cols2write.s
  str4sql.s
EndStructure

Procedure make_str4sql(*Var.Werte)
  
  Protected cols2write.s  = ""
  Protected str4sql.s     = "°"
  
  If (GetGadgetText(#i_win_strg_titel) <> "")
    cols2write = cols2write + "Titel"
    str4sql  = str4sql + GetGadgetText(#i_win_strg_titel)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_genre) <> "" 
    cols2write = cols2write + ", Genre"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_genre)  + "°"
  EndIf 
  If GetGadgetText(#i_win_spig_jahr) <> "" 
    cols2write = cols2write + ", Jahr"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_spig_jahr)  + "°"
  EndIf
  If GetGadgetText(#i_win_CBxg_MeTYp) <> "" 
    cols2write = cols2write + ", MediumTyp"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_CBxg_MeTYp)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_MeNam) <> "" 
    cols2write = cols2write + ", Mediumname"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_MeNam)  + "°"
  EndIf
  If GetGadgetText(#i_win_CBxg_lager) <> "" 
    cols2write = cols2write + ", Owner"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_CBxg_lager)  + "°"
  EndIf
  If GetGadgetText(#i_win_CBxg_quell) <> "" 
    cols2write = cols2write + ", Quelle"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_CBxg_quell)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_dauer) <> "" 
    cols2write = cols2write + ", Dauer"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_dauer)  + "°"
  EndIf
  If GetGadgetText(#i_win_CBxg_quali) <> "" 
    cols2write = cols2write + ", Qualität"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_CBxg_quali)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_infos) <> "" 
    cols2write = cols2write + ", Infos"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_infos)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_artis) <> "" 
    cols2write = cols2write + ", Artist"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_artis)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_path) <> "" 
    cols2write = cols2write + ", Path"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_path)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_fname) <> "" 
    cols2write = cols2write + ", FileName"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_fname)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_fsize) <> "" 
    cols2write = cols2write + ", FileSize"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_fsize)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_vicod) <> "" 
    cols2write = cols2write + ", VideoCodec"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_vicod)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_vibit) <> "" 
    cols2write = cols2write + ", VideoBitrate"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_vibit)  + "°"
  EndIf 
  If GetGadgetText(#i_win_strg_auflo) <> "" 
    cols2write = cols2write + ", Auflösung"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_auflo)  + "°"
  EndIf 
  If GetGadgetText(#i_win_strg_fps) <> "" 
    cols2write = cols2write + ", fps"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_fps)  + "°"
  EndIf 
  If GetGadgetText(#i_win_strg_aucod) <> "" 
    cols2write = cols2write + ", AudioCodec"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_aucod)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_aubit) <> "" 
    cols2write = cols2write + ", AudioBitrate"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_aubit)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_kanal) <> "" 
    cols2write = cols2write + ", AudioKanäle"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_kanal)  + "°"
  EndIf
  If GetGadgetText(#i_win_strg_srate) <> "" 
    cols2write = cols2write + ", SamplingRate"
    str4sql  = str4sql + ", °" + GetGadgetText(#i_win_strg_srate)  + "°"
  EndIf
  Debug cols2write
  str4sql = ReplaceString(str4sql, "'", "''")
  str4sql =  ReplaceString(str4sql, "°", "'")
  Debug str4sql
  
  *Var\cols2write = cols2write
  *Var\str4sql    = str4sql
  
EndProcedure
  
Define Var.Werte

make_str4sql(Var) 

SQLiteExecute(DBref, "BEGIN TRANSACTION" )
If SQLiteExecute( DBref, "Insert Into mainTable (" + Var\cols2write + ") Values (" + Var\str4sql + ")" ) = #False
  MessageRequester("Error", SQliteErrorMsg(DBref))
  Debug SQliteErrorMsg(DBref)
EndIf
SQLiteExecute(DBref, "COMMIT" )
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

jep,jep,jep :bounce:

:allright: , Danke mal wieder, ihr beiden, ihr kommt in die Credits :wink:

:D ....scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ihr kommt in die Credits
lol, nett ^^, wenn das immer so schnell gehen würde :D

@Kiffi : jo so meinte ich das ^^
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
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

STARGÅTE hat geschrieben: wenn das immer so schnell gehen würde :D
Äh.... "so schnell" ?
Kiffi war u.a. immer da, wenns um SQLite ging...
und wie war das mit Dir und dem Ähnlichkeits-Check (In einem Land vor unsere Zeit... :) )

Und der About-Requester hat mich gestern reichlich Nerven gekostet, das muß ich doch jetzt ausnutzen /:->
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Antworten