Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como extraer inforcion de un campo en dos columnas de un dbgrid!!!! (https://www.clubdelphi.com/foros/showthread.php?t=77769)

jomah 24-02-2012 21:28:17

Como extraer inforcion de un campo en dos columnas de un dbgrid!!!!
 
Buenos Dias

Mi dilema es que de un campo de una tabla tengo que sacar dos columnas pero la info que debe haber en una no debe salir en la otra. Ejemplo:
tabla->MO12.....
campo->MONTOMOV . . . . .Columns de DBGRID-> DEBE . . . . . HABER
. . . . . ------------ . . . . . . . . . . . . . . . . . . . --------- . . ------------
inform-> 300.16 . . . . . . . . . . . . . . . . . . . . . . . 300.16
. . . . . . 200.34 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200.34
. . . . . . . 16.34 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.34

en la tabla hay otro campo que clasifica los numeros del MONTOMOV:
campo->DEBE_HABER
. . . . . .-------------
Iinform-> . . .D
. . . . . . . . . .H
. . . . . . . . . .H
Y no se como hacer para que el DBGRID agarre la tabla MONTOMOV y la divida en 2 y los clasifique.
Hise el siguiiente codigo:

procedure TfrmModelo1.FormShow(Sender: TObject);
begin
Tab:= 'MO' + FormatDateTime('mmyy', Now) + '01';
query1.sql.text:= 'SELECT NUM_CTA,NUMDEPTO,CONCEP_PO,TIPCAMBIO, CASE WHEN DEBE_HABER='+QUOTEDSTR('D')+' THEN SELECT MONTOMOV as DEBE FROM '+Tab+' END, CASE WHEN DEBE_HABER='+QUOTEDSTR('H')+' THEN SELECT MONTOMOV as HABER FROM '+Tab+' END from '+Tab+' WHERE DEBE_HABER= '+QUOTEDSTR('H')+' OR DEBE_HABER= '+QUOTEDSTR('D')+'';
Query1.Active:=True;
end;

Pero me tira error

GRACIAS DE ANTEMANO

ecfisa 24-02-2012 21:34:20

Hola jomah.

Por favor, cuando incluyas código en tus mensaje usa TAG's, su uso es:



Saludos y gracias por tu colaboración.

Casimiro Noteví 24-02-2012 21:55:27

Cita:

Empezado por jomah (Mensaje 426043)
Pero me tira error

¿Tenemos que adivinar el error? ;)

Recuerda nuestra guía de estilo, gracias.

Caral 24-02-2012 21:59:41

Hola
Cita:

Empezado por Casimiro Notevi (Mensaje 426054)
¿Tenemos que adivinar el error? ;)

Recuerda nuestra guía de estilo, gracias.

La BD, el concepto, el componente, el etc y para que no falte el otro etc....;)
No se que cuesta poner TODA la información.
No me habéis dicho desde cuando cobráis por letra.:):eek:
Saludos

jomah 24-02-2012 22:19:33

Código Delphi [-]
unit frmModelo;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, StdCtrls, Buttons, Grids, DBGrids, ComCtrls, Mask,
  DBCtrls;

type
  TfrmModelo1 = class(TForm)
    DBGrid1: TDBGrid;
    IMPRIMIR: TBitBtn;
    SALIR: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    DataSource1: TDataSource;
    Query1: TQuery;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    Query1NUM_CTA: TStringField;
    Query1NUMDEPTO: TSmallintField;
    Query1CONCEP_PO: TStringField;
    Query1TIPCAMBIO: TFloatField;
    Query1MONTOMOV: TFloatField;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmModelo1: TfrmModelo1;
  Tab: String;

implementation

{$R *.dfm}

procedure TfrmModelo1.FormShow(Sender: TObject);
begin
Tab:= 'MO' + FormatDateTime('mmyy', Now) + '01';
query1.sql.text:= 'SELECT NUM_CTA,NUMDEPTO,CONCEP_PO,TIPCAMBIO, CASE WHEM DEBE_HABER='+QUOTEDSTR('D')+' THEN SELECT MONTOMOV as DEBE FROM '+Tab+' END, CASE WHEM DEBE_HABER='+QUOTEDSTR('H')+' THEN SELECT MONTOMOV as HABER FROM '+Tab+' END from '+Tab+'';
Query1.Active:=True;
end;

end.

y el errorn que me da cuando intenta entrar en la informacion de la tablame dice token: when

Caral 24-02-2012 22:25:45

Hola
Solo por arreglar algo esta consulta, sin modificarla.

Código Delphi [-]
procedure TfrmModelo1.FormShow(Sender: TObject);
begin
Tab:= 'MO' + FormatDateTime('mmyy', Now) + '01';
query1.sql.text:= ' SELECT NUM_CTA,NUMDEPTO,CONCEP_PO,TIPCAMBIO, '+
                  ' CASE WHEM DEBE_HABER='+QUOTEDSTR('D')+' THEN SELECT MONTOMOV as DEBE FROM '+Tab+' END, '+
                  ' CASE WHEM DEBE_HABER='+QUOTEDSTR('H')+' THEN SELECT MONTOMOV as HABER FROM '+Tab+' END '+
                  ' from '+Tab+'';
Query1.Active:=True;
end;
end;
Saludos

luisgutierrezb 24-02-2012 22:25:58

bueno en el codigo pegado dice whem no wheN, tal vez sea el error

jomah 24-02-2012 23:05:50

no el error me sigue apareciendo y dice asi:
invalid use of keyword
token: WHEN
Line number: 1.

ecfisa 24-02-2012 23:23:07

Hola.

La sintáxis (al menos en Firebird) es:
Código:

