Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-04-2007
d-hugo d-hugo is offline
Miembro
 
Registrado: abr 2007
Posts: 34
Poder: 0
d-hugo Va por buen camino
Algunas observaciones (disculpa el atrevimiento):
Para dinero en lugar de utilizar un campo FLOAT usa NUMERIC que guarda un valor exacto, el float redondea cada vez que se usa por lo que usarlo para dinero no es recomendable.
Ten presente que si borras un producto, proveedor, cliente o cualquier otro nomenclador que hayas usado en documentos comerciales, perderás el historial. En el lugar donde trabajo esto es inaceptable, por lo que yo suelo usar un campo boolean para definir si el nomenclador está activo o no.
No veo el objetivo de tener 6 precios en la base de datos si 5 siempre se van a calcular de la misma manera a partir del primero. Bien puedes calcular los valores en el momento en que vayas a mostrarlos en el formulario. Pero bueno, si vas a usar la tabla de precios, por qué mejor no usar solo el foreign key a id_producto y así no solo te ahorras ambos códigos, sino que puedes realizar joins y mostrar los campos que quieras?
Otra cosa es que en vez de usar un stringgrid quizás sería mejor usar un clientdataset para así poder hacer updates más comodamente, creo que de hecho te simplificaría más las cosas porque podrías usar controles db-aware y usar instrucciones SQL que son más sencillas.
En fin, suerte.
Responder Con Cita
  #2  
Antiguo 10-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 20
BlackDaemon Va por buen camino
Hola gracias por los consejos, me servirán de mucho y tendré muy en cuenta sobre los precios, pues no lo sabía, ahora sobre los precios ya lo he discutido con mi jefe, yo quiería hacer así, tener un precios _base_ y a este asignarle 6 porcentajes diferentes para calcular el resto de los precios al momento de ponerlos al StringGrid Por ej, pero bueno jeje hay que hacer caso a los jafes y mas aún siendo este mi primer jefe xD
Ahora ya lo tengo todo listo.. he echo todo una chapucera, pero funciona
ahora mismo son las 3:00 am en mi País y mañana pienso poner el código para que a alguien mas le sirva, aunque es mucho pero igual xD

saludos d-hugo

PD ahh es que ya tengo casi todo en mi stringGrind, sería como comenzar casi de nuevo con lo mucho que me esta costando
Responder Con Cita
  #3  
Antiguo 10-04-2007
d-hugo d-hugo is offline
Miembro
 
Registrado: abr 2007
Posts: 34
Poder: 0
d-hugo Va por buen camino
Cita:
Empezado por BlackDaemon
ahh es que ya tengo casi todo en mi stringGrind, sería como comenzar casi de nuevo con lo mucho que me esta costando
Sí, ese es el inconveniente, especialmente si tienes la aplicación muy adelantada. En todo caso bien puedes probarlo en un formulario que aun no hayas hecho, o cuando termines puedes hacer un proyecto de prueba a ver si usar clientdatasets te resulta mas simple.

Última edición por d-hugo fecha: 10-04-2007 a las 10:52:50.
Responder Con Cita
  #4  
Antiguo 10-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 20
BlackDaemon Va por buen camino
Cita:
Sí, ese es el inconveniente, especialmente si tienes la aplicación muy adelantada. En todo caso bien puedes probarlo en un formulario que aun no hayas hecho, o cuando termines puedes hacer un proyecto de prueba a ver si usar clientdatasets te resulta mas simple.
Bueno esta bién, ya lo había tenido pensado eso, luego hacer otra app sacando las mejoras de esta y actualizando todo lo que se pueda, pero tengo una duda, cuando hablas de clientdatasets a que te refieres ?? Osea a que componente :
ahh tambien si me podría aclarar las dudas con el DATASET de los componentes ZOES lib, por que por lo que veo no las tienen y me han recomendado mucho

saludos
Responder Con Cita
  #5  
Antiguo 10-04-2007
d-hugo d-hugo is offline
Miembro
 
