Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2010-03

Uso de TSQLQuery y TDBGrid

9 messages · 4 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Ismael L. Donis García

Se puede utilizar un TSQLQuery enlazado con un TDBGrid para la inserci�n y actualizaci�n de datos de forma directa sobre un TDBGrid?

Llevo d�as atascado en esto y no he logrado salir alante, por lo que he podido detectar al poner un select sobre una tabla en la propiedad SQL del TSQLQuery me lo toma como solo lectura.

Alguien me podr� dar una peque�a ayudita sobre el tema:

Trabajo Lazarus 0.9.29 + Firebird 2.1.3

GRACIAS
=========
�� ISMAEL ��
=========
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20100301/f5c5c763/attachment.html>

Reply by email

JoshyFun
to Ismael L. Donis García

Hello Ismael,

Monday, March 1, 2010, 3:52:25 PM, you wrote:

ILDG> Se puede utilizar un TSQLQuery enlazado con un TDBGrid ILDG> para la inserci�n y actualizaci�n de datos de forma directa ILDG> sobre un TDBGrid?
ILDG> Llevo d�as atascado en esto y no he logrado salir alante, ILDG> por lo que he podido detectar al poner un select sobre una tabla ILDG> en la propiedad SQL del TSQLQuery me lo toma como solo lectura. ILDG> Alguien me podr� dar una peque�a ayudita sobre el tema:

Los TSQLQuery rara vez son editables, ya que a menos que sean muy simples tipo:

Select * from TTable

El resto directamente no hay modo de saber como actualizarlos, ejemplo:

Select TTABLE1.ID,CAMPO from TTABLE1
Inner Join TTABLE2 on TTABLE1.ID=TTABLE2.ID

Para insertar un registro con ese query tendr�as que editar ID y CAMPO, pero eso no garantiza que TTABLE2.ID obtenga un valor v�lido ya que no lo editamos. Probablemente este sea "autoinc" pero puede no serlo o haber m�s campos que no salen en el select y que pueden necesitar otro tipo de actuaci�n.

Resumiendo, que para poder editar un select necesitamos rellenar los SQL necesarios para UPDATE, INSERT y DELETE (los SQLUpdate, ...) para que el SQLQuery sepa que hacer en cada caso.

Best regards, JoshyFun

Reply by email

Ismael L. Donis García
to JoshyFun

Muchas gracias, me has dado un peque�o empuj�n, ya que ahora si entra en modo edici�n, pero no inserta nada aun en la tabla, se de hecho que tengo que agregar c�digo.

Ahora tengo 2 dudas m�s:

1.- Como le introduzco valores a una columna dada por c�digo? Por ejemplo algo como esto:
dbgum.Columns[1].Text:=dtm.strentidad;

Estoy tratando de hacer:
procedure Tfrmum.rsumBeforeInsert(DataSet: TDataSet);
begin
  dbgum.Columns[1].Text:=dtm.strentidad;
  rsum.Params.ParamByName('sEntidad').AsString:=dtm.strentidad;
  rsum.Params.ParamByName('sUm').AsString:=dbgum.Columns[0].Text;
end;

2.- No se me est� disparando en evento OnKeyPress del TDBGrid, ser� esto un problema de Lazarus?. Como resolver tal problema?

procedure Tfrmum.dbgumKeyPress(Sender: TObject; var Key: char);
begin
  if Key = #13 then
    cmdcerrar.SetFocus;
end;

Eso es solo una prueba porque aun me falta una l�nea donde pregunte si la primera columna est� vac�a, que m�s bien esa ser�a la tercer duda.

Saludos reiterados
=========
�� ISMAEL ��
=========

Earlier message 46 lines
----- Original Message ----- From: "JoshyFun" <joshyfun en gmail.com> To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org> Sent: Monday, March 01, 2010 12:26 PM Subject: Re: [Lazarus-es] Uso de TSQLQuery y TDBGrid Hello Ismael, Monday, March 1, 2010, 3:52:25 PM, you wrote: ILDG> Se puede utilizar un TSQLQuery enlazado con un TDBGrid ILDG> para la inserci�n y actualizaci�n de datos de forma directa ILDG> sobre un TDBGrid? ILDG> Llevo d�as atascado en esto y no he logrado salir alante, ILDG> por lo que he podido detectar al poner un select sobre una tabla ILDG> en la propiedad SQL del TSQLQuery me lo toma como solo lectura. ILDG> Alguien me podr� dar una peque�a ayudita sobre el tema: Los TSQLQuery rara vez son editables, ya que a menos que sean muy simples tipo: Select * from TTable El resto directamente no hay modo de saber como actualizarlos, ejemplo: Select TTABLE1.ID,CAMPO from TTABLE1 Inner Join TTABLE2 on TTABLE1.ID=TTABLE2.ID Para insertar un registro con ese query tendr�as que editar ID y CAMPO, pero eso no garantiza que TTABLE2.ID obtenga un valor v�lido ya que no lo editamos. Probablemente este sea "autoinc" pero puede no serlo o haber m�s campos que no salen en el select y que pueden necesitar otro tipo de actuaci�n. Resumiendo, que para poder editar un select necesitamos rellenar los SQL necesarios para UPDATE, INSERT y DELETE (los SQLUpdate, ...) para que el SQLQuery sepa que hacer en cada caso. -- Best regards, JoshyFun

