Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 17-10-2011
negrokau negrokau is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 210
Poder: 14
negrokau Va por buen camino
Talking

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Debes explicar primero EXACTAMENTE qué quiéres hacer, porque ese while, aparentemente, no sirve para nada, como ya han comentado.
Lo que quiero que haga exactamente es que busque si el codigo ingresado ya existe, si ya existe me salte el mensage y que el focus se posiciones en cod_barra para cambiar el codigo:

Código Delphi [-]
if cod_barra.text=query1.fieldvalues['cod_barra'] then
showmessage('el codigo ingresado ya existe');
cod_barra.setfocus;
si no existe el codigo que guarde:

Código Delphi [-]
guardar.click;

se entiende ahora lo que quiero hacer?
Responder Con Cita
  #22  
Antiguo 17-10-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
entonces guiate del ejemplo que te di usando Onvalidate

la diferencia es que el mensaje te lo manda cuando sale del campo
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #23  
Antiguo 17-10-2011
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
Imagino que está comprobando un Edit.text con el valor de un Campo.
Creamos una variable booleana (existe). Si lo encuentra sal del bucle.

Código Delphi [-]

existe := false;
 
query1.First;
While not query1.Eof Do
Begin
 if cod_barra.text=query1.fieldvalues['cod_barra'] then
 begin
  showmessage('el codigo ingresado ya existe');
  existe := true;
  cod_barra.setfocus;
  break;
 end;
 query1.Next;
end;

if not existe then
 guardar.click;

Otra opción es comprobar previamente con un select si existe el cod_barra.
Responder Con Cita
  #24  
Antiguo 17-10-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por Loviedo Ver Mensaje
Imagino que está comprobando un Edit.text con el valor de un Campo.
Creamos una variable booleana (existe). Si lo encuentra sal del bucle.
Loviedo si bien es cierto el codigo de Negrokau podria funcionar... lo que pretendo (al menos yo) es mostrarle la mejor opcion para que pueda validar si un campo esta repetido o no... hay muchas formas (si alguien con mas capacidad que yo pudiera mostrarnos otra bienvenida)
por eso menciono que el While esta demas
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #25  
Antiguo 20-10-2011
negrokau negrokau is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 210
Poder: 14
negrokau Va por buen camino
Talking

Cita:
Empezado por oscarac Ver Mensaje
yo lo tengo mas o menos asi

Código Delphi [-]
procedure TfrmCatalogoArticulo.qryArticuloKODValidate( Sender: TField);
dmComedor.qryVerificaKodArticulo.Parameters.ParamByName('KOD').Value := Sender.Value;
dmComedor.qryVerificaKodArticulo.Open;
if not dmComedor.qryVerificaKodArticulo.IsEmpty then
begin
MessageDlg('Código ya creado', mtError, [mbAbort], 0);
dmComedor.qryVerificaKodArticulo.Close;
Abort;
end;
dmComedor.qryVerificaKodArticulo.Close;


como ubicas el ONvalidate?
en el query o tabla donde estas grabando la informacion le das doble click al componente y te salen los campos persistentes.. en el campos en el cual pretendes grabar el "codigo", busca en el object inspector.. el evento Onvalidate... ahi colocas el codigo para verificar si existe o no
hola oscarac, me podrias explicar un poco mejor como configurar? te lo agradeceria...
Responder Con Cita
  #26  
Antiguo 20-10-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola negrokau.

Una opción de búsqueda es mediante un while como intentaste en tu mensaje inicial:
Código Delphi [-]
var
  Found: Boolean;
begin
  query1.First;
  Found:= False;
  while not query1.Eof and not Found do
  begin
    Found:= cod_barra.Text = query1.FieldValues['cod_barra'];
    query1.Next;
  end;
  if not Found then
   guardar.Click;
  ...
Creo que el error en tu primer código, parte de la confusión que tenés con las estructuras de control.
Como yá te han dicho más arriba, una cosa es una estructura decisión (if/then/else) y otra una de iteracion (for, while, repeat) aunque las dos últimas puedan evaluar alguna condición.

La otra opción, más eficiente, es mediante una consulta SQL:
Código Delphi [-]
function ExisteCodigo(const Value: string): Boolean;
begin
  with TQuery.Create(nil) do
  try
    DatabaseName:= 'NOMBRE_DE_TU_BD';  // Alias (o Ruta a donde esta la tabla)
    SQL.Text:= 'SELECT * FROM TU_TABLA WHERE COD_BARRA = :DATO';  // Cambia 'TU_TABLA' por tu nombre de tabla
    ParamByName('DATO').AsString:= Value;
    Open;
    Result:= not IsEmpty;
    Close;
  finally
    Free;
  end;
end;
De esta manera tu código inicial queda reducido a:
Código Delphi [-]
  if not ExisteCodigo(cod_barra.Text) then
    guardar.Click;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #27  
Antiguo 22-10-2011
negrokau negrokau is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 210
Poder: 14
negrokau Va por buen camino
Talking

disculpame la ignorancia amigo... pero como nunca hice como esta en el ejemplo que me diste... en donde lo coloco la consulta?
Código Delphi [-]
function ExisteCodigo(const Value: string): Boolean;
begin
  with TQuery.Create(nil) do
  try
    DatabaseName:= 'C:\SGC v1.0\Database\SGC_v1.GDB';  // Alias (o Ruta a donde esta la tabla)
    SQL.Text:= 'SELECT * FROM FACTURAS WHERE COD_BARRA = ATO';  // Cambia 'TU_TABLA' por tu nombre de tabla
    ParamByName('DATO').AsString:= Value;
    Open;
    Result:= not IsEmpty;
    Close;
  finally
    Free;
  end;
end;
Responder Con Cita
  #28  
Antiguo 22-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.098
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Donde quieras, da igual.
Tan sólo recuerda que además deberás declarar la function en la sección private (arriba, al principio del código).

Código Delphi [-]
private
  function ExisteCodigo(const Value: string): Boolean;

Y ese código, esa function, la pones por ejemplo, al final del todo.
Responder Con Cita
  #29  
Antiguo 22-10-2011
negrokau negrokau is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 210
Poder: 14
negrokau Va por buen camino
Talking

lo estoy probando pero me salta este error:
Declaration expected but identifier 'private' found
algo no estoy haciendo bien creo....
Responder Con Cita
  #30  
Antiguo 22-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.098
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Dónde lo has puesto?.

El código, pega tu código, que no somos adivinos
_______________________________||
_______________________________\/
Responder Con Cita
  #31  
Antiguo 23-10-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola negrokau.

Declararlo como un método como te indica Casimiro es la mejor opción ya que no importa la posición donde ubiques el código de la función:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages,...;

type
  TForm1 = class(TForm)
    ...
  private
     function ExisteCodigo(const Value: string): Boolean;
  public
  end;

var
  Form1: TForm1;

implementation  {$R *.dfm}

// aca el resto de tu codigo

function TForm1.ExisteCodigo(const Value: string): Boolean;
begin
 with TQuery.Create(nil) do
  try
    DatabaseName:= 'C:\SGC v1.0\Database\SGC_v1.GDB';
    SQL.Text:= 'SELECT * FROM FACTURAS WHERE COD_BARRA =:DATO';
    ParamByName('DATO').AsString:= Value;
    Open;
    Result:= not IsEmpty;
    Close;
  finally
    Free;
  end;
end;

// o, si preferís aca el resto de tu codigo

end.

Otra opción es declararlo como función, pero para ello, la cabecera debe estar declarada antes del método o función que la invoque. Para asegurar el tiro, inmediatamente después a la declaración Implementation, de ese modo la función, tendrá alcance a todo código subyacente a ella:
Código Delphi [-]
...
Implementation

function ExisteCodigo(const Value: string): Boolean;
begin
  ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



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
TQuery (Query1->SQL->Add()) lmpadron C++ Builder 2 11-03-2009 17:59:37
¿¿Se puede Hacer?? NEG1414 C++ Builder 7 02-11-2008 22:13:10
Se puede hacer esto ??????? AMINOA2R Firebird e Interbase 2 21-10-2005 17:50:59
Se puede hacer esto en POO? adlfv OOP 8 26-09-2005 16:28:55
se puede hacer armando Conexión con bases de datos 6 20-05-2004 05:12:26


La franja horaria es GMT +2. Ahora son las 09:43:25.


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
Copyright 1996-2007 Club Delphi