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)
-   -   Busquedas utilizando ADO (https://www.clubdelphi.com/foros/showthread.php?t=45897)

tenporal 17-07-2007 21:48:52

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.

tenporal 17-07-2007 21:52:56

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.

Caral 17-07-2007 22:08:07

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

saldanaluis 17-07-2007 23:18:41

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.

vtdeleon 18-07-2007 01:30:59

Saludos

Cual es el inconveniente de usar Locate? Existen otras maneras de busqueda FindKey u otras con sentencias Sql.

Caral 18-07-2007 03:17:36

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

egostar 18-07-2007 03:28:40

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.

Caral 18-07-2007 03:34:41

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

egostar 18-07-2007 03:55:01

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.

tenporal 18-07-2007 04:59:45

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.

roman 18-07-2007 05:12:17

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

poliburro 18-07-2007 05:16:20

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.

:D Animo amigo.

Al González 18-07-2007 06:14:05

¡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. :)

tenporal 18-07-2007 08:46:14

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

Caral 18-07-2007 17:42:36

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

tenporal 19-07-2007 18:29:03

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

saldanaluis 19-07-2007 20:59:08

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

Caral 19-07-2007 21:21:08

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

kaeltas 31-03-2010 02:06:12

Cita:

Empezado por Caral (Mensaje 215049)
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!


La franja horaria es GMT +2. Ahora son las 12:08:24.

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