Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-08-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Capturar SQL que es pasada como parámetro

Tengo uma Procedure con 3 parametros. Como hago para obter el valor de uno de estos parametro? Abajo mi procedure:
Cita:
CriaComponente(4,'TB_MFD_CAPEADOR_REDUCAO','INSERT INTO TB_MFD_CAPEADOR_REDUCAO VALUES(' +
':PLoja,:PNu_Cx,:PDtMov,:PCoo,:PContReiOp,:PGeOpNFiscal,:PComprovCreDeb,' +
':PGerOpNFiscalCanc,:PGerRelGeren,:PContCCF,:PCCFCanc,:PContFitaDet,:PTotGeral,:PVendBrut,' +
':PCancICMS,:PDescICMS,:PTotISSQN,:PCancISSQN,:PDescISSQN,:PVendLiq,' +
':PAcreICMS,:PAcreISSQN,:PF1,:PI1,:PN1,:PFS1,:PIS1,:PNS1,:PCompNEmitido,' +
':PTempoEmit,:PTempoOper,:PMFD,:PNumRedRest,:PEquipamento,:PVersaoECF,' +
':PNumECF,:PParamECF,:PRel,:PBaseCalc,:PTotImposto,:PTotFormaPagReducao)');
Necesito de tercer parametro, que es onde estas la SQL com el INSERT. Estes parametros viene del Client. Como hago, para quando ejecutar el Client, yo capture lo que esta en la SQL?
Los parametros son:
Cita:
Cantidad de Primary Key(No se en español), el Nombre de la tabla(Esto va a crear mi DataSetProvider) e la SQL para ser ejecutada.
Responder Con Cita
  #2  
Antiguo 08-08-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Hizo asi, pero no logre exito:

Cita:
var
s:String;
begin
s := CriaComponente([2]);
.....
Asi no es posible. Error de tipo incompatible Integer y Set.
Responder Con Cita
  #3  
Antiguo 08-08-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola!

Ese procedimiento es un procedimiento de Delphi?

Si es así, solo debes usar el nombre del parámetro y listo...

Si no, pues sería bueno que te expliques un poco mejor....


Saludos...
Responder Con Cita
  #4  
Antiguo 08-08-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Mira, mi procedure estás arriba(CriaComponente). Ella tiene 3 parametros. Como hago para capturar el tercer parametro? Mira que el tercer parametro, es un INSERT y necesito capturar el valor deste parametro.
Cita:
CriaComponente(qtdCampoChave: Integer; nmTabela, SQL: string);
Quando ella for executada, necesito saber el valor de parametro SQL. Esto necesito, para pegar este valor y ejecutar en TOAD. Esta SQL es um parametro de mi procedure. No se si estoy sendo claro.
Responder Con Cita
  #5  
Antiguo 08-08-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola!

No se si te estoy entendiendo bien, pero, para obtener el valor del tercer parámetro solo debes hacer:

Código Delphi [-]
procedure CriaComponente(qtdCampoChave: Integer; nmTabela, SQL: string);
var
  SQLStr: string;

begin
  SQLStr := SQL;
  // Haces lo que necesitas...
end;

Voy bien o me regreso?



Saludos...
Responder Con Cita
  #6  
Antiguo 08-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, deberias poner el codigo fuente de CriaComponent. Ten en cuenta que si cria component es un procedure, entonces nunca te devolvera una string, tal como parece que estas esperando. Deberias hacer, entonces,

Código Delphi [-]
function CriaComponente(qtdCampoChave: Integer; nmTabela, SQL: string) : string;
begin

     ...
     CriaComponente := SQL;
end;

o bien hacer

Código Delphi [-]
procedure CriaComponente(qtdCampoChave : integer; nmTabela : string; var SQL string);
begin
   ...
   // modificar variable SQL
   ...
end;

var
   s : string;
begin
   CriaComponente(1,'test',s);
   ShowMessage(s); // s se ha modificado
end;

como digo, si pones el codigo fuente, nos entenderemos mejor un saludo
Responder Con Cita
  #7  
