Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 25-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
Hola
Una pregunta bien tonta:
Donde declaras la variable Tab ?.
Saludos
Edito: Me respondo, global.
__________________
Siempre Novato
Responder Con Cita
  #22  
Antiguo 25-02-2012
jomah jomah is offline
Miembro
NULL
 
Registrado: feb 2012
Posts: 18
Poder: 0
jomah Va por buen camino
El Error Dice :
Invalid Use Of Keywork
Token: =
Line Number: 1.
Ese Es Lo Que Dice El Error
Responder Con Cita
  #23  
Antiguo 25-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
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
__________________
Siempre Novato
Responder Con Cita
  #24  
Antiguo 25-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
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
__________________
Siempre Novato
Responder Con Cita
  #25  
Antiguo 26-02-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #26  
Antiguo 27-02-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 688
Poder: 21
olbeup Va camino a la fama
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.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 27-02-2012 a las 09:08:03.
Responder Con Cita
  #27  
Antiguo 02-03-2012
jomah jomah is offline
Miembro
NULL
 
Registrado: feb 2012
Posts: 18
Poder: 0
jomah Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
DBGrid: Como redimensionar columnas si se redimensiona el dbGrid? quali OOP 6 08-02-2010 22:00:49
Como extraer field description de un campo? rulo_m Varios 13 30-01-2008 21:44:22
gbGrid: ¿como lleno columnas directamente que no vengan de un campo del SQL? gesDelf SQL 4 09-09-2006 21:12:13
¿Como se actualiza un campo de una tabla a partir de las columnas de otra? salvica SQL 12 09-07-2004 01:56:10
Como extraer datos de un DBgrid a otro DBgrid mickey Conexión con bases de datos 13 29-01-2004 05:05:30


La franja horaria es GMT +2. Ahora son las 17:30:49.


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
Copyright 1996-2007 Club Delphi