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)

Caral 25-02-2012 01:51:58

Hola
Una pregunta bien tonta:
Donde declaras la variable Tab ?.
Saludos
Edito: Me respondo, global.

jomah 25-02-2012 02:18:37

El Error Dice :
Invalid Use Of Keywork
Token: =
Line Number: 1.
Ese Es Lo Que Dice El Error

Caral 25-02-2012 02:26:19

Hola
Puedes hacer esta prueba para descartar cosas:
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 MO021201';
Query1.Active:=True;
end;
end
;
Saludos

Caral 25-02-2012 03:15:53

Hola
Cualquiera de estas dos funciona perfectamente:
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 ''DEBE'' ELSE ''N'' END) AS DEBE, '+
                  ' (CASE WHEN DEBE_HABER ='+QUOTEDSTR('H')+' THEN ''HABER'' ELSE ''N'' END) AS HABER '+
                  ' from '+Tab;
Query1.Active:=True;
end;
end;

o esta, para mi mas sencilla:
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 ''DEBE'' ELSE ''HABER'' END) AS DEBE, '+
                  ' from '+Tab;
Query1.Active:=True;
end;
end;

Las dos generan el mismo resultado.
NO se puede, o por lo menos en Firebird no me dejo poner el nombre del campo, creo que ese es el problema.
Saludos

ecfisa 26-02-2012 01:45:23

Hola jomah.

De este modo también funciona:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Tab:= 'MO' + FormatDateTime('mmyy', Now) + '01';
  with IBQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT NUM_CTA, NUMDEPTO, CONCEP_PO, TIPCAMBIO,');
    SQL.Add('(CASE DEBE_HABER WHEN ''D'' THEN MONTOMOV ELSE 0 END) AS DEBE,');
    SQL.Add('(CASE DEBE_HABER WHEN ''H'' THEN MONTOMOV ELSE 0 END) AS HABER');
    SQL.Add('FROM ' + Tab);
    Open;
  end;
end;
Con todas las propuestas que has recibido, logicamente no podía ser un código muy original... :p:)

Saludos.

olbeup 27-02-2012 09:03:11

Cuando realicéis una SQL, que os cuesta hacerla bien, a la hora de detectar un error, no será mejor si la SQL está bien distribuida.

Código Delphi [-]
...
begin
  Tab := FormatDateTime('"MO"mmyy01', Now);
  with Query1 do
  begin
    SQL.Add('SELECT');
    SQL.Add('    NUM_CTA');
    SQL.Add('    ,NUMDEPTO');
    SQL.Add('    ,CONCEP_PO');
    SQL.Add('    ,TIPCAMBIO');
    SQL.Add('    ,DEBE =');
    SQL.Add('      CASE');
    SQL.Add('        WHEN DEBE_HABER = ''D'' THEN MONTOMOV');
    SQL.Add('        ELSE 0');
    SQL.Add('      END');
    SQL.Add('    ,HABER =');
    SQL.Add('      CASE');
    SQL.Add('        WHEN DEBE_HABER = ''H'' THEN MONTOMOV');
    SQL.Add('        ELSE 0');
    SQL.Add('      END');
    SQL.Add('  FROM ' + Tab);

    Open;
  end;
end;
Esto es para SQL SERVER, si es lo que estas usando y sino encuentra la forma correcta para tu motor.

upsss, creo que ecfisa se me ha adelantado

Un saludo.

jomah 02-03-2012 17:35:59

el codigo lo modifique ya que al ser tablas paradox no me permite utilizar case y solo agunas veces el if lo modifique de la siguiente manera:
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, DBClient, XPMan, Provider;

type
  TfrmModelo1 = class(TForm)
    DBGrid1: TDBGrid;
    IMPRIMIR: TBitBtn;
    SALIR: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    dbedtNUM_REG: TDBEdit;
    dbedtNUM_REG1: TDBEdit;
    dbedtFECHA_POL: TDBEdit;
    DataSource1: TDataSource;
    Query2: TQuery;
    xpmnfst1: TXPManifest;
    dtstprvdr1: TDataSetProvider;
    ds1: TClientDataSet;
    strngfldds1NUM_CTA: TStringField;
    smlntfldds1NUMDEPTO: TSmallintField;
    strngfldds1CONCEP_PO: TStringField;
    fltfldds1TIPCAMBIO: TFloatField;
    strngfldds1DEBE_HABER: TStringField;
    fltfldds1MONTOMOV: TFloatField;
    intgrfldds1NUM_REG: TIntegerField;
    strngfldds1TIPO_POLI: TStringField;
    dtmfldds1FECHA_POL: TDateTimeField;
    strngfldds1NUM_POLIZ: TStringField;
    fltfldds1DEBE1: TFloatField;
    fltfldds1HEBER1: TFloatField;
    procedure SALIRClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmModelo1: TfrmModelo1;
  Tab: string;
  d1: string;
  d2: Currency;
  d3: string;
  d4: Integer;
  x: Integer;
implementation

uses frmPrincipal;

{$R *.dfm}

procedure TfrmModelo1.SALIRClick(Sender: TObject);
begin
CLOSE;
frmPrincipal1.BringToFront;
frmPrincipal1.Enabled:=True;
frmPrincipal1.DBGrid1.Enabled:=True;
end;

procedure TfrmModelo1.FormShow(Sender: TObject);
begin
Tab:= 'MO' + FormatDateTime('mmyy', Now) + '01';
Query2.Active:=False;
//query2.sql.text:='SELECT NUM_REG,TIPO_POLI,FECHA_POL,NUM_CTA,NUMDEPTO,CONCEP_PO,TIPCAMBIO,DEBE_HABER,NUM_POLIZ,MONTOMOV FROM MO021201';
Query2.Active:=True;

 ds1.Active:=True;
Query2.First;
  While Not Query2.Eof do
  begin
    ds1.Insert;
    ds1.FieldByName('NUM_CTA').AsString := Query2.fieldbyname('NUM_CTA').AsString;
    ds1.FieldByName('NUMDEPTO').AsInteger := Query2.fieldbyname('NUMDEPTO').AsInteger;
    ds1.FieldByName('CONCEP_PO').AsString := Query2.fieldbyname('CONCEP_PO').AsString;
    ds1.FieldByName('TIPCAMBIO').AsFloat := Query2.fieldbyname('TIPCAMBIO').AsFloat;

    if  Query2.FieldByName('DEBE_HABER').AsString ='D' then
    begin
      ds1.FieldByName('DEBE1').AsFloat:=Query2.fieldbyname('MONTOMOV').AsFloat;

    end
    else if Query2.FieldByName('DEBE_HABER').AsString ='H' then
    begin
      ds1.FieldByName('DEBE1').AsFloat:=Query2.fieldbyname('MONTOMOV').AsFloat;

    end;
     ds1.Post;
    Query2.Next;
  end;

end;
end.

espero que me puedan ayudar porque aun no me muestra nada en los campos nuevos que cree en el clienmtdataset

y tambien muchas gracias por la ayuda hasta el momento


La franja horaria es GMT +2. Ahora son las 14:26:53.

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