Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   BUsque con Locate (https://www.clubdelphi.com/foros/showthread.php?t=12626)

silviodp 22-07-2004 14:08:48

BUsque con Locate
 
Que parámetro tengo que poner en 'Locate' para que me realice una búsqueda exacta?
Es decir:

ModuloDatos.TblPagos.Locate('NumFact',Busca.Text,????);

Ya que en mi aplicacion busco una factura para cargar el pago de la misma, y quiero que si el número tipeado no corresponde a una factura, o la misma ya está paga, entones muestre el mensaje correspondiente.
Gracias, saludos.-

Silvio.-

neon 22-07-2004 14:14:15

tienes que poner:

[loPartialKey]

neon 22-07-2004 14:15:05

perdona, lo que te he dicho es para querys, pero igualmente pruebalo

Nuria 22-07-2004 14:38:10

Hola!

Da igual que sea un query o una tabla, el locate funciona igual ;).

Saludos!

argami 22-07-2004 14:39:18

- si usas el loPartialkey te buscara en parte de , es decir que si buscas 10
te puede devolver 10000
- si usas el locaseinsensitive le da igual mayus, mins, portanto solo pasa los corchetes

suponiendo que te entiendo bien lo que necesitas es algo asi

Código:

if ModuloDatos.TblPagos.Locate('NumFact',Busca.Text,[]) then
begin
  if ModuloDatos.TblPagos.FieldByName('Pagado').AsBolean then
              ShowMessage('Pagado');
 ////
end;

PD:El locate es del TDataSet portanto todos los componentes derivados de este tienen esta funcion (TTables, Tquerys, TclientDataSet, etc...)

espero que te sirva

silviodp 22-07-2004 23:11:54

Busqueda con Locate
 
Gami:
preguntaba porque probé con los corchetes solos pero no funciona, es decir el nº de factura se compone de la siguiente forma 0000-00000000, y yo introduzco en el DBEDit correspondiente 0001-000 y doy 'enter' y me figura la factura del primer usuario que tengo en la base de usuarios, y no me da error es decir que me aparezca el mensaje??
Gracias.

Silvio.-

delphi.com.ar 22-07-2004 23:17:17

Locate te retorna un valor Booleano si no encontró ningun registro, tendrías que verificar este resultado para saber si encontró un registro.

argami 22-07-2004 23:23:59

una cosa estas iroduciendo la informacion en un DBEdit???
si lo tienes ligado elproblema es que estas modificando la informacion del registro actual

de todas maneras porque no pones el trozo de codigo especifico o enviamelo al correo porque ya estoy un poco a ciegas

silviodp 23-07-2004 01:01:27

Busque con Locate
 
Ok, voy a poner el código que escribí...
Gracias.

silviodp 23-07-2004 17:17:12

Busque con Locate
 
En el evento OnKeyPress del DBEdit (donde cargo el Nºde Factura), escribí:
[code]
procedure TForm14.DBEdit2KeyPress(Sender: TObject; var Key: Char);
Var
n,m,o,p:Variant;
begin
If Key=#13 Then
begin
ModuloDatos.TblPagos.Active:=True;
ModuloDatos.TblFacturas.Active:=True;
ModuloDatos.TblFacturas.Locate('NFactura',DBEDit2.Text,[]);
n:=ModuloDatos.TblFacturas.FieldValues['NFactura'];
m:=ModuloDatos.TblFacturas.FieldValues['Usuario'];
o:=ModuloDatos.TblFacturas.FieldValues['Periodo'];
p:=ModuloDatos.TblFacturas.FieldValues['Precio'];
ModuloDatos.TblPagos.FieldValues['NFact']:=n;
ModuloDatos.TblPagos.FieldValues['Usuario']:=m;
ModuloDatos.TblPagos.FieldValues['Periodo']:=o;
ModuloDatos.TblPagos.FieldValues['Importe']:=p;
Confirmar.SetFocus;
end;
/[code]

Bueno ese es el código, donde tengo problema...
Gracias, saludos.-

silviodp 23-07-2004 17:18:39

Busque con Locate
 
Perdón me equivoqué con las etiquetas:
Código:

procedure TForm14.DBEdit2KeyPress(Sender: TObject; var Key: Char);
Var
 n,m,o,p:Variant;
begin
If Key=#13 Then
 begin
  ModuloDatos.TblPagos.Active:=True;
  ModuloDatos.TblFacturas.Active:=True;
  ModuloDatos.TblFacturas.Locate('NFactura',DBEDit2.Text,[]);
  n:=ModuloDatos.TblFacturas.FieldValues['NFactura'];
  m:=ModuloDatos.TblFacturas.FieldValues['Usuario'];
  o:=ModuloDatos.TblFacturas.FieldValues['Periodo'];
  p:=ModuloDatos.TblFacturas.FieldValues['Precio'];
  ModuloDatos.TblPagos.FieldValues['NFact']:=n;
  ModuloDatos.TblPagos.FieldValues['Usuario']:=m;
  ModuloDatos.TblPagos.FieldValues['Periodo']:=o;
  ModuloDatos.TblPagos.FieldValues['Importe']:=p;
  Confirmar.SetFocus;
 end;


argami 23-07-2004 23:32:24

la verdad no entiendo muy bien lo que quieres lograr pero lo que si veo es que no validas la respuesta del locate y una vez que sales de el modificas los valores de la tabla te aconsejaria probar una cosa como

Código:

procedure TForm14.DBEdit2KeyPress(Sender: TObject; var Key: Char);
Var
 n,m,o,p:Variant;
begin
If Key=#13 Then
 begin
  ModuloDatos.TblPagos.Active:=True;
  ModuloDatos.TblFacturas.Active:=True; //esto te colocara en la primera pos
  //aqui validas si realmente ha sido encontrado
  if ModuloDatos.TblFacturas.Locate('NFactura',DBEDit2.Text,[]) then
  begin
    n:=ModuloDatos.TblFacturas.FieldValues['NFactura'];
    m:=ModuloDatos.TblFacturas.FieldValues['Usuario'];
    o:=ModuloDatos.TblFacturas.FieldValues['Periodo'];
    p:=ModuloDatos.TblFacturas.FieldValues['Precio'];
    ModuloDatos.TblPagos.FieldValues['NFact']:=n;
    ModuloDatos.TblPagos.FieldValues['Usuario']:=m;
    ModuloDatos.TblPagos.FieldValues['Periodo']:=o;
    ModuloDatos.TblPagos.FieldValues['Importe']:=p;
    Confirmar.SetFocus;
  end else begin
    ShowMessage('Factura no encontrada');
    (Sender as TDBEdit).SelectAll;
  end;
 end;

Otra cosa es has verificado que no tengas caracteres raros o que necesites una busqueda no sensitiva a las mays es decir un locaseinsensitive?
esto lo digo por que en un post anterior me he dado cuenta de que introduces dentro de la factura un "-"

solo me queda que si esto no te ayuda pasame el codigo al correo para que lo pueda ver en su globalidad ¿vale?


La franja horaria es GMT +2. Ahora son las 06:26:20.

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