Antiguo 08-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
tambien puedes pasar un objeto query y una vez ejecutada la funcion, ver los resultados que tiene.

Código Delphi [-]
function CriaComponente(q : TAdoQuery; sql : string)
begin   
            ...
            q.Active := false;
            q.SQL.Text := sql
            if Pos('select',lowercase(sql)) <> 0 then 
              q.Active := true
            else
              q.ExecSQL;
end;

...

        CriaComponente(query1_a_consultar,...)
        showmessage(query1_a_consultar.FieldByName('total').asstring);
... // por ejemplo.
Responder Con Cita
  #8  
Antiguo 08-08-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Cita:
CriaComponente(4,'TB_MFD_CAPEADOR_REDUCAO','INSERT INTO TB_MFD_CAPEADOR_REDUCAO VALUES(' +
':PLoja,:PNu_Cx,:PDtMov,:PCoo,:PContReiOp,:PGeOpNFiscal,:PComprovCreDeb,' +
':PGerOpNFiscalCanc,:PGerRelGeren,:PContCCF,:PCCFCanc,:PContFitaDet,:PTotGeral,:PVendBrut,' +
':PCancICMS,:PDescICMS,:PTotISSQN,:PCancISSQN,:PDescISSQN,:PVendLiq,' +
':PAcreICMS,:PAcreISSQN,:PF1,:PI1,:PN1,:PFS1,:PIS1,:PNS1,:PCompNEmitido,' +
':PTempoEmit,:PTempoOper,:PMFD,:PNumRedRest,:PEquipamento,:PVersaoECF,' +
':PNumECF,:PParamECF,:PRel,:PBaseCalc,:PTotImposto,:PTotFormaPagReducao)');
Este es el fuente. Necesito saber el valor de SQL. Los valores de parametros de SQL viene del Client. Solo necesito saber lo que estas pasando por el.
Responder Con Cita
  #9  
Antiguo 08-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
pero...criacomponent de donde sale? no la has programado tu?
Responder Con Cita
  #10  
Antiguo 08-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
igualmente, si criacomponent modifica una query a la que tengas acceso, le deberian quedar los valores dentro del query una vez pasada la funcion.

Última edición por coso fecha: 08-08-2008 a las 20:31:15.
Responder Con Cita
  #11  
Antiguo 08-08-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Perdon, me olvide de poner el fuente corecto. Este es el fuente de CriaComponente. Estas en mi servidor de aplicaccion.
Cita:
procedure TRDM_Consulta.CriaComponente(qtdCampoChave: Integer; nmTabela,
SQL: string);
var
qry: TSQLQuery;
dsp: TDataSetProvider;
begin
qry := TSQLQuery.Create(Self);
dsp := TDataSetProvider.Create(Self);
qry.Name := 'qry' + nmTabela;
dsp.Name := 'dsp' + nmTabela;
qry.SQLConnection := qryGeral.SQLConnection;
qry.SQL.Text := SQL;
dsp.DataSet := qry;
dsp.Exported := True;
dsp.UpdateMode := upWhereKeyOnly;
dsp.Options := dsp.Options + [poAllowCommandText];

case qtdCampoChave of
1: qry.AfterOpen := qryAfterOpen1Key;
2: qry.AfterOpen := qryAfterOpen2Key;
3: qry.AfterOpen := qryAfterOpen3Key;
4: qry.AfterOpen := qryAfterOpen4Key;
5: qry.AfterOpen := qryAfterOpen5Key;
6: qry.AfterOpen := qryAfterOpen6Key;
7: qry.AfterOpen := qryAfterOpen7Key;
8: qry.AfterOpen := qryAfterOpen8Key;
end;