Registrado: abr 2007
Posts: 34
Poder: 0
d-hugo Va por buen camino
Cita:
Empezado por BlackDaemon
tengo una duda, cuando hablas de clientdatasets a que te refieres ?? Osea a que componente :
ahh tambien si me podría aclarar las dudas con el DATASET de los componentes ZOES lib, por que por lo que veo no las tienen y me han recomendado mucho
El ClientDataSet es un componente del Delphi (al menos del D7 enterprise), basicamente lo que hace es una base de datos virtual en memoria, con todas las propiedades normales de una base de datos. Pero también podrías usar el componente llamado KbmMemTable, que tiene buena reputación en cuanto a rapidez y funcionalidad, parece que es incluso mejor que el propio ClientDataSet. Haz una busqueda.

Con respecto al ZEOS, no puedo decirte la gran cosa, porque no lo he probado.
Responder Con Cita
  #6  
Antiguo 10-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 20
BlackDaemon Va por buen camino
Bueno si, pero Lepe me ha hablado mucho de DataSet pero no los tengo en los ZEoS y si, si he visto el ClientDataSet, pero pensé que te referías a otro de los Zeos por ej, ahora como se usaría un ClientDataSet, y tu me dijiste que use en ClientDataSet en ves de un StringGrid pero la verdad es que yo no los veo nada de parecidos.. al princípio pensé que te referías al DBGrid pero veo que no, si me aclaras mis dudas te estaría muy agradecido.

saludos
Responder Con Cita
  #7  
Antiguo 12-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 20
BlackDaemon Va por buen camino
Bueno despues de tanto luchar con este tema.. lo he logrado de una manera que aún no me convence pero que da resultados buenos, pero tambien tiene muuuuuchas contras, sin mas aquí les dejo mi código por si alguien lo quisiera usar, aunque estoy seguro que solo serviría para confundir aún mas

Bueno comenzemos.. como ya tengo las 2 tablas PRODUCTOS y la tabla TARIFAS en los anteriores post puse la estructura, así que no la repetiré
Asi que este es el código con el cual AGREGO tooooodos los campos que tengo en diferentes edits y DataBaseComboBoxsLoock y un meno.

AGREGAR PRODUCTOS

Tengo estas variables definidas

Código Delphi [-]
var
  FrmAgregarProductos: TFrmAgregarProductos;
  Editando : Boolean;
  idTarifa, prec1Old, prec2Old, prec3Old, prec4Old, prec5Old, prec6Old : Integer;
  codBarOld, codProOld : String;


Y el código del botón agregar si, ya se que esta largo y feo

Código Delphi [-]
procedure TFrmAgregarProductos.SBAgregarClick(Sender: TObject);
var
  idProducto : Integer;