CASE
  WHEN <bool_exp1> THEN result1
  WHEN <bool_exp2> THEN result2
  ...
  [ELSE defaultresult]
END

Probá quitando el segundo CASE:
Código Delphi [-]
...
  'CASE WHEN DEBE_HABER = '+QUOTEDSTR('D')+' THEN SELECT MONTOMOV as DEBE FROM ' + Tab + ' END, '+
  'WHEN DEBE_HABER = '+QUOTEDSTR('H')+' THEN SELECT MONTOMOV as HABER FROM ' + Tab + ' END '+
...

Saludos.

jomah 25-02-2012 00:03:02

no el error todavia me sigue apareciendo
ya nno ayo que acer con ese case

Casimiro Noteví 25-02-2012 00:08:55

Cita:

Empezado por jomah (Mensaje 426082)
... ya nno ayo que acer con ese case

Disculpa, ¿qué dice ahí?

jomah 25-02-2012 00:10:37

que ya no allo que hacer con ese 'case'

Casimiro Noteví 25-02-2012 00:42:45

¿Puedes copiar aquí exactamente el código que estás usando?

jomah 25-02-2012 00:54:24

Código Delphi [-]
unit frmModelo;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, StdCtrls, Buttons, Grids, DBGrids, ComCtrls, Mask,
  DBCtrls;

type
  TfrmModelo1 = class(TForm)
    DBGrid1: TDBGrid;
    IMPRIMIR: TBitBtn;
    SALIR: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    DataSource1: TDataSource;
    Query1: TQuery;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    Query1NUM_CTA: TStringField;
    Query1NUMDEPTO: TSmallintField;
    Query1CONCEP_PO: TStringField;
    Query1TIPCAMBIO: TFloatField;
    Query1MONTOMOV: TFloatField;
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmModelo1: TfrmModelo1;
  Tab: String;

implementation

{$R *.dfm}

procedure TfrmModelo1.FormShow(Sender: TObject);
begin
Tab:= 'MO' + FormatDateTime('mmyy', Now) + '01';
query1.sql.text:= ' SELECT NUM_CTA,NUMDEPTO,CONCEP_PO,TIPCAMBIO, '+
                  'CASE WHEN DEBE_HABER = '+QUOTEDSTR('D')+' THEN SELECT MONTOMOV as DEBE FROM ' + Tab + ' END, '+
                  'WHEN DEBE_HABER = '+QUOTEDSTR('H')+' THEN SELECT MONTOMOV as HABER FROM ' + Tab + ' END '+
                  ' from '+Tab+'';
Query1.Active:=True;
end;

procedure TfrmModelo1.FormCreate(Sender: TObject);
begin

end;

end.

Caral 25-02-2012 01:02:10

Hola
Son dos condiciones:
Código Delphi [-]
procedure TfrmModelo1.FormShow(Sender: TObject);
begin
Tab:= 'MO' + FormatDateTime('mmyy', Now) + '01';
query1.sql.text:= ' SELECT NUM_CTA,NUMDEPTO,CONCEP_PO,TIPCAMBIO, '+
                  ' iif( DEBE_HABER = 'D', (MONTOMOV as DEBE) , (MONTOMOV as HABER) ) from '+Tab;
Query1.Active:=True;
end;
end;
Saludos

Caral 25-02-2012 01:05:15

Hola
Con Case es igual, son dos condiciones, si no es una entonces es la otra:
Código Delphi [-]
procedure TfrmModelo1.FormShow(Sender: TObject);
begin
Tab:= 'MO' + FormatDateTime('mmyy', Now) + '01';
query1.sql.text:= ' SELECT NUM_CTA,NUMDEPTO,CONCEP_PO,TIPCAMBIO, '+
                  ' CASE WHEN DEBE_HABER = 'D' THEN (MONTOMOV as DEBE) ELSE (MONTOMOV as HABER) END '+
                  ' From '+Tab;
Query1.Active:=True;
end;
end;
Saludos

Al González 25-02-2012 01:10:46

Hola jomah.

Te marcaba error en "When" porque cerrabas el Case prematuramente. Según te mostró ecfisa en mensajes anteriores, el End del case va después de todas las opciones "When". O sea que no es un "End" por cada When, sino un sólo "End" al final del Case. :)

En cuanto a la marca Acer de tu computadora, no creo que sea factor en este caso. ;)

Caral 25-02-2012 01:25:58

Hola
Otra opción:

Código Delphi [-]
procedure TfrmModelo1.FormShow(Sender: TObject);
begin
Tab:= 'MO' + FormatDateTime('mmyy', Now) + '01';
query1.sql.text:= ' SELECT NUM_CTA, NUMDEPTO, CONCEP_PO, TIPCAMBIO, '+
                  ' CASE WHEN DEBE_HABER ='+QUOTEDSTR('D')+' THEN (MONTOMOV as DEBE) END, '+
                  ' CASE WHEN DEBE_HABER ='+QUOTEDSTR('H')+' THEN (MONTOMOV as HABER) END '+
                  ' from '+Tab;
Query1.Active:=True;
end;
end;
No estoy muy seguro de esta, me gustan mas las otras dos.
Saludos

jomah 25-02-2012 01:40:02

gracias muchas gracias por la ayuda

ahora ya no me tira error en el when ahora me dice token: = osea error en el igual

Caral 25-02-2012 01:44:26

Hola
Tokem....... Que ?.
No creo que sea solo eso el error, que dice el error completo ?.
Cual de todos los codigos te ha funcionado, asi nos entendemos mejor ?
Saludos


La franja horaria es GMT +2. Ahora son las 13:44:55.

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