Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Buscar dato en TJvMemoryData (https://www.clubdelphi.com/foros/showthread.php?t=70478)

BlueSteel 22-10-2010 22:08:22

Buscar dato en TJvMemoryData
 
Hola

estube buscando en la web.. y no encontre ejemplos...

Tengo una duda con este compontente... lo utilizo bastante pero hay cierta funcion que nunca he realizado.. y es buscar un registro dentro del JvMemoryData....

La idea es que le estoy ingresando datos que son unicos... pero cuando los inserto me falta verificar que el dato no lo haya insertado antes.... generalmente realizo eso con Query.. pero con este componente no se como hacerlo... quisas puede ser con un locate.. pero no se como hacerlo....


Salu2:p:D

Young 23-10-2010 04:10:06

Yo utilizo lo siguiente cuando necesito hacer una búsqueda en los memory.

Código Delphi [-]
JvMemoryData.Locate( 'NombreCampo1;NombreCampo2', VarArrayOf(['Valor a buscar1', 69]), [] );

Los valores para el tercer son:

[loCaseInsensitive] búsqueda no sensible a mayúsculas.

[loPartialKey] búsqueda parcial.

[] este lo utilizo para búsqueda exacta

Se me olvidaba... el método devuelve un boleano, true para encontrado.

Saludos.

BlueSteel 26-10-2010 00:00:17

Ok... gracias...

ya lo hice funcionar.. y la sentencia que utilice fue la siguiente

Código Delphi [-]
// Datos : Form de tipo DataModule
// ItemsContrato : Componente JvMemoryData
// vAsi.Text : Edit, donde se ingresa un valor numerico

If Datos.ItemsContrato.Locate('Ite_Id',StrToInt(vAsi.Text),[]) Then
   // Sentencia 1
Else
  // Sentencia 2
End;

Salu2:p:D

microbiano 27-12-2010 16:07:27

hola amigo BlueSteel, desde hace dias te sigo los paso por que usas el componente TjvMemoryData, oye amigo que posibilidad existe de que me puedas ayudar hacer una busqueda, soy nuevo con este componente.

ya intente con el codigo que pones pero creo que no enlaso algo o no se que pasa no muestra error pero no hace nada.

de antemano muchas gracias.

BlueSteel 28-12-2010 14:46:22

Cita:

Empezado por microbiano (Mensaje 385899)
hola amigo BlueSteel, desde hace dias te sigo los paso por que usas el componente TjvMemoryData, oye amigo que posibilidad existe de que me puedas ayudar hacer una busqueda, soy nuevo con este componente.

ya intente con el codigo que pones pero creo que no enlaso algo o no se que pasa no muestra error pero no hace nada.

de antemano muchas gracias.


Hola Microbiano:

disculpa.. pero hace dias que no ingresaba.... Específicamente que necesitas..

Me voy a cambiar de PC y voy a dejar algunos ejemplos que utilizo con dicho componente...

Salu2:D

microbiano 28-12-2010 14:52:30

gracias
 
hola estimado amigo, necesitaba hacer una busqueda dentro de la tabla temporal, pero lo resolvi de la siguiente manera
Código Delphi [-]
If temporal.Locate('codigo',Self.wcodigobarras,[]) Then
, precisamentel un codigo que te pasaron, que te parece si mejor me das una idea de como modificar algun registros, pro que hasta ahora lo hago asi
Código Delphi [-]
procedure TFfactura.modifica_registro;
begin
 with Ffactura.temporal do
  begin
   Edit;
   //FieldByName('codigo').AsString :=Self.wcodigobarras;
   //FieldByname('descripcion').AsString := Self.wdescripcion;
   FieldByName('cantidad').AsFloat:=Self.wcantidad_venta;
   FieldByName('precio').AsCurrency:= Self.wprecio_venta;
   FieldByName('descuento').AsFloat:=Self.wdescuento_considerar;
   FieldByName('total').AsCurrency:= wcantidad_venta * wprecio_venta;
   Post;
  end;
   Self.txtcodigo.Text:='';
  Self.txtcodigo.SetFocus;  
end;

sin embargo no estoy muy seguro de que este bien, debido a que siempre he usado sql para este tipo de operaciones de antemano muchas gracias :-)

en cuanto a que no habias entrado me imagino me imagino vacaciones y a disfrutar la familia jejeje.

BlueSteel 28-12-2010 15:22:29

Ya...

Mira con dicho componente utilizo lo siguiente....

En el Evento FormCreate del Formulario donde estoy utilizando el componente pongo este codigo

Código Delphi [-]
Datos.ItemsContrato.Active := True; 
Datos.ItemsContrato.EmptyTable; 
Datos.ItemsContrato.Refresh; 
// Esto es para asegurarme de que no tenga basura...

Para Insertar un Registro realizo lo siguiente
Código Delphi [-]
Datos.ItemsContrato.Append; 
Datos.ItemsContrato.FieldByName('Ite_Id').AsString := Datos.AQ_Abono['Abo_Id']; 
Datos.ItemsContrato.FieldByname('Ite_Asiento').AsString := vAsi.Text; 
Datos.ItemsContrato.FieldByName('Ite_Sigla').AsString := Datos.AQ_ValorUbicacion['Ubi_Sigla']; 
Datos.ItemsContrato.FieldByName('Ite_Ubicacion').AsString := Datos.AQ_ValorUbicacion['Ubi_Detalle']; 
Datos.ItemsContrato.FieldByName('Ite_Valor').AsCurrency := Datos.AQ_ValorUbicacion['Tem_Valor']; 
Datos.ItemsContrato.Post;