begin
  if (ECodProducto.Text <> '') then
  begin
    if (ECodigoBarra.Text <> '') then
    begin
      if (MDescripcion.Text <> '') then
      begin
        if (DBLCBCategoria.Text <> '') then
        begin
          if (DBLCBSubCategoria.Text <> '') then
          begin
            if (ECantidad.Text <> '') then
            begin
              if (DBLCBUnidadPrecio.Text <> '') AND (DBLCBUnidad.Text <> '') then
              begin
                //Insertamos todos los registros de los campos Edits, DBComboBox, etc
                with DM.ZQProductos do
                begin
                  Close;
                  SQL.Clear;
                  SQL.Add('INSERT INTO productos (Descripcion, Categoria, SubCategoria, Unidad, Cantidad, Proveedor, ');
                  SQL.Add('UnidadPrecio, PrecioCompraBs, PrecioCompraSus, Costo, FechaActualizacion)');
                  SQL.Add('VALUES (es, :Cat, :SubCat, :Uni, :Cant, :Prov, :UniPre, :PCB, :PCS, :Cos, :FechAct)');
                  //Asignamos los parámetros tomados de los edits.text
                  ParamByName('Des').AsString := MDescripcion.Text;
                  ParamByName('Cat').AsString := DBLCBCategoria.Text;
                  ParamByName('SubCat').AsString := DBLCBSubCategoria.Text;
                  ParamByName('Uni').AsString := DBLCBUnidad.Text;
                  ParamByName('Cant').AsString := ECantidad.Text;
                  ParamByName('Prov').AsString := DBLCBProveedor.Text;
                  ParamByName('UniPre').AsString := DBLCBUnidadPrecio.Text;
                  ParamByName('PCB').AsString := EPrecioCompraBs.Text;
                  ParamByName('PCS').AsString := EPrecioCompraSus.Text;
                  ParamByName('Cos').AsString := ECosto.Text;
                  ParamByName('FechAct').AsDateTime := DateTimePicker1.Date;
                  //Executamos todo e insertamo en la tabla Productos
                  ExecSQL;
                end;
                //Sacamos el último ID de la tabla productos.. sería el ID del producto insertado
                with DM.ZQProductos do
                begin
                  Close;
                  SQL.Clear;
                  SQL.Add('SELECT max(id_producto) as xxx FROM productos');
                  Open;
                end;
                  idProducto := DM.ZQProductos.fieldByName('xxx').AsInteger;
                //Insertamos ahora los campo "id_producto ( este es de la tabla productos )
                //Código, Código Producto, precio1, precio2... precioN en la tabla Tarifas
                with DM.ZQProductos do
                begin
                  Close;
                  SQL.Clear;
                  SQL.Add('INSERT INTO tarifas (Id_producto, CodigoBarra , CodProducto , ListaPrecio , Precio)');
                  SQL.Add('VALUES (:IDP, :CB, :CP, :LP1, rec1), ');
                  SQL.Add('(:IDP, :CB, :CP, :LP2, rec2), ');
                  SQL.Add('(:IDP, :CB, :CP, :LP3, rec3), ');
                  SQL.Add('(:IDP, :CB, :CP, :LP4, rec4), ');
                  SQL.Add('(:IDP, :CB, :CP, :LP5, rec5), ');
                  SQL.Add('(:IDP, :CB, :CP, :LP6, rec6)');
                  //Asignamos parámetros que se repiten en los 6 campos
                  ParamByName('IDP').AsInteger := idProducto;
                  ParamByName('CB').AsString := ECodigoBarra.Text;
                  ParamByName('CP').AsString := ECodProducto.Text;
                  //Asignamos parámetros a las lista de precios que son 6
                  ParamByName('LP1').AsString := 'precio1';
                  ParamByName('LP2').AsString := 'precio2';
                  ParamByName('LP3').AsString := 'precio3';
                  ParamByName('LP4').AsString := 'precio4';
                  ParamByName('LP5').AsString := 'precio5';
                  ParamByName('LP6').AsString := 'precio6';
                  //Asignamos parámetro a los precios que tambien son 6
                  ParamByName('prec1').AsInteger := StrToInt(EPrecio1.Text);
                  ParamByName('prec2').AsInteger := StrToInt(EPrecio2.Text);
                  ParamByName('prec3').AsInteger := StrToInt(EPrecio3.Text);
                  ParamByName('prec4').AsInteger := StrToInt(EPrecio4.Text);
                  ParamByName('prec5').AsInteger := StrToInt(EPrecio5.Text);
                  ParamByName('prec6').AsInteger := StrToInt(EPrecio6.Text);
                  ExecSQL;
                end;
                ModoEditar(False);
                SBAgregar.Enabled := False;
                SBCancelar.Enabled := False;
                SBNuevo.Enabled := True;
                SBEditar.Enabled := True;
                SBEliminar.Enabled := True;
                //Mostramos mensajes si los campos están vacíos
              end
              else
              begin
                ShowMessage('Los campos Unidad no pueden estar vacíos');
              end;
            end
            else
            begin
              ShowMessage('El campo Cantidad no puede estar vacío');
            end;
          end
          else
          begin
            ShowMessage('El campo proveedor no puede estar vacío');
          end;
        end
        else
        begin
          ShowMessage('El campo Categoría no puede estar vacío');
        end;
      end
      else
      begin
        ShowMessage('El campo Descripción no puede estar vacío');
      end;
    end
    else
    begin
      ShowMessage('El campo Código Barra no puede estar vacío');
    end;
  end
  else
  begin
    ShowMessage('El campo Código no puede estar vacío');
  end;

