Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema al mostrar un registro en un label (https://www.clubdelphi.com/foros/showthread.php?t=88607)

rufo 02-07-2015 19:38:47

Problema al mostrar un registro en un label
 
Buenas tardes necesito de su valiosa colaboracion, resulta que tengo una consulta en un combobox ya que al traer informacion de una consulta y llenar el combobox nop quiere mostrar informacion adicional a un label entonces quiero ver cual es mi error o que me falta, les pongo el codigo de mi consulta y de antemano gracias por su apoyo.

Código Delphi [-]
procedure Tprincipal2.ComboBox7Exit(Sender: TObject);
begin
 with dm1.Q_cfacturas do
   begin
      active:=false;
      sql.clear;
      sql.add('select id_cuenta from Cfacturas');
      sql.Add('where cuenta = '+#39+combobox7.text+#39);
      active:=true;
      first;
      if recordcount<>0 then
         V_idcuenta:=fieldbyname('id_cuenta').asinteger
         label114.Caption:=fieldbyname('numerocta').asstring;
   end;
end;
Tambien les anexo la imagen de mi consulta

Casimiro Notevi 02-07-2015 19:53:26

¿Y el problema es...?

rufo 02-07-2015 20:02:26

Que no me muestra el numero de cuenta en el label

ecfisa 02-07-2015 20:28:00

Hola bulc.

La composición de cadenas SQL al modo de,
Código Delphi [-]
sql.Add('where cuenta = '+#39+combobox7.text+#39);
ademas de ser permeable a la inyección SQL es de difícil lectura y estéticamente horrible. Siempre que sea posíble usa parámetros.

Código Delphi [-]
procedure Tprincipal2.ComboBox7Exit(Sender: TObject);
var
  cb: TComboBox;
begin
  cb := TComboBox(Sender);
  if cb.ItemIndex <> - 1 then
    with dm1.Q_cfacturas do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT ID_CUENTA FROM CFACTURAS');
      SQL.Add('WHERE CUENTA = :CTA');
      ParamByName('CTA').AsString := cb.Items[cb.ItemIndex];
      Open;
      if not IsEmpty then
        label114.Caption := FieldByName('CTA').AsString;
      Close;
    end;
end;
Si con este código no te muestra ningún valor en la propiedad Caption del Label, puedo asegurarte que: La consulta no arrojó ningún resultado, o bién el campo ID_CUENTA es NULL (en tu código la propiedad Text del combo también podría no haber tenido el valor deseado).

Saludos :)

aposi 03-07-2015 00:20:07

para que te muestre el numero de cuenta, tienes que poner el campo en la consulta

Código Delphi [-]
   SQL.Add('SELECT ID_CUENTA,numerocta FROM CFACTURAS');

rufo 03-07-2015 00:49:22

Gracias amigos ya me quedo mi código tome el que me dijo el amigo aposi y me funciono y de nuevo gracias.

nlsgarcia 03-07-2015 02:03:56

rufo,

Cita:

Empezado por ecfisa
...Siempre que sea posible usa parámetros (Evita la inyección SQL)...

Cita:

Empezado por rufo
...ya me quedo mi código tome el que me dijo el amigo aposi... ^\||/

:rolleyes:

Te sugiero considerar las recomendaciones dadas en el Msg #4, combinado todo lo anterior con algunas variaciones:
Código Delphi [-]
procedure TPrincipal2.ComboBox7Change(Sender: TObject);
begin
   with dm1.Q_CFacturas do
   begin
      Close;
      SQL.Clear;
      SQL.Add('Select ID_Cuenta, NumeroCta From CFacturas');
      SQL.Add('Where Cuenta = :P1');
      ParamByName('P1').AsString := ComboBox7.Items[ComboBox7.ItemIndex];
      Open;
      if Recordcount <> 0 then
      begin
         V_idcuenta := FieldByname('ID_Cuenta').AsInteger
         Label114.Caption := FieldByname('NumeroCta').AsString;
      end;
   end;
end;
Espero sea útil :)

Nelson.

ecfisa 03-07-2015 03:13:20

Hola.

Voy a hacer una fe de errata del mensaje #4, producto de que escribi el código diréctamente sobre el mensaje.

Donde dice:
Código Delphi [-]
 label114.Caption := FieldByName('CTA').AsString;
debería decir:
Código Delphi [-]
 label114.Caption := FieldByName('ID_CUENTA').AsString;
Repetí el nombre de parámetro al referenciar la columna.

Saludos :)


La franja horaria es GMT +2. Ahora son las 07:10:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi