Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Comparar y Validar Campos (https://www.clubdelphi.com/foros/showthread.php?t=76171)

L3st4t 13-10-2011 21:39:27

Comparar y Validar Campos
 
Buenas tardes, Estoy super nuevo en esto de la programacion

Mi requerimiento es el siguiente estoy trabajando con una data de un sistema administrativo (base de datos DBISAM)y necesito una aplicación que lea el código del cliente en la tabla y el saldo (deuda) que posee el mismo, en estos momentos estoy comenzando con la búsqueda del cliente con el siguiente código:
Código Delphi [-]
Procedure TF_Clientes.VerificaCodigo;
var codigo : string;
begin
  With DataM.T_Clientes do
  begin
    codigo:= edit1.Text;
    IF  FieldByname('FC_CODIGO').AsString = codigo then
    begin
       ShowMessage('Codigo Encontrado');
    end
    else
    begin
      ShowMessage('Codigo No Existe');
    end;
  end;
end;

El detalle esta que solo valida el primer registro, no hallo como hacer una secuencia para que busque el código que digité en el edit.text

Me imagino que puede ser con un while o alguna sentencia como el LOCATE (no se si este ultimo lo acepta el DBISAM) pero no se como utilizarlo.

Disculpen y Gracias.

ecfisa 13-10-2011 22:32:08

Hola L3st4t.

Por favor te ruego que uses las etiquetas [delphi] [/delphi] para encerrar tu código Delphi. ( Etiquetas vB )

Creo que deberías hacer algo como:
Código Delphi [-]
...
  if DataM.T_Clientes.Locate('FC_CODIGO', Edit1.Text, []) then
    ShowMessage('Codigo Encontrado')
  else
    ShowMessage('Codigo No Existe');
...
No sé con que componentes estas trabajando ya que también se puede hacer mediante una consulta SQL.

Un saludo.

L3st4t 13-10-2011 22:51:07

Cita:

Empezado por ecfisa (Mensaje 415507)
Hola L3st4t.

Por favor te ruego que uses las etiquetas [delphi] [/delphi] para encerrar tu código Delphi.

Creo que deberías hacer algo como:
Código Delphi [-]
...
  if DataM.T_Clientes.Locate('FC_CODIGO', Edit1.Text, []) then
    ShowMessage('Codigo Encontrado')
  else
    ShowMessage('Codigo No Existe');
...
No sé con que componentes estas trabajando ya que también se puede hacer mediante una consulta SQL.

Un saludo.

Gracias por la pronta respuesta disculpa lo de las etiquetas no habia leido el apartado vB

Resulta que no me funciona ya que estoy usando
Código Delphi [-]
FieldByname
Si en el no me permite ver el registro desde la tabla me genera una error. Respecto a los componentes tendrias que decirme para ver si te entiendo pero creo que si acepta una consulta SQL....

Saludos...

ecfisa 13-10-2011 23:01:51

Hola.

Es que no es excluyente el uso del método FieldByName con el uso de la función Locate, ambas realizan taréas diferentes.

El método FieldByName es utilizado para acceder al valor de un campo (visualizar/asignar/modificar) mediante su nombre, en tanto que la función Locate, sirve para buscar/posicionarse en un registro de una tabla.

Respecto a los componentes me refiero si estas usando TTable, TQuery (BDE) - TADOTable, TADOQuery (ADO) - TIBDataSet, TIBQuery (IBX) ...

Un saludo.

L3st4t 13-10-2011 23:22:35

Entiendo pero cuando coloco la instruccion que me diste me genera erro,r porque supungo que no encuentra o relaciona el campo FX_CODIGO que esta dentro de la tabla y respecto a los componentes creo que utilizo SQLQUERY ya que los otros que me mencionas no me suenan por ningún lado.

Saludos

ecfisa 13-10-2011 23:47:00

Hola.

Entonces se trata de los componentes dbExpress.

La busqueda usando un TSQLQuery sería:
Código Delphi [-]
function ExisteElDato(AQuery: TSQLQuery; Dato: string): Boolean;
begin
 with AQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM TU_TABLA');
    SQL.Add('WHERE TU_CAMPO = :DATO');
    ParamByName('DATO').AsString:= Dato;
    Open;
    Result:= not IsEmpty;
  end;
end;
Deberás reemplazar: TU_TABLA y TU_CAMPO, por los nombres que le hayas dado a la tabla y al campo sobre el que realizás la búsqueda.

Ejemplo de uso:
Código Delphi [-]
 if ExisteElDato(SQLQuery1, Edit1.Text) then
    ShowMessage('Existe')
  else
    ShowMessage('No existe');

Un saludo.

L3st4t 14-10-2011 00:22:10

Yo estoy mas perdido que la palabra... Pues no me resulto... Yo creo que no cuento con esos componentes, te cuento estoy usando delphi 5 la base de datos con la que estoy trabajando es DBISAM 4.29

Como lo haría con un ciclo repetitivo u otra forma?

La verdad que me estoy frustrando.... No logro entender....

ecfisa 14-10-2011 00:49:58

A ver... vamos a empezar por lo primero así llegamos a buen puerto. :)

En tu form has puesto componentes para conectarte a la base de datos sea quál fuere. ¿ De que pestaña de Delphi los has sacado ?



Saludos.

L3st4t 14-10-2011 00:58:50

Ok

Para para conectar la base de datos utilice Un modulo de datos y cree las tablas para consultas con el componente o pestaña DBISAM Utilice un DATASOURCE del componente DATA ACCES y lo que es formas, botones, edit, dbgrid del standar el mismo apunta al DataSource.

Saludos

ecfisa 14-10-2011 01:11:28

Ahora sí entiendo, yo no conocía en absoluto (hasta ahora) DBISAM, y me confundió el comentario de tu primer post:
Cita:

(base de datos DBISAM)
Basándome en él pensé que sería algún motor de base de datos (que no conocía) y no componentes, de allí la confusión.

Como te digo arriba no conozco esos componentes, pero voy a ver que información puedo conseguir sobre ellos.

Quizá algún compañero haya trabajado con ellos y te puede ayudar más facilmente.

Un saludo.

L3st4t 14-10-2011 01:17:00

Ok

Muchas Gracias..


Quedo Atento....

Saludos

ecfisa 14-10-2011 01:29:43

Hola.

Pude encontrar esto: DBISAM Driver Manual

Pero lo que creo que te va a resultar más útil es esto: DBISAM_DEMO, un demo sobre el úso de los componentes. Aunque no pude probarlo por carecer de los mismos, pareciera que soportan la función Locate ya que en una parte del código dice:
Código Delphi [-]
  ...
   qryCopyCustFromMem.ExecSQL;
    // immediately locate the new customer in the dataset
    // using the just inserted ID number

    tblCustomers.Locate('CustNo', VarArrayOf([tblCustomers.LastAutoIncValue]), []);
 ...

Espero que te ayude.

Un saludo. :)

L3st4t 14-10-2011 16:19:41

Gracias amigo por toda tu ayuda... Revisaré el contenido enviado y te avisaré muy agradecido por tu interés.


Saludos

L3st4t 16-10-2011 01:32:03

Saludos, al final si pude hacer la cuestión, lo pude hacer con un TBISAMquery y setencias mySQL voy abrir otro tema en "varios" por una duda que no tiene que ver con esto...

Gracias por ese manual lo he estado hojeando y se ve muy interesante.


La franja horaria es GMT +2. Ahora son las 05:07:43.

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