[Gambas-user] (no subject)

Piramix Tecnologías piramix at ...178...
Mon Jan 21 16:05:55 CET 2008


Hi everybody and thanks in advance. Every help will be appreciated.
Mi question must be simple but I've been trying to find a solution for my problem for about a week and still haven't found it.
Here's the deal.
I have a basic program wich stores data in a mysql database, using several tables wich a form that searches in a every table in particular; I'd like use the same form for every search. In that form I use a ListView control to show data to the user, so, when the user doubleclicks on a field of the listview I need the form to close itself and send the data (only one field) to the form wich made the call. To avoid problems I'm using the same names for control to every form. How should I do to make the search form to do that?
I do not know if I can attach files so here I post the code I already made:

For the Locali form:

' Gambas class file

PRIVATE $hConn AS Connection

PUBLIC SUB Form_Open()
 $hConn = NEW Connection
 GoConnect
END

PUBLIC SUB GoConnect()
 TRY $hConn.Close
   WITH $hConn
     .Type = "mysql"
     .Host = "localhost"
     .Login = "root"
     .Password = ""
     .Name = ""
   END WITH
   $hConn.Name = "LABORA"
   $hConn.Open
 CATCH
   Message.Error(Error.Text)
END

PUBLIC SUB Form_Close()
END

PUBLIC SUB BotGuarda_Click()
 DIM AgregaDatos AS Result
IF Codigo.Text = "" OR Nombre.Text = "" OR Provin.Text = "" THEN
 Message.Error("Datos insuficientes. No se puede guardar el registro.")
ELSE
 INC Application.Busy
 $hConn.Begin
 AgregaDatos = $hConn.Create("LOCALI")
 AgregaDatos!CODIGO = Codigo.Text
 AgregaDatos!NOMBRE = Nombre.Text
 AgregaDatos!PROVIN = Provin.Text
 AgregaDatos.Update
 $hConn.Commit
 DEC Application.Busy
 Message.Info("El registro se guardó correctamente.")
 BorrForm
CATCH
 $hConn.Rollback
 Message.Error(DConv(Error.Text))
ENDIF
END

PUBLIC SUB BotNuevo_Click()
 BorrForm
END

PUBLIC SUB BotCodigo_Click()
 DIM rDatos AS Result
 DIM hBusqueda AS Buscar
 rDatos = $hConn.Exec("SELECT * FROM LOCALI ORDER BY NOMBRE")
 hBusqueda = NEW Buscar($hConn, rDatos)
 hBusqueda.Show
 Codigo.Text = Comun.MiNombre
END

PUBLIC SUB BotProvin_Click()
 DIM rDatos AS Result
 DIM hBusqueda AS Buscar
 rDatos = $hConn.Exec("SELECT * FROM PROVIN ORDER BY NOMBRE")
 hBusqueda = NEW Buscar($hConn, rDatos)
 hBusqueda.Show END

PUBLIC SUB Codigo_LostFocus()
 ActuForm
END

PUBLIC SUB ActuForm()
 DIM rDatos AS Result
 IF Codigo.text <> "" THEN
   rDatos = $hConn.Exec("SELECT * FROM LOCALI WHERE CODIGO ='" & Codigo.Text & "'")
   IF rDatos.Available THEN
     Nombre.Text = rDatos!NOMBRE
     Provin.Text = rDatos!PROVIN
   ELSE
   ENDIF
 ENDIF
END


PUBLIC SUB BorrForm()
 Codigo.Text = ""
 Nombre.Text = ""
 Provin.Text = ""
 TextProvin.Text = ""
END

PUBLIC SUB Provin_LostFocus()
 DIM rDatos AS Result
 rDatos = $hConn.Exec("SELECT NOMBRE FROM PROVIN WHERE CODIGO ='" & Provin.Text & "'")
 IF rDatos.Available THEN
   TextProvin.Text = rDatos!NOMBRE
 ELSE
   TextProvin.Text = ""
 ENDIF
END


###########


For the search form:

' Gambas class file

PRIVATE $hConn AS Connection
PRIVATE $rDatos AS Result
fine AS Boolean
cur AS Integer

PUBLIC SUB _new(hConn AS Connection, rDatos AS Result)
 $hConn = hConn
 $rDatos = rDatos
 ReadData
 ME.Move(Int(Rnd(Desktop.W - ME.W)), Int(Rnd(Desktop.H - ME.H)))
END

PRIVATE SUB ReadData()
 DIM hField AS ResultField
 DIM iInd AS Integer
 INC Application.Busy
 tbvData.Rows.Count = 0
 tbvData.Columns.Count = $rDatos.Fields.Count
 FOR EACH hField IN $rDatos.Fields
   WITH hField
     tbvData.Columns[iInd].Text = .Name
     tbvData.Columns[iInd].Width = WidthFromType(tbvData, .Type, .Length, .Name)
   END WITH
   INC iInd
 NEXT
 IF $rDatos.Count = -1 THEN
   tbvData.Rows.Count = rowcount()
 ELSE
 tbvData.Rows.Count = $rDatos.Count
 ENDIF
FINALLY
 DEC Application.Busy
CATCH
 Message.Error("No se puede efectuar la consulta solicitada." & "\n\n" & DConv(Error.Text))
END

PUBLIC SUB tbvData_Data(Row AS Integer, Column AS Integer)
 $rDatos.MoveTo(Row)
 tbvData.Data.Text = Str($rDatos[tbvData.Columns[Column].Text])
 tbvData.Data.Background = Color.RGB(((Row MOD 2) + 1) * 255, ((Row MOD 2) + 1) * 255, ((Row MOD 2) + 1) * 225)
 tbvData.Data.Foreground = Color.Black
END

PUBLIC SUB Form_Resize()
 tbvData.Resize(ME.ClientW, ME.ClientH)
END

PRIVATE FUNCTION WidthFromType(hCtrl AS control, iType AS Integer, iLength AS Integer, sTitle AS String) AS Integer
 DIM iWidth AS Integer
 SELECT CASE iType
   CASE gb.Boolean
     iWidth = hCtrl.Font.Width(Str(FALSE)) + 32
   CASE gb.Integer
     iWidth = hCtrl.Font.Width("1234567890") + 16
   CASE gb.Long
     iWidth = hCtrl.Font.Width("12345678901234567890") + 16
   CASE gb.Float
     iWidth = hCtrl.Font.Width(CStr(Pi) & "E+999") + 16
   CASE gb.Date
     iWidth = hCtrl.Font.Width(Str(Now)) + 16
   CASE gb.String
     IF iLength = 0 THEN iLength = 255
     iLength = Min(32, iLength)
     iWidth = hCtrl.Font.Width("X") * iLength + 16
 END SELECT
 iWidth = Max(iWidth, hCtrl.Font.Width(sTitle) + 8)
 RETURN iWidth
END

PRIVATE FUNCTION rowcount() AS Integer
 DIM rows AS Integer
 rows = 0
 DO
   $rDatos.MoveTo(rows)
  INC rows
 LOOP
CATCH
 RETURN rows
END

PUBLIC SUB tbvData_DblClick()
 Comun.MiNombre = tbvData.Current.Text
 Locali.Codigo.Text = Comun.MiNombre      # I'm using this variable to pass the name to the parent form but it doesn't work as I intented to
 Locali.ActuForm    # This is a sub wich refresh data at the parent form
 ME.Close
END



Greetings.
Pablo.


-- 
Want an e-mail address like mine?
Get a free e-mail account today at www.mail.com!





More information about the User mailing list