Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda en busqueda usando ADO (https://www.clubdelphi.com/foros/showthread.php?t=47745)

Victor Vega 06-09-2007 03:25:36

Ayuda en busqueda usando ADO
 
Hola como estan amigos programadores. tengo una duda, realmente ya me di por vencido y acudo en su ayuda::D
trabajo delphi 7 con sql server 7.. para la conexion use componente ado y para los procedimientos de guardar y eliminar usé adoquery, tambien se como actualizar. pero mi problema surge en lo siguiente:
quiero que cuando ingrese un dato en el edit (dni) me busque en la tabla datos si existe este registro, y si lo consigue me cargue el resto de sus datos en otros edits (nombre,apellido,etc..) necesito esto para poder decirle al procedimiento actualizar cuales seran afectados por tal procedimiento. por favor denme una idea..:o

Delphius 06-09-2007 03:57:55

Hola Victor Vega, bienvenido a clubdelphi.

Antes que nada, aprovechando de que eres nuevo en los foros, te aconsejo que te tomes unos minutos para que leas la guia de estilo, son algunos detalles a tener en cuenta para cuando intervengas y participes en estos foros.

Bueno, al grano.
Si estás empleando un ADOQuery, lo más común es lanzar una consulta SQL del tipo SELECT. Algo como esto:

Código SQL [-]
select * from TU_TABLA where TU_TABLA.DNI = DNI_A_BUSCAR

Una vez que lanzas la consulta, con la propiedad RecordCount obtienes la cantidad de registros afectados por dicha consulta. Con este valor debes comprobar que exista: es decir se debe cumplir lo siguiente:

Código Delphi [-]
MyQuery.RecordCount = 1

El DNI es único, por lo que si se consigue un registro, haz obtenido los valores correspondientes a la persona.
Ahora solo es cuestión de lanzar la consulta UPDATE con los valores adecuados asociando en la condición WHERE el mismo valor de filtrado. Es decir:

Código SQL [-]
update .... WHERE TU_TABLA.DNI = DNI_A_BUSCAR

Tal vez te sea útil ver el tema de lanzar consultas mediante parámetros: con realizar una búsqueda con el término ParambyName obtendrás resultados.

Saludos,

Victor Vega 06-09-2007 04:21:53

Gracias por la ayuda
 
Gracias por la ayuda.. si entiendo lo q me quieres decir en este caso.. pero lo q aun no capto es esto::)

la tabla datos contiene estos campos(dni,nombres,apellidos...)

en el edit (dni) introduzco el valor (01) edit.text:=01
cuando el me busque en la tabla datos este registro y lo halle haga algo asi:
nombres.text:=nombre
apellidos.text:=apellido
(osea q en cada edit correspondiente me muestre el campo indicado)
esto para que?
para que cuando vaya a editar este registro yo pueda hacer lo siguiente:
si el edit (nombres.txt) me mostro un dato ya guardado con el nombre Fulano yo pueda modificar ese edit y cambiar en vez de Fulano a Sultano.
Asi lograre que cuando guarde los cambios se hagan de la manera correcta.
no se si me explique bien.. pero en resumidas... necesito es saber como muestro los campos de la busqueda en los edits.....:o

Delphius 06-09-2007 04:38:10

Hola nuevamente,
Con respecto a lo que dices... lo daba por sentado al hecho de que si estabas empleando un query y que si sabes lanzar consultas actualizables es porque tenías presente la manera de como obtener los registros.
Para acceder al valor del campo debes valerte del FieldbyName. Por ejemplo:

Código Delphi [-]
EditNombre.Text := MiQuery.FieldbyName('NOMBRE').asString;

Siendo NOMBRE, el nombre del campo a capturar. Es necesario indicar el tipo adecuado del dato mediante asXXXX siendo XXXX el tipo a devolver. En este ejemplo, al tratarse de un texto, le indico AsString.

Espero que se entienda.
Si recién te estas iniciando, te aconsejo una lectura a La Cara Oculta de Delphi 4. La puedes conseguir en internet, es un buen libro (pdf) que trata el ABC de Delphi, sobre todo lo referente a base de datos.

Saludos,

Victor Vega 06-09-2007 05:12:15

Se presento un detalle
 
El detalle q se me presenta ahora es el siguiente:
Despues de que hago la consulta:

with QBuscar do
begin
SQL.Clear;
SQL.Text:='select * from Datos where Datos.cedula=(:cedula)';
Parameters.ParamByName('cedula').Value:=txtcedula.Text;
{Aqui deberia asignar los valores a los edits, pero no me aparece la funcion "FieldbyName"...}
end;
espero me ayudes y disculpes.....:(

Delphius 06-09-2007 05:47:04

Bueno... mira... no tengo Delphi a mano... y lo escribí al vuelo... Tu código debe ir más o menos así...

Código Delphi [-]
with MyQuery do
    begin
      SQL.Clear;
      SQL.Add('Select * from Datos where Datos.Cedula = :CedulaParam');
      // Suponiendo que Cedula es del tipo integer...
      MyQuery.Parameters.ParamByName('CedulaParam').Value := StrToInt(Edit1.Text);
      Open;

      if RecordCount = 1
         then begin
                // hay un registro... entonces muestro el contenido del
                // campo nombre
                Edit1.Text := FieldByName('Nombre').AsString;
              end;
    end;

Puede que tenga una fallas pero las cosas van por algo de este estilo.
EDITO:
Por cierto... sería oportuno decirte que uses las etiquetas [ DELHPI ], [/ DELPHI ] (sin espacios) de modo que el código que expones se vea mejor.
Saludos,

Victor Vega 06-09-2007 06:21:35

Operativo
 
Gracias amigo.. me sirvieron tus sugerencias y tu paciencia, si funciono muy bien... ahora seguire practicando. si tienes razon, soy algo nuevo en este lenguaje, mi fuerte siempre ha sido vb6 y .net. pero quiero conocer opciones aparte de microsoft jeje.... y la borland me esta agradando.. muchas gracias de antemano.:D:D


La franja horaria es GMT +2. Ahora son las 11:16:29.

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