dsp.OnDataRequest := dspDataRequestParam;
end;
Em mi client yo paso los valores del Sql:
Cita:
if (dMov <> '') and (nCoo <> '') and (sCompNEmitido <> '') then
begin
DM_Create.ConectaMatriz;
with DM_Create.CDS_CapeReducao do
begin
Close;
Params[00].AsString := nLoja;
Params[01].AsString := sNu_Cx;
Params[02].AsString := dMov;
Params[03].AsString := nCoo;
Params[04].AsString := nContReiOp;
Params[05].AsString := nGeOpNFiscal;
Params[06].AsString := sComprovCreDeb;
Params[07].AsString := nGerOpNFiscalCanc;
Params[08].AsString := sGerRelGeren;
Params[09].AsString := nContCCF;
Params[10].AsString := nCCFCanc;
Params[11].AsString := nContFitaDet;
Params[12].AsString := nTotGeral;
Params[13].AsString := nVendBrut;
Params[14].AsString := sCancICMS;
Params[15].AsString := nDescICMS;
Params[16].AsString := nTotISSQN;
Params[17].AsString := sCancISSQN;
Params[18].AsString := nDescISSQN;
Params[19].AsString := nVendLiq;
Params[20].AsString := nAcreICMS;
Params[21].AsString := nAcreISSQN;
Params[22].AsString := sF1;
Params[23].AsString := sI1;
Params[24].AsString := sN1;
Params[25].AsString := sFS1;
Params[26].AsString := sIS1;
Params[27].AsString := sNS1;
Params[28].AsString := sCompNEmitido;
Params[29].AsString := sTempoEmit;
Params[30].AsString := sTempoOper;
Params[31].AsString := sMFD;
Params[32].AsString := nNumRedRest;
Params[33].AsString := sEquipamento;
Params[34].AsString := sVersaoECF;
Params[35].AsString := nNumECF;
Params[36].AsString := sParamECF;
Params[37].AsString := sRel;
Params[38].AsString := nBaseCalc;
Params[39].AsString := nTotImposto;
Params[40].AsString := nTotFormaPagReducao;

Execute;
......
Cambie todos por String, pero el eror es el mismo. Si yo paso directo CommandText, con los mismos valores, funciona. Pero por parametro y el CommandText en el Servidor de Aplicacion, entonces no funciona.
Responder Con Cita
  #12  
Antiguo 08-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
No le veo solucion aparte de las que ya te he comentado: pasarle un query tambien como parametro,

Código Delphi [-]
procedure TRDM_Consulta.CriaComponente(qtdCampoChave: Integer;nmTabela, SQL: string; qry : TSQLquery);
var
dsp: TDataSetProvider;
begin
   dsp := TDataSetProvider.Create(Self);
...
  dsp.DataSet := qry;
  dsp.Exported := True;
  dsp.UpdateMode := upWhereKeyOnly;
  dsp.Options := dsp.Options + [poAllowCommandText];
...

o bien que te devuelva un query

Código Delphi [-]
function TRDM_Consulta.CriaComponente(qtdCampoChave: Integer;nmTabela, SQL: string) : TSQLquery;
var
  qry: TSQLQuery;
  dsp: TDataSetProvider;
begin
  qry := TSQLQuery.Create(Self);
  dsp := TDataSetProvider.Create(Self);
  qry.Name := 'qry' + nmTabela;
  dsp.Name := 'dsp' + nmTabela
...
  dsp.OnDataRequest := dspDataRequestParam;
  CriaComponente := qry;
end;

ten en cuenta que en tu funcion no liberas qry ni dsp, por lo que la estas creando incontables veces.
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
Sebastián -va en metro al trabajo y dice tener su despacho a 26 grados marcoszorrilla La Taberna 5 06-07-2008 07:46:36
Error con fecha (fecha ya pasada) Rancy Varios 2 01-07-2008 08:37:47
Publicitan Ubuntu en el metro de Berlín. Casimiro Notevi La Taberna 2 25-09-2007 08:09:21
El Gobierno regional culpa a los viajeros de los retrasos que sufre el metro marcoszorrilla La Taberna 7 23-01-2007 10:40:14
como capturar el dia de la semana bill_mg Varios 2 07-08-2006 15:49:18


La franja horaria es GMT +2. Ahora son las 05:55:36.


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