Para buscar un registro que ya he ingresado, realizo esto

Código Delphi [-]
If Datos.ItemsContrato.Locate('Ite_Id',StrToInt(Datos.AQ_Abono['Abo_Id']),[]) Then    
Begin         
      ShowMessage('Ya existe un registro con dicho código----');         
      // Aqui solo limpio e ingreso otro codigo... esto es por que en mi sistema no se puede repetir un codigo (son asientos de un estadio numerados)
      vAsi.Clear;
      vAsi.SetFocus;
      Sw_1:=0;
End;

Para Eliminar un registro, utilizo lo siguiente (se supone que estoy posicionado en el registro a eliminar)

Código Delphi [-]
Try
    If MessageDlg('Seguro de borrar el Asiento '+#13+IntToStr(Datos.ItemsContrato['Ite_Asiento'])+' de '+Datos.ItemsContrato['Ite_Ubicacion'], mtConfirmation, [mbYes, mbNo], 0) = mrYes Then
       Begin
             sSub.AsCurrency := sTot.AsCurrency - Datos.ItemsContrato['Ite_Valor'];
             sTot.AsCurrency := sSub.AsCurrency;
             Datos.ItemsContrato.Delete;
             Sw_2 := Sw_2 - 1;
       End;
Except
       ShowMessage('No existen registros para eliminar');
End;

Solo mencionar lo siguiente....

Cuando en mi programa de factura ingreso un codigo que ya existe en la tabla de memoria, digo que ya existe y que si lo quiere modificar, entonces paso todos los datos del registro a variables, elimino el registro de la tabla temporal, traspaso los datos de las variables a las variables de ingreso de items... y me evito el actualizar un registro y hacer más engorroso el sistema.

Tambien te menciono que el componente lo tengo en otro formulario de tipo DataModule llamado "Datos".

Espero que esto te sirva...

Cita:

en cuanto a que no habias entrado me imagino vacaciones y a disfrutar la familia jejeje.
ojala ubiesen sido por vacaciones... mira que he tenido mucho trabajo....y de vacaciones ni hablar por estos dias, y quizas puedan ser el proximo año.... :D

Salu2:p:D

novato_erick 15-06-2011 00:27:17

sumar cantidades de articulos en un Label con el componente TJvMemoryData
 
Hola he seguido todos estos ejemplo y he quedado satisfecho con el componente TjvMemoryData sin embargo no he logrado que me sume la cantidad de articulos vendidos y ponerlo en un label. Saben Como hacerlo?


Saludos

novato_erick

microbiano 15-06-2011 02:24:51

Calcula totales
 
Código Delphi [-]
procedure TFfactura.calcula_totales;
var i,wregistros:integer;
begin
 //Calcula los totales de la factura
   SubTotal := 0;
   Impuesto := 0;
   Desc     := 0;
   Total    := 0;

   temporal.First;
   For i:= 1 to Self.temporal.RecordCount do
    begin
      SubTotal := SubTotal + temporal.fieldByname('total').AsFloat;
      temporal.Next;
    end;

    //Calcula el monto para cobrar el impuesto de ventas

     //For i:=1 to Ffactura.SGFact.RowCount-1 do
     //If Ffactura.SGFact.Cells[6,i] = 'Si' then Impuesto :=  Impuesto + StrToFloat(Ffactura.SGFact.Cells[5,i]);


   {SubTotal := Round(SubTotal);  aqui es donde redondea la cantidad total
   ok funciona al 100% ---Desc := Round(Desc);}
    Desc := (SubTotal * Ffactura.FLEPorcDesc.Value / 100);

   {saco el importe del iva}
    Impuesto:=subtotal*ffactura.txtiva.Value/100;

   Total := (SubTotal - Desc + Impuesto);
     Ffactura.wgrande_total:=Total;

    //escribe los valores en las celdas
    Ffactura.SGTotal.Cells[1,1] := Format('%8.2n',[desc]);
    Ffactura.SGTotal.Cells[1,2] := Format('%8.2n',[Impuesto]);
    Ffactura.SGTotal.Cells[1,0] := Format('%8.2n',[SubTotal]);
    Ffactura.SGTotal.Cells[1,3] := Format('%8.2n',[Total]);
end;

tendrias que adaptarlo a lo que necesitas, ESTO LO DEBERIAS HACER CADA QUE AGREGUES UN ITEM O AL FINAL

novato_erick 15-06-2011 17:16:49

sumar cantidades de articulos en un Label con el componente TJvMemoryData
 
Gracias microbiano por contestar:

solucionado la parte de sumatoria de totales.

Sin embargo es posible sumar los totales de el campo CANTIDAD ejemplo

*********************************************************
CODIGO----- DESCRIPCION-----------CANTIDAD -------DESC-----TOTAL
123456------PRODUC PRUEBA------------ 3 ------------0 ------- 5.00
654321------PRODUC PRUEBA2 ---------- 2 -------------0-------10.00
456789------PRODUC PRUEBA3 ---------- 3 ------------ 0 ------- 2.60
*********************************************************
TOTAL ARTICULOS 8----------------TOTAL 17.60


Saludos;

microbiano 16-06-2011 00:17:06

For i:= 1 to Self.temporal.RecordCount do begin SubTotal := SubTotal + temporal.fieldByname('total').AsFloat;
cantidad := cantidad + temporal.fieldbyname('cantidad').Integer;
temporal.Next; end;

cantidad:= variable global

otra deberias intentar solucionar el problema, ya que aqui se te
echa la mano pero no se te resuelve usando logica creo que asi
quedaria.


La franja horaria es GMT +2. Ahora son las 13:47:38.

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