Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-07-2007
tenporal tenporal is offline
Miembro
 
Registrado: may 2007
Posts: 28
Poder: 0
tenporal Va por buen camino
Busquedas utilizando ADO

Saludos a tod@s, mi pregunta es la siguiente:

¿Habra otra opcion diferente a LOCATE para busquedas utilizando un ADOTABLE?


Código Delphi [-]
if Adotable1.Locate('cvemateria',mcvemateria,[]) = false then


begin
ShowMessage('La clave de la materia no existe')
end else


begin

Adotable1.edit;
end;










He estado buscando ejemplos pero no los he encontrado, se agradeceria la ayuda a esta pregunta.
Responder Con Cita
  #2  
Antiguo 17-07-2007
tenporal tenporal is offline
Miembro
 
Registrado: may 2007
Posts: 28
Poder: 0
tenporal Va por buen camino
Busquedas con ADO

Saludos a tod@s, mi pregunta es la siguiente:

¿Habra otra opcion diferente a LOCATE para busquedas utilizando un ADOTABLE?
Código Delphi [-]
if Adotable1.Locate('cvemateria',mcvemateria,[]) = false then
begin
ShowMessage('La clave de la materia no existe')
end else begin
Adotable1.edit;
end;

He estado buscando ejemplos pero no los he encontrado, se agradeceria la ayuda a esta pregunta.
Responder Con Cita
  #3  
Antiguo 17-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Yo lo hago por filtro asi:
Código Delphi [-]
procedure TFBuscaArticulo.Edit1Change(Sender: TObject);
var   Filtro : String;
begin
   If (Edit1.Text <> '') then
   begin
      Adotable1.Filtered := False;
      Filtro := 'cvemateria Like '''+Edit1.Text + '*'''
      Adotable1.Filter := Filtro;
      Adotable1.Filtered := True
   end
   else
  ShowMessage('La clave de la materia no existe')  
  Adotable1.Filtered := False;
end;
O tambien por sql, hay muchas formas de hacerlo.
Saludos
Responder Con Cita
  #4  
Antiguo 17-07-2007
Avatar de saldanaluis
saldanaluis saldanaluis is offline
Miembro
 
Registrado: nov 2006
Ubicación: Monterrey NL México
Posts: 122
Poder: 18
saldanaluis Va por buen camino
Caral,
Disculpa pero no entendí tu código... ¿Como es que con el Filter se puede saber si se tiene al menos un registro ó no se tiene ningun registro de respuesta, como para poner el mensaje de que no existe la clave de la materia?
En un .locate, al menos la respuesta es un true ó false, y con eso sabes si el locate fue exitoso o no, pero no veo como hacerlo con el filter.
Gracias por tu explicación.
Responder Con Cita
  #5  
Antiguo 18-07-2007
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Cual es el inconveniente de usar Locate? Existen otras maneras de busqueda FindKey u otras con sentencias Sql.
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #6  
Antiguo 18-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola saldanaluis
Tienes razon en cuestionarme, eso pasa por tratar de parecer un programador.
Con un filter, una sentencia sql, un locate, etc y una simple sentencia if o case, se puede hacer casi cualquier cosa, bueno, si eres programador, algo que no soy.
Por eso, tienes razon en cuestionar.
Saludos
Responder Con Cita
  #7  
Antiguo 18-07-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Caral
Hola saldanaluis
Tienes razon en cuestionarme, eso pasa por tratar de parecer un programador.
Con un filter, una sentencia sql, un locate, etc y una simple sentencia if o case, se puede hacer casi cualquier cosa, bueno, si eres programador, algo que no soy.
Por eso, tienes razon en cuestionar.
Saludos
Yo creo que tu respuesta es buena, porque además le comentaste que podía usar SQL o muchas otras formas, que yo sepa un filtro es eso, solo te muestra los registros que cumplan la comparación del filtro (0, 1 o más) y esa fué la pregunta incial.

Así que no veo el porque te sientas mal amigo Carlos.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 18-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Gracias por el animo Amigo, egostar.
La verdad, a veces creo que mejor ya no contesto mas hilos por que creo que lo estoy haciendo mal, ultimamente me siento un poco fuera de lugar, la edad quizas.
Pero lo que importa en realidad es el apoyo y amistad de personas como tu, gracias.
Saludos
Responder Con Cita
  #9  
Antiguo 18-07-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por saldanaluis
Caral,
Disculpa pero no entendí tu código... ¿Como es que con el Filter se puede saber si se tiene al menos un registro ó no se tiene ningun registro de respuesta, como para poner el mensaje de que no existe la clave de la materia?
En un .locate, al menos la respuesta es un true ó false, y con eso sabes si el locate fue exitoso o no, pero no veo como hacerlo con el filter.
Gracias por tu explicación.
Solo para responder a tu cuestionamiento, usando filter como te lo decia nuestro amigo Carlos, puedes validar de esta forma:

Código Delphi [-]
ADOTable1.Filter = 'campo = algo';
if ADOTable1.RecordCout > 0 then begin
  //Hay al menos un registro
