Jean-Yves F. Barbier ha scritto: > Doriano Blengino a écrit : > .... > >> About "recover any kind [...] from into a loop", I don't understand. >> Perhaps you want to scan all the controls residing on a form - there is >> the Controls[] property for that. Or you want to stream out all the >> > > I am suspecting you are transferring data from and to a database... don't know why I suspect...
May be the following routines can act as a base, if this is your duty. The first one, load_record(), takes a container and a Result as parameters, and fills every control in the container with the corresponding data from the current record of Result. In the container, relevant controls must be named "edDBxxxx", where "xxxx" is the name of the field from database; other controls are ignored. For every kind of control different code is used, so you can use specialized controls, as I did with TDbCalcBox, which is a special control of mines. ' transfers a record from a result to a page; TRUE if error PUBLIC SUB load_record(hCont AS Container, res AS Result) AS Boolean DIM obj AS Object FOR EACH obj IN hCont.Children IF obj.name LIKE "edDB*" THEN SELECT Lower(object.Type(obj)) CASE "textbox", "tdbsimplebox" TRY obj.text = res[Mid(obj.name, 5)] CASE "tdbcalcbox" obj.text = "0" TRY obj.text = utils.formatdecimal(res[Mid(obj.name, 5)], "#,0", obj.decimals) CASE "tdbdatebox" IF dateformat = "" THEN calculate_dateseparator obj.text = "" ' TRY obj.text = Format(res[Mid(obj.name, 5)], dateformat) TRY obj.text = canonicaldate(Format(res[Mid(obj.name, 5)], gb.GeneralDate)) CASE "checkbox" obj.value = FALSE IF res[Mid(obj.name, 5)] THEN obj.value = TRUE CASE "label" obj.text = "?" TRY obj.text = res[Mid(obj.name, 5)] END SELECT ENDIF NEXT RETURN FALSE CATCH Message.Error("Errore " & error.Text & " in " & error.Where) RETURN TRUE END This is the counterpart of the previous, to write a record out to a database. ' transfers a record from page to database; TRUE if error PUBLIC SUB save_record(hCont AS Container, recmod AS Result) AS Boolean DIM obj AS Object DIM st AS String FOR EACH obj IN hCont.Children IF obj.name LIKE "edDB*" THEN SELECT Lower(object.Type(obj)) CASE "textbox", "tdbsimplebox" recmod[Mid(obj.name, 5)] = obj.text CASE "tdbcalcbox" recmod[Mid(obj.name, 5)] = utils.formatted2float(obj.text) CASE "tdbdatebox" st = canonicaldate(obj.text) IF st <> "" THEN recmod[Mid(obj.name, 5)] = Val(st) CASE "checkbox" recmod[Mid(obj.name, 5)] = obj.value END SELECT ENDIF NEXT recmod.Update RETURN FALSE CATCH Message.Error("Errore " & error.Text & " in " & error.Where) RETURN TRUE END This last one fills a grid, displaying a Result in tabular form. ' prepare and fill a grid with data from a result ' columns are defined as "dbfield/title!width" ' dbfield is the field name in recordset ' title is the column title; if absent, same as dbfield ' width is the column width. If absent, equally spaced columns are used ' example: "id/Unique code!120 ' columns are modified only if col[0].text is empty PUBLIC SUB fill_rec_grid(gvDB AS GridView, Columns AS String, res AS result) DIM i, k, width AS Integer DIM fields AS String[] DIM st, title AS String DIM managecols AS Boolean managecols = TRUE IF gvdb.Columns.Count THEN managecols = gvdb.Columns[0].Text = "" fields = Split(columns, ",", "", FALSE) gvDB.Columns.Count = fields.Count FOR i = 0 TO fields.count - 1 st = fields[i] k = InStr(st, "!") width = gvdb.Width \ fields.Count ' default IF k THEN width = Val(Mid(st, k + 1)) st = Left(st, k - 1) ENDIF IF managecols THEN gvdb.Columns[i].Width = width k = InStr(st, "/") IF k THEN title = Mid(st, k + 1) st = Left(st, k - 1) ELSE title = st ENDIF IF managecols THEN gvdb.Columns[i].text = title title = Upper(Left(title, 1)) & Mid(title, 2) ENDIF fields[i] = st NEXT gvDB.Rows.Count = res.Count FOR i = 0 TO res.Count - 1 res.MoveTo(i) FOR k = 0 TO fields.Count - 1 title = fields[k] TRY st = res[title] IF NOT ERROR THEN width = res.Fields[title].Type ' find correct formatting SELECT width CASE 8 ' date field st = Format(res[title], gb.GeneralDate) gvDB[i, k].Text = " " & st CASE 7 ' float - align right st = " " & res[title] WHILE gvdb.font.Width(st) + 8 < gvdb.Columns[k].Width st = " " & st WEND gvDB[i, k].Text = Mid(st, 2) DEFAULT ' normal field ' do NOT format! Sometimes text is used as database key TRY gvDB[i, k].Text = res[title] END SELECT ENDIF NEXT NEXT END If this is not what you needed, simply ignore it - but may be you can see something useful. Regards, -- Doriano Blengino "Listen twice before you speak. This is why we have two ears, but only one mouth." ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user