Reply by email

JoshyFun
to Ismael L. Donis García: Muchas gracias, me has dado un peque�o empuj�n, ya que ahora si entra en modo…

Hello Ismael,

Monday, March 1, 2010, 8:00:01 PM, you wrote:

ILDG> Muchas gracias, me has dado un peque�o empuj�n, ya que ahora si entra en ILDG> modo edici�n, pero no inserta nada aun en la tabla, se de hecho que tengo ILDG> que agregar c�digo.
ILDG> Ahora tengo 2 dudas m�s:
ILDG> 1.- Como le introduzco valores a una columna dada por c�digo? ILDG> Por ejemplo algo como esto:
ILDG> dbgum.Columns[1].Text:=dtm.strentidad;

Los valores se los tienes que dar al registro, cuando se actualizan en el registro aparecen en el dbgrid (o deber�an).

ILDG> Estoy tratando de hacer:
ILDG> procedure Tfrmum.rsumBeforeInsert(DataSet: TDataSet);
ILDG> begin
ILDG>   dbgum.Columns[1].Text:=dtm.strentidad;
ILDG>   rsum.Params.ParamByName('sEntidad').AsString:=dtm.strentidad;
ILDG>
ILDG> rsum.Params.ParamByName('sUm').AsString:=dbgum.Columns[0].Text;
ILDG> end;
rsum.edit;
rsum.parambyname.......
rsum.post;

Ahora deber�as ver el registro actualizado en el dbgrid.

ILDG> 2.- No se me est� disparando en evento OnKeyPress del TDBGrid, ser� esto un
ILDG> problema de Lazarus?. Como resolver tal problema?
ILDG> procedure Tfrmum.dbgumKeyPress(Sender: TObject; var Key: char);
ILDG> begin
ILDG>   if Key = #13 then
ILDG>     cmdcerrar.SetFocus;
ILDG> end;

Es un bug del dbgrid con la tecla enter, para solventarlo al menos temporalmente comprueba la tecla en el onkeyup, y creo que no tendr�s problema. Ojo, onkeyup diferencia entre enter e intro.

ILDG> Eso es solo una prueba porque aun me falta una l�nea donde pregunte si la ILDG> primera columna est� vac�a, que m�s bien esa ser�a la tercer duda.

No entiendo la pregunta.

Best regards, JoshyFun

Reply by email

Fredy Gonzales
to JoshyFun

Ok, gracias

Buscare sobre ese punto.

FG
Lima - Peru

Earlier message 24 lines
----- Original Message ----- From: "JoshyFun" <joshyfun en gmail.com> To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org> Sent: Wednesday, March 03, 2010 11:54 AM Subject: Re: [Lazarus-es] Combobox con columnas multiples Hello Fredy, Wednesday, March 3, 2010, 4:52:45 PM, you wrote: FG> Alguien sabe como agregar dos colunmas a un comboBox, pero que cuando se FG> desplieque ense�e las dos y cuando esta sin desplegar solo muestre la FG> primera. FG> Esto es posible. Creo que s�lo con ownerdraw, vamos pintando a mano. -- Best regards, JoshyFun

Reply by email

Ismael L. Donis García
to JoshyFun: ILDG> Muchas gracias, me has dado un peque�o empuj�n, ya que ahora si entra en ILDG>…

Cuando doy rsum.edit o rsum.append me da error de la clase External SIGSEGV

La verdad que no encuentro la forma.

Hay alg�n miembro de la lista que le pueda pasar un peque�o ejemplo a ver si me puede depurar donde tengo el problema.

GRACIAS a to2s
=========
|| ISMAEL ||
=========

