Jump to content


Photo

OnTitleClick: TDBGridClickEvent


  • Please log in to reply
4 replies to this topic

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 16 May 2009 - 05:12 PM

estoy tratando de utilizar este evento y cuando presiono la columna cliente u otra cuyo nombre no sea similar en otra tabla funciona bien, pero si presiono una columna cuyo titulo es igual al de otra tabla me da un error 




delphi
  1. procedure TFRQcentral.DBGrid1TitleClick(Column: TColumn);
  2.  
  3. var
  4.   ordenando: string;
  5.  
  6. begin
  7. ordenando := Column.FieldName;
  8. inicio:=formatdatetime('yyyymmdd' ,datetimepicker1.date);
  9. fin:=formatdatetime('yyyymmdd' ,datetimepicker2.date);
  10. if edcliente.Text <> '' then
  11.     begin
  12.       Dmmonitoreo.QCENTRAL.SQL.clear;
  13.       Dmmonitoreo.QCENTRAL.SQL.Add('select * from  central left join acmsub on central.csid=acmsub.csid ');
  14.       Dmmonitoreo.QCENTRAL.SQL.Add(' left JOIN evento ON CENTRAL.EVENTO = evento.Evento');
  15.       Dmmonitoreo.QCENTRAL.SQL.Add(' where ' + 'ACMSUB.clientes LIKE ' +  quotedstr('%' + edcliente.Text + '%'));
  16.       Dmmonitoreo.QCENTRAL.SQL.Add(' and CENTRAL.FECHAN between ' + quotedstr (inicio) + ' and ' + quotedstr(fin));
  17.       Dmmonitoreo.QCENTRAL.SQL.Add(' order by ' + (ordenando));
  18.       Dmmonitoreo.QCENTRAL.Open;
  19.  
  20.       if edcsid.text <> '' then
  21.           begin
  22.             Dmmonitoreo.QCENTRAL.SQL.clear;
  23.             Dmmonitoreo.QCENTRAL.SQL.Add('select * from central left join acmsub on central.csid = acmsub.csid ');
  24.             Dmmonitoreo.QCENTRAL.SQL.Add(' left JOIN evento ON CENTRAL.EVENTO = evento.Evento ');
  25.             Dmmonitoreo.QCENTRAL.SQL.Add('  where CENTRAL.CSID like ' + QUOTEDSTR(EDCSID.TEXT + '%'));
  26.             Dmmonitoreo.QCENTRAL.SQL.Add('    and CENTRAL.FECHAN between ' + quotedstr (inicio) + 'and' + quotedstr(fin));
  27.             Dmmonitoreo.QCENTRAL.SQL.add( ' order by '+ (ordenando));
  28.             Dmmonitoreo.QCENTRAL.Open;
  29.           end;
  30.       end;
  31. end;



aunque por ejemplo la columna csid que es el codigo del cliente en la tabla acmsub y tambien en la tabla central, en el query sql les puso como alias csid y csid_1

Espero entiendan la pregunta


Imagen Enviada
Imagen Enviada




  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 16 May 2009 - 05:28 PM

El segundo IF deberí­a estar fuera del primer IF, yo lo harí­a así­:



delphi
  1. procedure TFRQcentral.DBGrid1TitleClick(Column: TColumn);
  2.  
  3. var
  4.   ordenando: string;
  5.  
  6. begin
  7. ordenando := Column.FieldName;
  8. inicio:=formatdatetime('yyyymmdd' ,datetimepicker1.date);
  9. fin:=formatdatetime('yyyymmdd' ,datetimepicker2.date);
  10. if edcliente.Text <> '' then
  11.     begin
  12.       Dmmonitoreo.QCENTRAL.SQL.clear;
  13.       Dmmonitoreo.QCENTRAL.SQL.Add('select * from  central left join acmsub on central.csid=acmsub.csid ');
  14.       Dmmonitoreo.QCENTRAL.SQL.Add(' left JOIN evento ON CENTRAL.EVENTO = evento.Evento');
  15.       Dmmonitoreo.QCENTRAL.SQL.Add(' where ' + 'ACMSUB.clientes LIKE ' +  quotedstr('%' + edcliente.Text + '%'));
  16.       Dmmonitoreo.QCENTRAL.SQL.Add(' and CENTRAL.FECHAN between ' + quotedstr (inicio) + ' and ' + quotedstr(fin));
  17.       Dmmonitoreo.QCENTRAL.SQL.Add(' order by ' + (ordenando));
  18.       Dmmonitoreo.QCENTRAL.Open;
  19.     end
  20.   else if edcsid.text <> '' then
  21.           begin
  22.             Dmmonitoreo.QCENTRAL.SQL.clear;
  23.             Dmmonitoreo.QCENTRAL.SQL.Add('select * from central left join acmsub on central.csid = acmsub.csid ');
  24.             Dmmonitoreo.QCENTRAL.SQL.Add(' left JOIN evento ON CENTRAL.EVENTO = evento.Evento ');
  25.             Dmmonitoreo.QCENTRAL.SQL.Add('  where CENTRAL.CSID like ' + QUOTEDSTR(EDCSID.TEXT + '%'));
  26.             Dmmonitoreo.QCENTRAL.SQL.Add('    and CENTRAL.FECHAN between ' + quotedstr (inicio) + 'and' + quotedstr(fin));
  27.             Dmmonitoreo.QCENTRAL.SQL.add( ' order by '+ (ordenando));
  28.             Dmmonitoreo.QCENTRAL.Open;
  29.           end;
  30. end;