end
else begin
         //NO hay registros con ese filtro
end;

Con eso puedes saber si fué exitoso o no.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #10  
Antiguo 18-07-2007
tenporal tenporal is offline
Miembro
 
Registrado: may 2007
Posts: 28
Poder: 0
tenporal Va por buen camino
Mas opciones para buscar

Gracias por responder a este hilo, mas que nada el codigo que coloque al inicio del hilo, era para conocer si habia mas formas de validar cuando se esta insertando en una tabla que tiene un indice primario y que muestra la informacion en un campo dbedit, ya que si se trata de agregar una clave que ya existe en la tabla, manda un mensaje de error.

Caral, a lo mejor no me explique bien cuando puse codigo, se supone que tienes un boton para agregar un nuevo registro, pero antes de darle el
Código Delphi [-]
 adotable1.insert
Ya que inserta un registro en blanco y luego manda el error de excepcion, por eso debo verificar antes en la tabla si no existe una clave igual que la que se quiere introducir en ese momento, lo que se dice validar la insercion.

En alguna parte vi que se podia utilizar la funcion SEEK, pero no se como se utiliza en delphi con los ADOTABLE.

De antemano gracias por su ayuda.
Responder Con Cita
  #11  
Antiguo 18-07-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si quieres verificar la existencia de una clave antes de la inserción, quizá lo más adecuado sería una consulta SQL del estilo:

Código SQL [-]
select count(clave) from tabla
where clave = clave_a_buscar

y examinar si el valor del registro que te regresa es mayor que cero. Por otra parte, quizá quieras considerar que el error que obtienes no es "malo", a fin de cuentas es otra manera de verificar lo mismo, sólo que lo hace a posteriori.

Como lo propones es:

Código:
IF ExisteRegistro THEN
  MuestraError
ELSE
  InsertaRegistro
De la otra forma es:

Código:
InsertaRegistro;
IF RegistroDuplicado THEN
  MuestraError;
O sea, virtualmente es lo mismo, lo que cambia es el momento en que se controla el error. Además, en este caso, quien hace la verificación es el servidor, y normalmente será más eficiente.

// Saludos
Responder Con Cita
  #12  
Antiguo 18-07-2007
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por Caral
Hola
Gracias por el animo Amigo, egostar.
La verdad, a veces creo que mejor ya no contesto mas hilos por que creo que lo estoy haciendo mal, ultimamente me siento un poco fuera de lugar, la edad quizas.
Pero lo que importa en realidad es el apoyo y amistad de personas como tu, gracias.
Saludos

Pero amigo caral, para nada debes sentirte fuera de lugar, al contrario, tus aportaciones son tan valiosas como las de cualquiera de nosotros.

Animo amigo.
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #13  
Antiguo 18-07-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Hola a todos!

Caral: En lo personal, tus intervenciones me parecen de lo más sensatas. Tampoco debe uno tomarse los comentarios de otros en plan negativo. Confío en que te seguiremos viendo por estos rumbos.

Un abrazo positivo.

Al González.
Responder Con Cita
  #14  
Antiguo 18-07-2007
tenporal tenporal is offline
Miembro
 
Registrado: may 2007
Posts: 28
Poder: 0
tenporal Va por buen camino
manejo de indices en delphi 7

Gracias por sus comentarios,

Cita:
Originalmente escrito por Roman
virtualmente es lo mismo, lo que cambia es el momento en que se controla el error. Además, en este caso, quien hace la verificación es el servidor, y normalmente será más eficiente.
Al inicio tuve problemas con Access, ya que al ejecutar adotable1.insert, mandaba un mensaje de error, al querer insertar una llave duplicada, en tu comentario indicas que el servidor debe verificar la informacion que se introduce, ¿como la realiza si tengo en una forma 3 dbedit, el primero maneja el campo llave del registro, utilizando adotable, para que no me ocurra un error de duplicidad en la llave del registro al ejecutar el insert ?

por otra parte, ¿solo se puede utilizar adotable.locate para localizar registros?
¿no existe otra funcion, como por ejemplo seek? ya que en delphi 7 me marca error al querer utilizar adotable.findkey? no me acuerdo bien en este momento pero lo ultimo era la palabra key.


Gracias por sus comentarios
Responder Con Cita
  #15  
Antiguo 18-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Gracias por los comentarios de apoyo, me hacen sentir que si aporto algo, se que me equivoco, pero, quien no.
No logro entender bien lo que busca hacer Temporal, se habla de una llave duplicada, pero tambien de insertar un registro, me parece.
Bueno, si es un asunto de tratar de insertar un registro y hacer la comprobacion de que no este repetido, aqui tienes un pedacito de un codigo de mi programa que hace eso, analizalo, tal vez sea lo que buscas.
Código Delphi [-]
procedure TFSelCodigo.BitBtn1Click(Sender: TObject);
begin
   If Edit1.Text <> '' then
   Begin
     AdoQuery1.Parameters[0].Value := Edit1.Text;
     AdoQuery1.Active := true;
     IF Adoquery1CodParte.AsString = Edit1.Text then
     MessageDlg('Código ya existe, favor seleccionar otro',mtError,[mbOK],0)
     else Begin
            Codigo:= Edit1.text;
            Cancelar:=False;
            Close;
          end;
     AdoQuery1.Active := false;
   end
   else MessageDlg('El código no debe estar en blanco, si desea cancelar presione escape.',mtError,[mbOK],0)
