realmente no lo se pero en el flamerobin tampoco hace caso cuando no se coloca el alias delante de los campos...
dejo aqui mi primer procedimiento aparentemente funcional de lo q estaba buscando, por si a alguien le sea de probecho
Código Delphi
[-]procedure TModGenerico.DB_ControlaDisplayLabel(ve_SqlQyery:TSQLQuery; ve_Cds:TClientDataSet);
var x,y,x_Pos,x_ultimo,x_primero:integer;
v_campo,v_campo_buscado,v_sql,v_AliasDeTabla,strTemp:string;
procedure copia_buscado;
begin
v_campo_buscado:=copy(v_sql,x_primero,((x_ultimo-x_primero)+1));
if(AnsiMatchStr(v_campo_buscado,['SELECT','END']))then begin
v_campo_buscado:='';
end;
end;
procedure saca_basura;
var xx:integer;
begin
xx:=pos(#$A,v_sql);
while xx>0 do begin
Delete(v_sql,xx,1);
insert(' ',v_sql,xx);
xx:=pos(#$A,v_sql);
end;
xx:=pos(#$D,v_sql);
while xx>0 do begin
AnsiReplaceStr(v_sql,#$D,' ');
Delete(v_sql,xx,1);
insert(' ',v_sql,xx);
xx:=pos(#$D,v_sql);
end;
xx:=pos(#10,v_sql);
while xx>0 do begin
Delete(v_sql,xx,1);
insert(' ',v_sql,xx);
xx:=pos(#10,v_sql);
end;
end;
begin
try
for x:=0 to ve_Cds.FieldCount-1 do begin
x_ultimo:=0;
x_primero:=0;
v_campo_buscado:='';
v_AliasDeTabla:='0';
v_campo:=UpperCase(ve_Cds.Fields[x].FieldName);
strTemp:=v_campo;
v_sql:=uppercase(ve_SqlQyery.SQL.GetText);
saca_basura;
x_Pos:=pos(v_campo,v_sql);
if(x_Pos>0)then begin
y:=x_Pos-1;
while y>0 do begin
if(v_sql[y]=',')then
Break;
if(v_AliasDeTabla='0')and(v_sql[y]='.')then begin
v_AliasDeTabla:='S';
end else if(v_AliasDeTabla='0')then begin
v_AliasDeTabla:='N';
end;
if(v_AliasDeTabla='S')then begin
if(x_ultimo=0)then x_ultimo:=x_Pos+length(v_campo)-1;
if(x_primero=0)and(x_ultimo>0)and(v_sql[y]=' ')then begin
x_primero:=y+1;
end;
if(x_primero>0)and(x_ultimo>0)then begin
copia_buscado;
Break;
end;
end else begin
if(x_ultimo=0)and(v_sql[y]<>' ')then begin
x_ultimo:=y;
end;
if(x_primero=0)and(x_ultimo>0)and((v_sql[y]=' ')or(v_sql[y]=#10))then begin
x_primero:=y+1;
end;
if(x_primero>0)and(x_ultimo>0)then begin
copia_buscado;
Break;
end;
end;
y:=y-1;
end; if(v_campo_buscado<>'')then begin
ve_Cds.Fields[x].DisplayLabel:=v_campo_buscado;
strTemp:=strTemp+' - '+v_campo_buscado;
end;
end; if(FrmPrincipal.ppt_Desarrollo_Debug)then begin
FrmPrincipal.mDesarrollo.Visible:=true;
FrmPrincipal.mDesarrollo.Lines.Add(strTemp);
end;
end except
on e:Exception do
ModPrincipal.MostrarError(Self.Name,'DB_ControlaDisplayLabel','',e.Message);
end
end;
recien hoy lo hice funcionar en lo que probe, pero tiene limitaciones, no se puede usar *, se deben escribir todos los campos y no detecta campos muy complicados, como los de los case y otros, la parte de desarrollo es solo para ver lo q hace
por dar un ejemplo, esto es lo q hace, recorre los field del clientdataset y busca en el query el campo con su alias al que pertenece y este es el resultado
ID_PERSONA - U.ID_PERSONA
ID_CAJA - U.ID_CAJA
ID_USUARIO - U.ID_USUARIO
ID_SUCURSALAGENCIA
ADMINISTRADOR - U.ADMINISTRADOR
LOGIN - U.LOGIN
DESCRIPCION - SA.DESCRIPCION
CLAVE - U.CLAVE
ROOT - U.ROOT
CORREO - U.CORREO
AUTORIZATIPOCAMBIO - U.AUTORIZATIPOCAMBIO
OMITEDECLARACIONJURADA - U.OMITEDECLARACIONJURADA
MONTOMAXIMOAUTORIZACION - U.MONTOMAXIMOAUTORIZACION
AUTORIZACLIENTE - U.AUTORIZACLIENTE
AUTORIZADOCUMENTOCLIENTE - U.AUTORIZADOCUMENTOCLIENTE
ESTADO - U.ESTADO
CODIGO - SA.CODIGO
DESSUCURSALAGENCIA - SA.DESCRIPCION
CLAVEAUTORIZACIONES - U.CLAVEAUTORIZACIONES
VARIACIONPERMITIDATIPOCAMBIO - U.VARIACIONPERMITIDATIPOCAMBIO
CODCAJA - C.CODIGO
CAJANUMERADOR
DESCAJA
AUTORIZAACTOSYDOC - U.AUTORIZAACTOSYDOC
ID_IMPRESORA - U.ID_IMPRESORA
AUTORIZAIMPRESION - U.AUTORIZAIMPRESION
MONTOVARIACIONPERMITIDA - U.MONTOVARIACIONPERMITIDA
AUTORIZAANULACION - U.AUTORIZAANULACION
AUTORIZAAPERTURA - U.AUTORIZAAPERTURA
AUTORIZACIERRE - U.AUTORIZACIERRE
AUTORIZASALDOS - U.AUTORIZASALDOS
ID_USUARIO_INSERTA - U.ID_USUARIO_INSERTA
ID_USUARIO_MODIFICA - U.ID_USUARIO_MODIFICA
FECHAALTA - U.FECHAALTA
FECHABAJA - U.FECHABAJA
AUTORIZAOTRODIA - U.AUTORIZAOTRODIA
AUTORIZAPRECIOPIZARRA - U.AUTORIZAPRECIOPIZARRA
SEMAFORO - U.SEMAFORO