Ver Mensaje Individual
  #18  
Antiguo 23-03-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Reputación: 18
BlackDaemon Va por buen camino
Hola hola..

óh! que tondo he sido al no darme cuenta en eso y yo me me cuidaba en ese aspecto.. y se me fué
Bueno ahora aquí con buenas notícias.. he tenía "creo" buenos avances con respecto a esto de la integridad referencial en MySQL y comprendí todo, me quedó todo muy claro Lepe ahora implenté tus ideas y sugerencias y aquí traigo los resultados en código.

Primero Mi tabla PRODUCTOS tengo de clave primaria el campo y es autoincrementable, aunque leyendo sobre ese tipo de campo no era posible en versiones anteriores aquí explican un poco mejor sobre el tema para alguien que tenga ganas de aprender
http://dev.mysql.com/doc/refman/5.0/...nt-column.html
http://dev.mysql.com/doc/refman/5.0/...trictions.html

Ahora como les decía que este es mi campo en la tabla PRODUCTOS

Id_productos


Mi tabla TARIFAS la mentení tal y como estaba solo cambiando los valores de int(11) y quité el autoincrement y también quité que el campo CodigoBarra sea la llave primaria.. por que al serlo no permite que se repitan y yo SI necesito que se repitan cada Codigo de barra.. es mas.. se repetirían 6 veces de acuerdo a la cantidad de lista de precios para cada producto,

Luego de eso con este código en mi boton guardar de mi form donde agrego y modifíco los precios, nombres, códigos, etc

Código Delphi [-]
procedure TFrmAgregarProductos.SBGuardarClick(Sender: TObject);
begin
  DM.ZTAlmacen.FieldByName('FechaActualizacion').AsDateTime := DateTimePicker1.Date;
  DM.ZTAlmacen.Post;
  with DM.ZQTarifas do
  begin
    Close;
    SQL.Clear;
    SQL.Add('INSERT INTO `tarifas` (`Id_producto`, `CodigoBarra` , `CodProducto` , `TipoTarifa` , `Precio` )');
    SQL.Add('VALUES (:IDP, :CB, :CP, :TT1, :P1), ');
    SQL.Add('(:IDP, :CB, :CP, :TT2, :P2), ');
    SQL.Add('(:IDP, :CB, :CP, :TT3, :P3), ');
    SQL.Add('(:IDP, :CB, :CP, :TT4, :P4), ');
    SQL.Add('(:IDP, :CB, :CP, :TT5, :P5), ');
    SQL.Add('(:IDP, :CB, :CP, :TT6, :P6)');

    // Si, asignamos los parámetros xDD
    ParamByName('IDP').AsInteger := DM.ZTAlmacen.FieldByname('id_producto').AsInteger;
    ParamByName('CB').AsString := DBECodigoBarra.Text;
    ParamByName('CP').AsString := DBECodigoProducto.Text;
    ParamByName('TT1').AsString := 'Precio1';
    ParamByName('TT2').AsString := 'Precio2';
    ParamByName('TT3').AsString := 'Precio3';
    ParamByName('TT4').AsString := 'Precio4';
    ParamByName('TT5').AsString := 'Precio5';
    ParamByName('TT6').AsString := 'Precio6';

    ParamByName('P1').AsString := DBEPrecio1.Text;
    ParamByName('P2').AsString := DBEPrecio2.Text;
    ParamByName('P3').AsString := DBEPrecio3.Text;
    ParamByName('P4').AsString := DBEPrecio4.Text;
    ParamByName('P5').AsString := DBEPrecio5.Text;
    ParamByName('P6').AsString := DBEPrecio6.Text;
    // Ejecutamos e insertamos todos los valores asignados
    ExecSQL;

  end;

  ModoEditar(False);
end;

ahora explico.

DM.ZTAlmacen.Post; esto lo que hace es guardar TODOS los datos que están en los diferentes DBEdits de mi form.. y ahora como podrán ver guardo los precios y codigos en 2 tablas si en la tabla productos y tarifas
eso es debido a que me resultará mas fácil mostrar resultados PERO creo que para hacer un UPDATE tendré que hacer a las 2 tablas claro está... no se si esto sea bueno o no, pero no encuentro otra colución para mostrar las tarifas en un FORM con un simple TTable.next; o de esta forma recorrer fila por fila de un campo para ir mostrando en los diferentes DBEdits.. vamos como lo hacía antes yo pero eso se podía por que estaban en una misma tabla las características, , tarífas, y códigos, bueno si alguien me dice como puedo hacer como un simple TTable.Next estaría muy agradecido...

Puedo hacer es tener una TTTarifas y conectarlo a mis DBEPrecio1, DBEPrecio2, etc.. luego llenar la tabla TARIFAS con un query.. pero para recorrer los campo de uno a uno hacerlo con la TTTarifa.Next ???
Pero claro.. solo serviría para eso. por que no pienso usar el TTable.appent, open, y POST.. solo serviria para lo antes dicho, recorrer una fila

Por ej tengo un totón que es SIGUIENTE y lo que tiene es:

Código Delphi [-]
procedure TFrmAgregarProductos.SBSiguienteClick(Sender: TObject);
begin
  DM.ZTAlmacen.Next;
end;

entonces con mi nueva tabla quedaría

Código Delphi [-]
procedure TFrmAgregarProductos.SBSiguienteClick(Sender: TObject);
begin
  DM.ZTAlmacen.Next;
  DM:ZTTarifas.Next;
end;

eso irá sincronizado ??? osea las descripciones, unidaddes de precio, etc con las tarífas que están en la tabla TARIFAS ???

si es que no habrá problemas cuando elimine un producto creo que sería una idea, ademas como ahora trabajo con innoDB al aleminar un producto se eliminará también en la tabla TARIFAS todos los 6 precios incluyendo el id_producto, osea TODO.

bueno voy a comer..

salud!


Oh!! que mala suerte yo que pensaba que todo estaba bién ocurre siempre un problema
resulta que ahora cuando edito un producto me escribe en la tabla TARIFAS de nuevo los precios osea 6 filas mas.. cada ves que edito algo.. claro por que en mi código está así, y tendré que ver que hacer para poder saber si está un producto con el mismo id_producto para que lo edite. pero creo que tendré que hacer puro SQL y olvidarme de mi TABLA y usar puros QUERYS

asludos

Última edición por BlackDaemon fecha: 23-03-2007 a las 21:37:00.
Responder Con Cita