end;
Espero que te sirva aunque sea para aprender algo nuevo.
Saludos
Responder Con Cita
  #16  
Antiguo 19-07-2007
tenporal tenporal is offline
Miembro
 
Registrado: may 2007
Posts: 28
Poder: 0
tenporal Va por buen camino
Saludos a tod@s,
Cita:
Originalmente escrito por Caral
No logro entender bien lo que busca hacer Temporal, se habla de una llave duplicada, pero tambien de insertar un registro, me parece.
Bueno, si es un asunto de tratar de insertar un registro y hacer la comprobacion de que no este repetido
Hola caral, como indique anteriormente se trata de validar que no se pueda introducir un registro con una clave que ya exista en la b.d., para ser mas especifico, estoy mostrando los datos en campos dbedit, y cuando se de click en el boton agregar, verifique esa condicion.

Anteriormente Roman, comento que se podia dejar que sea el servidor el que se encargue de manejar los campos llave, pero no se como implementarlo, actualmente estoy manejando access, como manejador de b.d.

De antemano, gracias por sus comentarios
Responder Con Cita
  #17  
Antiguo 19-07-2007
Avatar de saldanaluis
saldanaluis saldanaluis is offline
Miembro
 
Registrado: nov 2006
Ubicación: Monterrey NL México
Posts: 122
Poder: 18
saldanaluis Va por buen camino
Aclaración a Caral y a todos los miembros

Primero que nada una disculpa para nuestro amigo Caral por haber sonado muy negativo.
Lo que pasa es que realmente no sabía como hacer lo que se buscaba y no entendí como se lograba con el código que muy amablemente nos proporcionó Caral. Realmente yo soy el que no es programador y como quiero aprender pues trato de entender el código que me llega a la mano.
Como pueden ver, soy relativamente nuevo e inclusive no creo yo tener buenas respuestas para los compañeros del foro, pero lo que si tengo son muchas preguntas!!!
Espero seguir contando con el favor de sus respuestas.
Luis
Responder Con Cita
  #18  
Antiguo 19-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola saldanaluis
Para nada las disculpas, lo que dije es totalmente cierto, no soy programador y aunque trato de ayudar, muchas, pero muchas veces me equivoco, por eso dije que hacias bien en dudar de mi codigo, que de paso no ha terminado de eliminar las dudas de temporal.
No te preocupes de mas, y en cuanto a ayudarte, con mucho gusto, si esta a mi alcance te haré ver por lo menos algo nuevo, seguro aprenderemos mas todos, aqui hay muchos maestros en esto.
Saludos
Responder Con Cita
  #19  
Antiguo 31-03-2010
Avatar de kaeltas
kaeltas kaeltas is offline
Miembro
 
Registrado: abr 2008
Posts: 22
Poder: 0
kaeltas Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Yo lo hago por filtro asi:
Código Delphi [-]procedure TFBuscaArticulo.Edit1Change(Sender: TObject); var Filtro : String; begin If (Edit1.Text <> '') then begin Adotable1.Filtered := False; Filtro := 'cvemateria Like '''+Edit1.Text + '*''' Adotable1.Filter := Filtro; Adotable1.Filtered := True end else ShowMessage('La clave de la materia no existe') Adotable1.Filtered := False; end;

O tambien por sql, hay muchas formas de hacerlo.
Saludos
Mil Mil Mil Mil Gracias este pedazo de codigo me ayudo muchisisimo, gracias gracias gracias gracias, enserio gracias por esta pagina y gracias a esta comunidad, gracias a todos los que aportan su granito de arena enserio mil gracias.

aqui les pongo un cacho de mi codigo que hice usando esto:

Código:
procedure TForm1.Label18Click(Sender: TObject);
var   Filtro : String;
begin
Filtro := 'Descripcion=''Short'' and Estilo Like '''+'22mn'+ '*''';
AdoTable1.Filter := Filtro;
Adotable1.Filtered := True;
end;
Como pueden ver, pueden hacer lo que quieran con las sentencias, en mi caso es una BD en mysql y esto me deja filtrar las tablas a placer :P

Gracias!
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
SQL utilizando parametros gaps2k SQL 5 28-05-2007 20:31:35
Utilizando el locate alcides Varios 2 06-09-2006 23:41:22
Error utilizando DataSet Coco_jac Conexión con bases de datos 2 13-04-2006 00:12:35
Utilizando un Actionlist Carlos Arevalo OOP 5 13-09-2003 22:14:56
Utilizando InstallShield... apunto Conexión con bases de datos 1 29-05-2003 22:46:33


La franja horaria es GMT +2. Ahora son las 01:30:17.


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