Nota lo hice al vuelo, puede que haya errores pero los tiros andan por ahí­.

Saludos.
  • 0

#3 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 16 May 2009 - 06:16 PM

Gracias por la rapida respuesta y aunque la consulta me funciona bien, siempre es bueno recibir correcciones

Pero el Problema es cuando quiero ordenar la tabla pasandole en valor de la variable ordenando la cual es igual
a column.fieldname.

Yo creo que el problema esta en que en el query tengo por lo menos dos tablas que tienen campos con nombres comunes, porque el error que me da es

'AMBIGUOS COLUMN NAME'

Como puedo solucionar esto?

gracias
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 16 May 2009 - 06:23 PM

¿Por qué no en vez de usar Column.FieldName usar Column.Title.text?, deja ver si te hago un ejemplo para mañana.

Saludos
  • 0

#5 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 16 May 2009 - 07:43 PM

Gracias Enecumene la idea era por ahi. Lo unico es que es column.title.caption y le puse varios if observa esto y dime si puedo mejorarlo. Gracias de nuevo



delphi
  1. procedure TFRQcentral.DBGrid1TitleClick(Column: TColumn);
  2.  
  3. var
  4.   ordenando: string;
  5.  
  6. begin
  7.   ordenando:=Column.Title.Caption;
  8.   if ordenando= 'CSID' then
  9.   ORDENANDO:=' CENTRAL.CSID '
  10. ELSE
  11. IF ORDENANDO = 'DETALLE' THEN
  12. ORDENANDO:= ' CENTRAL.DETALLE '
  13. ELSE
  14.  
  15. IF ORDENANDO = 'DETALLE1' THEN
  16. orDENANDO:= ' evento.Detalle ' ;
  17.  
  18.  
  19.  
  20. //ordenando := Column.FieldName;
  21. inicio:=formatdatetime('yyyymmdd' ,datetimepicker1.date);
  22. fin:=formatdatetime('yyyymmdd' ,datetimepicker2.date);
  23. if edcliente.Text <> '' then
  24.     begin
  25.       Dmmonitoreo.QCENTRAL.SQL.clear;
  26.       Dmmonitoreo.QCENTRAL.SQL.Add('select * from  central left join acmsub on central.csid=acmsub.csid ');
  27.       Dmmonitoreo.QCENTRAL.SQL.Add(' left JOIN evento ON CENTRAL.EVENTO = evento.Evento');
  28.       Dmmonitoreo.QCENTRAL.SQL.Add(' where ' + 'ACMSUB.clientes LIKE ' +  quotedstr('%' + edcliente.Text + '%'));
  29.       Dmmonitoreo.QCENTRAL.SQL.Add(' and CENTRAL.FECHAN between ' + quotedstr (inicio) + ' and ' + quotedstr(fin));
  30.       Dmmonitoreo.QCENTRAL.SQL.Add(' order by ' + (ordenando));
  31.       Dmmonitoreo.QCENTRAL.Open;
  32.       end
  33.       else if edcsid.text <> '' then
  34.           begin
  35.             Dmmonitoreo.QCENTRAL.SQL.clear;
  36.             Dmmonitoreo.QCENTRAL.SQL.Add('select * from central left join acmsub on central.csid = acmsub.csid ');
  37.             Dmmonitoreo.QCENTRAL.SQL.Add(' left JOIN evento ON CENTRAL.EVENTO = evento.Evento ');
  38.             Dmmonitoreo.QCENTRAL.SQL.Add('  where CENTRAL.CSID like ' + QUOTEDSTR(EDCSID.TEXT + '%'));
  39.             Dmmonitoreo.QCENTRAL.SQL.Add('    and CENTRAL.FECHAN between ' + quotedstr (inicio) + 'and' + quotedstr(fin));
  40.             Dmmonitoreo.QCENTRAL.SQL.add( ' order by '+ (ordenando));
  41.             Dmmonitoreo.QCENTRAL.Open;
  42.           end;
  43.       end;
  44.  
  45.  
  46. end.


  • 0




IP.Board spam blocked by CleanTalk.