| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
JunXCosio Invitado
|
Publicado: Dom 01 Feb, 2004 11:41 pm Asunto: SOS DBGrid |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Lun 02 Feb, 2004 3:46 am Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 02 Feb, 2004 7:44 am Asunto: |
|
|
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.. _________________
 |
|
| Volver arriba |
|
 |
Marky Master

Registrado: 28 Dic 2002Mensajes: 251Ubicación: Las Rozas - Madrid (España)
|
Publicado: Lun 02 Feb, 2004 4:40 pm Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 02 Feb, 2004 4:52 pm Asunto: |
|
|
Algo Interesante, que pense que Windows lo hacia, pero voy a verificar si se puede te digo mas tarde... _________________
 |
|
| Volver arriba |
|
 |
JunXCosio Invitado
|
Publicado: Mar 03 Feb, 2004 2:47 pm Asunto: Voy a probar |
|
|
OK, lo voy a probar y a ver si rula...
MUCHAAAAAAAAAAAAAAAAAAS GRACIASSSSS  |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Mar 03 Feb, 2004 8:28 pm Asunto: |
|
|
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 |
|
 |
|