Earlier message 64 lines
----- Original Message ----- From: "JoshyFun" <joshyfun en gmail.com> To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org> Sent: Wednesday, March 03, 2010 11:53 AM Subject: Re: [Lazarus-es] Uso de TSQLQuery y TDBGrid Hello Ismael, Monday, March 1, 2010, 8:00:01 PM, you wrote: ILDG> Muchas gracias, me has dado un peque�o empuj�n, ya que ahora si entra en ILDG> modo edici�n, pero no inserta nada aun en la tabla, se de hecho que tengo ILDG> que agregar c�digo. ILDG> Ahora tengo 2 dudas m�s: ILDG> 1.- Como le introduzco valores a una columna dada por c�digo? ILDG> Por ejemplo algo como esto: ILDG> dbgum.Columns[1].Text:=dtm.strentidad; Los valores se los tienes que dar al registro, cuando se actualizan en el registro aparecen en el dbgrid (o deber�an). ILDG> Estoy tratando de hacer: ILDG> procedure Tfrmum.rsumBeforeInsert(DataSet: TDataSet); ILDG> begin ILDG> dbgum.Columns[1].Text:=dtm.strentidad; ILDG> rsum.Params.ParamByName('sEntidad').AsString:=dtm.strentidad; ILDG> ILDG> rsum.Params.ParamByName('sUm').AsString:=dbgum.Columns[0].Text; ILDG> end; rsum.edit; rsum.parambyname....... rsum.post; Ahora deber�as ver el registro actualizado en el dbgrid. ILDG> 2.- No se me est� disparando en evento OnKeyPress del TDBGrid, ser� esto un ILDG> problema de Lazarus?. Como resolver tal problema? ILDG> procedure Tfrmum.dbgumKeyPress(Sender: TObject; var Key: char); ILDG> begin ILDG> if Key = #13 then ILDG> cmdcerrar.SetFocus; ILDG> end; Es un bug del dbgrid con la tecla enter, para solventarlo al menos temporalmente comprueba la tecla en el onkeyup, y creo que no tendr�s problema. Ojo, onkeyup diferencia entre enter e intro. ILDG> Eso es solo una prueba porque aun me falta una l�nea donde pregunte si la ILDG> primera columna est� vac�a, que m�s bien esa ser�a la tercer duda. No entiendo la pregunta. -- Best regards, JoshyFun

Reply by email

josé Antonio Cuello Principal
to Fredy Gonzales: Alguien sabe como agregar dos colunmas a un comboBox, pero que cuando se desplieque…

Te envio un ejemplo de dibujar tres columnas al desplegar un ComboBox. El truco est� en guardar el valor de las tres columnas en el mismo item pero con un separador (en el ejemplo el punto y coma).

Despu�s implementamos nuestra propia funci�n de dibujado de columnas para que muestre las tres columnas. Para ello metemos en el evento OnDrawItem del ComboBox. Espero te sea de utilidad. Un saludo.

Rutina de pintado:
procedure TFormulario.ComboBoxDrawItem( Control: TWinControl; Index:
Integer; Rect: TRect; State: TOwnerDrawState );
var
  sValor, sTodo: string;
  i, iPos: Integer;
  rc: TRect;
  AnchoColumna: array[0..3] of Integer;
begin
  ComboBox.Canvas.Brush.Style := bsSolid;
  ComboBox.Canvas.FillRect( Rect );
  // Las columnas deben ir separadas por un ;
  sTodo := ComboBox.Items[Index];
  // Establecemos el ancho de las columnas
  AnchoColumna[0] := 0;
  AnchoColumna[1] := 100;  // Ancho de la columna 1
  AnchoColumna[2] := 200;  // Ancho de la columna 2
  AnchoColumna[3] := 300;  // Ancho de la columna 3
  // Leemos el texto de la primera columna
  iPos := Pos( ';', sTodo );
  sValor := Copy( sTodo, 1, iPos - 1 );
  for i := 0 to 3 do
  begin
    // Dibujamos la primera columna
    rc.Left   := Rect.Left + AnchoColumna[i] + 2;
    rc.Right  := Rect.Left + AnchoColumna[i+1] - 2;
    rc.Top    := Rect.Top;
    rc.Bottom := Rect.Bottom;
    // Escribimos el texto
    Combobox.Canvas.TextRect( rc, rc.Left, rc.Top, sValor );
    // Dibujamos las l�neas que separan las columnas
    if i < 3 then
    begin
      Combobox.Canvas.MoveTo( rc.Right, rc.Top );
      Combobox.Canvas.LineTo( rc.Right, rc.Bottom );
    end;
    // Leemos el texto de la segunda columna
    sTodo := Copy( sTodo, iPos + 1, Length( sTodo ) - iPos );
    iPos := Pos( ';', sTodo );
    sValor := Copy( sTodo, 1, iPos - 1 );
  end;
end;
Rutina que a�ade los items al combobox:
 with Combobox.Items do
 begin
   Add( 'JOSE;SANCHEZ;GARCIA;' );
   Add( 'MARIA;PEREZ;GOMEZ;' );
   Add( 'ANDRES;MARTINEZ;RUIZ;' );
 end;
rutina de asignaci�n de evento de pintado al combobox:
procedure TFormulario.FormCreate(Sender: TObject);
begin
  // Le decimos al ComboBox que lo vamos a pintar nosotros
  Combobox.Style := csOwnerDrawFixed;
end;

El mi�, 03-03-2010 a las 10:52 -0500, Fredy Gonzales escribi�:

Show quoted text 17 lines
Amigos, Alguien sabe como agregar dos colunmas a un comboBox, pero que cuando se desplieque ense�e las dos y cuando esta sin desplegar solo muestre la primera. Esto es posible. Gracias. FG _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

________________________________________________________________________

ARTEX TRADING S.A.
JOS� ANTONIO CUELLO PRINCIPAL

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20100304/621979b6/attachment-0001.html>

Reply by email