Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

SOS DBGrid

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: SOS DBGrid Responder citando

He mirado en todas partes ya no tengo ni idea de como mirar en un DBGrid mediante codigo cada linea;

Label11->Caption = DBGrid1->Columns->Items[4]->Field->AsString;

Con esto me muestra donde este podicionado en el Grid y lo que intento hacer es que me devuelva el valor de una "celda" que yo le diga, por ejemplo.

Concretamente estoy haciendo una factura y lo que quiero es que me sume todos los valores de una columna entre otras cosas..

Ejemplo

DBGrid:
Unidades | Descripcion | Precio | Importe
1 | Bla Bla | 17 | 17
1 | Bla Bla | 10 | 10
1 | Bla Bla | 11 | 11

Total(label): 48 (suma de toda la columna importe)
Volver arriba
Mensaje    Asunto: Responder citando

OLVIDATE DEL DBGRID..recuerda que es solo una forma de "mirar" la tabla

Código:

float fSuma=0;
while tTutabla->Eof==false
  {
   fSuma=fSuma+tTutabla->FieldByName("TUCAMPOSUMA")->AsFloat;
   tTutabla->Next();
   }


_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

una obseracion.. para que funcione correctametente, utiliza antes un
table->First();
Código:

float fSuma=0;
tTutabla->First();//empezar desde el primer registro
while(! tTutabla->Eof) {
   fSuma=fSuma+tTutabla->FieldByName("TUCAMPOSUMA")->AsFloat;
   tTutabla->Next();
   }
LabelTuCampoDeTota->Caption=fSuma;
//y si quieres puedes ponerle la funcion Trasnfor(fSuma,"$ 99,999.99");
//LabelTuCampoDeTota->Caption=Trasnfor(fSuma,"$ 99,999.99");


eso pero tambien puedes poner en evento. onKeyPress, o Onchange
del DBGrid..
si quieres puedes eviarme tu codigo, y vemos que se puede hacer a mi direccion de corre o a quie en el foro, varios te podemos ayudar...
ya que muchos estan en lo mismo..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Y ya que estamos hablando de TDBGrids....¿alguien sabe como hacer para que cuando su propiedad MultiSelect esté a true permita seleccionar intervalos como lo hacen el resto de aplicaciones standard de windows? Es decir, manteniendo pulsada la tecla "Control" y mediante el raton puedo marcar aquellas líneas que me interesan pero.... ¿no se puede hacer que al seleccionar la primera linea, y manteniendo la tecla "shift" pulsada, seleccionar la última y que por tanto marque todos los registros contenidos entre medias? Espero haberme explicado. He tratado de dar con la clave pero no lo encuentro. Estoy probado en el OnMouseDown con algo como:

Código:

 if(Shift.Contains(ssShift) && Button.Contains(mbLeft))


Pero no se por donde seguir. ¿Alguna idea?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Algo Interesante, que pense que Windows lo hacia, pero voy a verificar si se puede te digo mas tarde...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Voy a probar Responder citando

OK, lo voy a probar y a ver si rula...

MUCHAAAAAAAAAAAAAAAAAAS GRACIASSSSS Very Happy
Volver arriba
Mensaje    Asunto: Responder citando

Muchas bases de datos que soportan parte del standard SQL-92, soportarán la función agregada SUM que te calcula sumas sobre campos,
es decir si tienes una tabla o consulta puedes obtener directamente la suma y que te la calcule el servidor evitando hacer primero un bucle tonto y segundo evitar generar demasiado trafico y cargarlo en el servidor.

Sería algo así:

Código:

TQuery->SQL->Clear();
TQuery->SQL->Add("SELECT SUM(IMPORTE) AS IMPORTE")
TQuery->SQL->Add("FROM nombre_tabla");
TQuery->SQL->Add("WHERE (el que haga falta)");
TQuery->Prepare();
TQuery->Open;
TQuery->First();
float importe_total=TQuery->FieldByName("IMPORTE")->AsFloat;

// Si usas un label de importe por ejemplo L_Importe
// No recuerdo exactamente el orden de los campos al llamar a la
// función pero podeis verlo en la ayuda
L_Importe->Caption=FloatToStrF(importe_total, 6, 2, ffCurrency);


No es aconsejable hacer recorridos en tablas si es que se puede evitar pues generara mucho trafico entre el servidor y el cliente, además de que retrasará la consulta, mientras que sin embargo, la consulta de arriba hace una petición y el servidor ya devuelve la suma completa, es más eficiente.

Por cierto, sería interesante que las dudas sobre bases de datos estuvieran en el subforo correcto.
ciao.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.