Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-02-2017
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 12
aguml Va por buen camino
No hay calculos al insertar en la tabla

Sigo liado con esto y ahora he colocado un TEdit el cual me devuelve el total a pagar por el cliente. Si abro una tabla de un cliente me sale el total, si inserto una linea tambien, si elimino una linea tambien.
El problema lo tengo cuando no existia la tabla y la crea, ahi si inserto o elimino algun producto al DBGrid no surte efecto y el total siempre es 0. Si cambio de cliente y vuelvo a abrir el que he creado ya si funciona bien.
Este es el codigo que tengo ahora mismo:
Unit1.cpp:
Código PHP:
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "ZAbstractDataset"
#pragma link "ZAbstractRODataset"
#pragma link "ZAbstractTable"
#pragma link "ZConnection"
#pragma link "ZDataset"
#pragma resource "*.dfm"
TFormMain *FormMain;
bool bloqueado,abierta;
//---------------------------------------------------------------------------
__fastcall TFormMain::TFormMain(TComponentOwner)
    : 
TForm(Owner)
{
    
bloqueado=true;
    
abierta=false;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::ButtonAddConsumisionClick(TObject *Sender)
{
    
FormProductos->ShowModal();
    
FormProductos->EditBusqueda->Text "";
    
EditTotal->Text=GetTotal(ZQueryClientes,DataSourceClientes,"Precio");
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::ButtonSelectClienteClick(TObject *Sender)
{
    if(
ComboBox1->Text == ""){
        
Application->MessageBoxA("Debe introducir un nombre de cliente válido.","Atención",MB_OK MB_ICONINFORMATION);
        return;
    }

    
int retval;

    
ZQueryClientes->Connection ZConnection;
    
ZTableClientes->Connection ZConnection;
    
ZTableClientes->TableName ComboBox1->Text;
    
DataSourceClientes->DataSet ZTableClientes;
    
DBGridClientes->DataSource DataSourceClientes;

    
AnsiString Cadena_SQL//Cadena del comando SQL a ejecutar
    
if(!ZConnection->Connected)
        
ZConnection->Connect(); //me conecto a la BD

    
Cadena_SQL "SELECT * FROM " ComboBox1->Text;
    
ZQueryClientes->SQL->Clear(); //se limpia la cadena SQL existente
    
ZQueryClientes->SQL->Text=Cadena_SQL//cargo el comando SQL a ejecutar
    
try{
        
ZQueryClientes->ExecSQL(); //Ejecuto el comando
    
}catch(...){
        
retval Application->MessageBoxA("El cliente no existe. ¿Desea crearlo?","Atención",MB_YESNO MB_ICONINFORMATION);
        if(
retval == IDYES){
            
Cadena_SQL="CREATE TABLE IF NOT EXISTS \"main\".\"" ComboBox1->Text "\" (\"Nombre\" VARCHAR(50),\"Unidades\" REAL,\"Precio\" REAL,\"Total\" REAL)";
            
ZQueryClientes->SQL->Clear(); //se limpia la cadena SQL existente
            
ZQueryClientes->SQL->Text=Cadena_SQL//cargo el comando SQL a ejecutar
            
ZQueryClientes->ExecSQL(); //Ejecuto el comando
            
ComboBox1->Items->Add(ComboBox1->Text);
        }else{
            return;
        }
    }
    
//En este punto la tabla ya esta creada por lo tanto ya se puede abrir
    //el componente de TABLA
    
ZTableClientes->Open();
    
//Ajustamos el ancho de las columnas para que se vean mejor
    
DBGridClientes->Columns->operator [](0)->Width=250;
    
DBGridClientes->Columns->operator [](1)->Width=65;
    
DBGridClientes->Columns->operator [](2)->Width=65;
    
DBGridClientes->Columns->operator [](3)->Width=65;

    
ButtonAddConsumision->Enabled true;
    if(!
bloqueado){
        
ButtonDelLine->Enabled true;
        
ButtonEliminarCli->Enabled true;
    }
    
abierta=true;
}
//---------------------------------------------------------------------------
double __fastcall TFormMain::GetTotal(TZQuery *ZQueryTDataSource *DataSourcechar *nombreCol)
{
    
double Total=0;
    
ZQuery->DataSource DataSource;
    
ZQuery->Open();
    
ZQuery->First();
    while(!
ZQuery->Eof){
        
Total+=ZQuery->FieldByName(nombreCol)->Text.ToDouble();
        
ZQuery->Next();
    }
    
ZQuery->Close();
    return 
Total;
}
//---------------------------------------------------------------------------

void __fastcall TFormMain::ButtonEliminarCliClick(TObject *Sender)
{
    
AnsiString Cadena_SQL//Cadena del comando SQL a ejecutar
    
if(!ZConnection->Connected)
        
ZConnection->Connect();

    
Cadena_SQL "DROP TABLE IF EXISTS \"main\".\"" ComboBox1->Text "\"";
    
ZQueryClientes->SQL->Clear(); //se limpia la cadena SQL existente
    
ZQueryClientes->SQL->Text=Cadena_SQL//cargo el comando SQL a ejecutar
    
ZTableClientes->Close();
    
ZQueryClientes->ExecSQL(); //Ejecuto el comando
    
DBGridClientes->DataSource NULL;

    for(
int i=0;i<ComboBox1->Items->Count;i++)
    {
        if(
ComboBox1->Items->operator [](i)==ComboBox1->Text)
        {
            
ComboBox1->Items->Delete(i);
            break;
        }
    }
    
ButtonAddConsumision->Enabled false;
    
ButtonDelLine->Enabled false;
    
ButtonEliminarCli->Enabled false;
    
abierta=false;
    
EditTotal->Text="";
}
//---------------------------------------------------------------------------

void __fastcall TFormMain::ButtonDelLineClick(TObject *Sender)
{
    if(!
ZTableClientes->IsEmpty()){
        
ZTableClientes->Delete();
    }
}
//---------------------------------------------------------------------------

void __fastcall TFormMain::ButtonAdminClick(TObject *Sender)
{
    
AnsiString cadena;
    
int result;
    
    if(
ButtonAdmin->Caption == "Ir al modo Administrador"){
        
FormLogin->MaskEdit1->Text="";
        
result=FormLogin->ShowModal();
        if(
result==mrOk){
            
bloqueado=false;
            
ButtonAdmin->Caption "Ir al modo Usuario";
            if(
abierta==true){
                
ButtonDelLine->Enabled true;
                
ButtonEliminarCli->Enabled true;
            }
        }else if(
result==mrNo){
            
Application->MessageBoxA("Ha introducido una contraseña incorrecta. No se ha desbloqueado la lista.","Contraseña incorrecta",MB_OK MB_ICONERROR);
        }
    }else{
        
bloqueado=true;
        
ButtonAdmin->Caption "Ir al modo Administrador";
        
ButtonDelLine->Enabled false;
        
ButtonEliminarCli->Enabled false;
    }
}
//---------------------------------------------------------------------------

void __fastcall TFormMain::FormClose(TObject *SenderTCloseAction &Action)
{
    if(
FormProductos->ZQueryProductos->Active)
        
FormProductos->ZQueryProductos->Close();
    if(
FormProductos->ZTableProductos->Active)
        
FormProductos->ZTableProductos->Close();
    if(
ZQueryClientes->Active)
        
ZQueryClientes->Close();
    if(
ZTableClientes->Active)
        
ZTableClientes->Close();
    if(
ZConnection->Connected)
        
ZConnection->Disconnect();
}
//---------------------------------------------------------------------------

void __fastcall TFormMain::DataSourceClientesDataChange(TObject *Sender,
      
TField *Field)
{
    
EditTotal->Text=GetTotal(ZQueryClientes,DataSourceClientes,"Precio");
}
//--------------------------------------------------------------------------- 
Unit2.cpp:
Código PHP:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "ZAbstractDataset"
#pragma link "ZAbstractRODataset"
#pragma link "ZAbstractTable"
#pragma link "ZDataset"
#pragma link "ZConnection"
#pragma resource "*.dfm"
TFormProductos *FormProductos;
//---------------------------------------------------------------------------
__fastcall TFormProductos::TFormProductos(TComponentOwner)
    : 
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFormProductos::FormCreate(TObject *Sender)
{
    if(!
FormMain->ZConnection->Connected)
    {
        
FormMain->ZConnection->Protocol "sqlite-3";
        
FormMain->ZConnection->Database "clientesDB.sqlite";
        
ZQueryProductos->Connection FormMain->ZConnection;
        
ZTableProductos->Connection FormMain->ZConnection;
        
ZTableProductos->TableName "Articulos";
        
DataSourceProductos->DataSet ZTableProductos;
        
DBNavigatorProductos->DataSource DataSourceProductos;
        
DBGridProductos->DataSource DataSourceProductos;

        
AnsiString Cadena_SQL//Cadena del comando SQL a ejecutar
        
FormMain->ZConnection->Connect(); //me conecto a la BD
        
Cadena_SQL="CREATE TABLE IF NOT EXISTS \"main\".\"Articulos\" (\"Nombre\" VARCHAR(50),\"Precio\" REAL)";
        
ZQueryProductos->SQL->Clear(); //se limpia la cadena SQL existente
        
ZQueryProductos->SQL->Text=Cadena_SQL//cargo el comando SQL a ejecutar
        
ZQueryProductos->ExecSQL(); //Ejecuto el comando
        //En este punto la tabla ya esta creada por lo tanto ya se puede abrir
        //el componente de TABLA
        
ZTableProductos->Open();
        
//Ajustamos el ancho de las columnas para que se vean mejor
        
DBGridProductos->Columns->operator [](0)->Width=250;
        
DBGridProductos->Columns->operator [](1)->Width=60;
    }
    
FormMain->ComboBox1->Items->Clear();

    
FormMain->ZConnection->GetTableNames("",FormMain->ComboBox1->Items);
    for(
int i=0;i<FormMain->ComboBox1->Items->Count;i++)
    {
        if(
FormMain->ComboBox1->Items->operator [](i)=="Articulos")
        {
            
FormMain->ComboBox1->Items->Delete(i);
            
i--;
        }
    }
}
//---------------------------------------------------------------------------
void __fastcall TFormProductos::DBGridProductosCellClick(TColumn *Column)
{
    
TDataSet *DS static_cast<TDataSet*>( DBGridProductos->DataSource->DataSet );

    
EditNombre->Text DS->FieldByName("Nombre")->AsString;
    
EditPrecio->Text DS->FieldByName("Precio")->AsString;

    if ( 
EditUnidades->Text != "" && EditPrecio->Text != "" )
        
EditTotal->Text EditUnidades->Text.ToDouble() * EditPrecio->Text.ToDouble();
}
//---------------------------------------------------------------------------
void __fastcall TFormProductos::EditUnidadesExit(TObject *Sender)
{
    if(
EditUnidades->Text != "" && EditPrecio->Text != "")
        
EditTotal->Text EditUnidades->Text.ToDouble() * EditPrecio->Text.ToDouble();
}
//---------------------------------------------------------------------------
void __fastcall TFormProductos::ButtonDesbloquearClick(TObject *Sender)
{
    
AnsiString cadena;
    
int result;
    if(
ButtonDesbloquear->Caption == "Editar lista")
    {
        
FormLogin->MaskEdit1->Text="";
        
result=FormLogin->ShowModal();
        if(
result==mrOk){
            
DBGridProductos->ReadOnly false;
            
DBGridProductos->Options  TDBGridOptions(DBGridProductos->Options) >> dgRowSelect << dgEditing;
            
DBNavigatorProductos->Enabled true;
            
ButtonDesbloquear->Caption "Proteger lista";
        }else if(
result==mrNo){
            
ShowMessage("Contraseña incorrecta. No se ha desbloqueado la lista.");
        }
    }else{
        
DBGridProductos->ReadOnly true;
        
DBGridProductos->Options  TDBGridOptions(DBGridProductos->Options) << dgRowSelect >> dgEditing;
        
DBNavigatorProductos->Enabled false;
        
ButtonDesbloquear->Caption "Editar lista";
    }
}
//---------------------------------------------------------------------------

void __fastcall TFormProductos::ButtonAddConsumisionClick(TObject *Sender)
{
    if(
EditNombre->Text !="" && EditPrecio->Text !="" && EditUnidades->Text !="" && EditPrecio->Text !="" && EditUnidades->Text !="")
    {
        
FormMain->ZTableClientes->Insert();
        
FormMain->ZTableClientes->FieldByName("Nombre")->Text EditNombre->Text//se carga el valor de la edad
        
FormMain->ZTableClientes->FieldByName("Unidades")->Text EditUnidades->Text.ToDouble();
        
FormMain->ZTableClientes->FieldByName("Precio")->Text EditPrecio->Text.ToDouble();
        
FormMain->ZTableClientes->FieldByName("Total")->Text EditTotal->Text.ToDouble();
        
FormMain->ZTableClientes->Post();  //se ejecuta la inserccion
    
}
}
//---------------------------------------------------------------------------

void __fastcall TFormProductos::EditBusquedaChange(TObject *Sender)
{
    
ZTableProductos->Filter "Nombre LIKE '*" EditBusqueda->Text "*'";
    
ZTableProductos->FilterOptions TFilterOptions(ZQueryProductos->FilterOptions) << foCaseInsensitive;
    
ZTableProductos->Filtered=(EditBusqueda->Text != "");
}
//--------------------------------------------------------------------------- 
Responder Con Cita
  #2  
Antiguo 25-02-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.101
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No enteindo cómo trabajas, creando tablas en tiempo de ejecución
Responder Con Cita
  #3  
Antiguo 25-02-2017
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 12
aguml Va por buen camino
La idea es que si creo un nuevo cliente ese cliente es una tabla y como no existe tengo que crearla para guardar en ella sus consumisiones.
Responder Con Cita
  #4  
Antiguo 25-02-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.101
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por aguml Ver Mensaje
La idea es que si creo un nuevo cliente ese cliente es una tabla y como no existe tengo que crearla para guardar en ella sus consumisiones.
¿Tienes una tabla por cliente?
Responder Con Cita
  #5  
Antiguo 25-02-2017
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 12
aguml Va por buen camino
¿cómo lo harías tu? La única manera que se me ocurre seria una tabla para todos y tener un campo para controlar con filtrados que mostrar y así a la hora de mostrar el listado de clientes seria más complejo ya que tendría que ir comprobando al crear un cliente que este ya no exista mientras que como lo hago so lo necesito leer los nombres de las tablas. Además si son muchos clientes la tabla podría ser enorme y hacer filtrados con tablas enormes creo que es bastante más ineficiente que tener una tabla por cliente y además así queda más ordenado ya que quitando la tabla artículos el resto son clientes.
Responder Con Cita
  #6  
Antiguo 25-02-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.101
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por supuesto, una tabla de clientes, para todos los clientes, es tan fácil como tener un campo codigo.
Código SQL [-]
create table tbClientes (
  id integer not null,
  nombre varchar(128),
  telefono varchar(16) default '',
  etc...
);

Luego el filtro es facilísimo:
Código SQL [-]
select * from tbClientes where id= CodigoDelCliente
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
Calculos en una Tabla silviodp Conexión con bases de datos 18 02-02-2010 21:38:34
actualizar tabla al insertar en otra tabla hybrid Conexión con bases de datos 14 02-12-2009 15:09:13
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla taru MySQL 1 27-07-2006 15:36:12
Calculos en una tabla silviodp Conexión con bases de datos 8 07-04-2004 18:58:09
Como insertar datos de una tabla en otra tabla? Salomon Firebird e Interbase 1 28-08-2003 11:29:40


La franja horaria es GMT +2. Ahora son las 10:48:59.


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