end;



pfff Bueno ahora toca el código de edición, para lo cual realizo una búsqueda por CodigoBarra y llenos los edits, DataBaseComboBoxLook y el meno

BUSCAR Y LLENAR LOS COMPONTES

Todo esto en el evento OnClik del boton búsqueda

Código Delphi [-]
procedure TFrmAgregarProductos.SBBuscarClick(Sender: TObject);
begin
  if (EPalabra.Text <> '') then
  begin
    //llenamos el edit Precio1 y los edits codigos
    with DM.ZQBusqProducto do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM tarifas WHERE CodigoBarra = :CB AND ListaPrecio = :LP1');
      //SQL.Add('SELECT * FROM tarifas WHERE codigo LIKE "%' +EPalabra.Text+ '%"');
      ParamByName('CB').AsString := EPalabra.Text;
      ParamByName('LP1').AsString := 'Precio1';
      Open;
    end;
    EPrecio1.Text := IntToStr(DM.ZQBusqProducto.FieldByName('precio').AsInteger);
    //tenemos el id_producto para usarlo en en query para la tabla productos
    idTarifa := DM.ZQBusqProducto.FieldByName('id_producto').AsInteger;
    codBarOld := DM.ZQBusqProducto.FieldByName('CodigoBarra').AsString;
    codProOld := DM.ZQBusqProducto.FieldByName('CodProducto').AsString;
    prec1Old := DM.ZQBusqProducto.FieldByName('precio').AsInteger;
    //Lenamos el campo Edit CódigoBarra y CodProducto
    ECodProducto.Text := DM.ZQBusqProducto.FieldByName('CodProducto').AsString;
    ECodigoBarra.Text := DM.ZQBusqProducto.FieldByName('CodigoBarra').AsString;
    //Llenamos el edit precio2
    with DM.ZQBusqProducto do
    begin
      Close;
      SQl.Clear;
      SQL.Add('SELECT * FROM tarifas WHERE CodigoBarra = :CB AND ListaPrecio = :LP2');
      ParambyName('CB').AsString := EPalabra.Text;
      ParamByName('LP2').AsString := 'precio2';
      Open;
    end;
    EPrecio2.Text := IntToStr(DM.ZQBusqProducto.FieldByName('precio').AsInteger);
    prec2Old := DM.ZQBusqProducto.FieldByName('precio').AsInteger;
    //Lenamos el edit cantidad3
    with DM.ZQBusqProducto do
    begin
      Close;
      SQl.Clear;
      SQL.Add('SELECT * FROM tarifas WHERE CodigoBarra = :CB AND ListaPrecio = :LP3');
      ParambyName('CB').AsString := EPalabra.Text;
      ParamByName('LP3').AsString := 'precio3';
      Open;
    end;
    EPrecio3.Text := IntToStr(DM.ZQBusqProducto.FieldByName('precio').AsInteger);
    prec3Old := DM.ZQBusqProducto.FieldByName('precio').AsInteger;
    //Lenamos el edit con Precio4
    with DM.ZQBusqProducto do
    begin
      Close;
      SQl.Clear;
      SQL.Add('SELECT * FROM tarifas WHERE CodigoBarra = :CB AND ListaPrecio = :LP4');
      ParambyName('CB').AsString := EPalabra.Text;
      ParamByName('LP4').AsString := 'precio4';
      Open;
    end;
    EPrecio4.Text := IntToStr(DM.ZQBusqProducto.FieldByName('precio').AsInteger);
    prec4Old := DM.ZQBusqProducto.FieldByName('precio').AsInteger;
    //llenamos el campo Precio5
    with DM.ZQBusqProducto do
    begin
      Close;
      SQl.Clear;
      SQL.Add('SELECT * FROM tarifas WHERE CodigoBarra = :CB AND ListaPrecio = :LP5');
      ParambyName('CB').AsString := EPalabra.Text;
      ParamByName('LP5').AsString := 'precio5';
      Open;
    end;
    EPrecio5.Text := IntToStr(DM.ZQBusqProducto.FieldByName('precio').AsInteger);
    prec5Old := DM.ZQBusqProducto.FieldByName('precio').AsInteger;
    //Llenamos el campo Precio6
    with DM.ZQBusqProducto do
    begin
      Close;
      SQl.Clear;
      SQL.Add('SELECT * FROM tarifas WHERE CodigoBarra = :CB AND ListaPrecio = :LP6');
      ParambyName('CB').AsString := EPalabra.Text;
      ParamByName('LP6').AsString := 'precio6';
      Open;
    end;
    EPrecio6.Text := IntToStr(DM.ZQBusqProducto.FieldByName('precio').AsInteger);
    prec6Old := DM.ZQBusqProducto.FieldByName('precio').AsInteger;
    //sacamos el id_tarifa de la otra tabla.
    //Llenamos los campos Descripcion y Categoria
    with DM.ZQBusqProducto do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM productos WHERE id_producto = :IDT');
      ParamByName('IDT').AsInteger := idTarifa;
      Open;
    end;
    //Lenamos toooodos los campos que faltan.. unidad, categoria , subCatetgoria..
    MDescripcion.Text := DM.ZQBusqProducto.FieldByName('descripcion').AsString;
    DBLCBCategoria.KeyValue := DM.ZQBusqProducto.FieldByName('Categoria').AsString;
    DBLCBSubCategoria.KeyValue := DM.ZQBusqProducto.FieldByName('SubCategoria').AsString;
    DBLCBProveedor.KeyValue := DM.ZQBusqProducto.FieldByName('Proveedor').AsString;
    DBLCBUnidad.KeyValue := DM.ZQBusqProducto.FieldByName('Unidad').AsString;
    DBLCBUnidadPrecio.KeyValue := DM.ZQBusqProducto.FieldByName('UnidadPrecio').AsString;
    ECantidad.Text := DM.ZQBusqProducto.FieldByName('Cantidad').AsString;
    ECosto.Text := DM.ZQBusqProducto.FieldByName('Costo').AsString;
    EPrecioCompraBs.Text := DM.ZQBusqProducto.FieldByName('PrecioCompraBs').AsString;
    EPrecioCompraSus.Text := DM.ZQBusqProducto.FieldByName('PrecioCompraSus').AsString;
    DateTimePicker1.Date := DM.ZQBusqProducto.FieldByName('FechaActualizacion').AsDateTime;
    //Abrimos los campos
    modoEditar(True);
    SBGuardar.Enabled := True;
    SBCancelar.Enabled := True;
    SBNuevo.Enabled := False;
    SBAgregar.Enabled := False;
    SBEditar.Enabled := False;
    SBEliminar.Enabled := False;
    SBDelete.Enabled := True;
  end
  else
  begin
    ShowMessage('Por Favor ingrese un código');
  end;
end;

continuaaa...
Archivos Adjuntos
Tipo de Archivo: zip maestro-detalle.zip (4,6 KB, 9 visitas)

Última edición por BlackDaemon fecha: 12-04-2007 a las 07:42:41.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Actualizar Archivos Desde FTP papu24ar Varios 4 21-03-2007 03:50:57
Actualizar una base de datos desde un servidor remoto zvf MySQL 1 22-06-2006 22:21:26
Actualizar una base de datos desde un formulario federiconqn21 Varios 1 14-12-2005 16:43:23
Impresión desde un StringGrid... Lester Impresión 10 26-03-2005 07:14:29
Impresion desde un StringGrid fmonte Varios 3 17-09-2004 05:28:29


La franja horaria es GMT +2. Ahora son las 04:13:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi