PDA

Ver la Versión Completa : modificar una tabla filtrada


marcos_0586
14-08-2010, 19:03:00
ante todo buenos dia, el motivo de este mensaje es para una vez mas pedir su ayuda, resulta que estoy trabajando con dos tablas la primera T_clientes y la segunda T_telcliente en donde T_telcliente puede guardar muchos telefonos del mismo cliente, el alta de clientes lo hice sin problemas, lo que no logro conseguir es modificar esos datos ya que cuanDo quiero buscarlos por medio de un Query ,me dice invalid field name este es my Query:
Código SQL [-] (http://www.clubdelphi.com/foros/#)Query1.SQL.clear; Query1.SQL.Add('SELECT Numero from T_telcliente where Cod_cliente=DBedit1.text'); Query1.active:=true; Query1.open;




El campo que estoy buscando (Numero) es una clave secundaria,de la tabla T_telcliente.
despues intente hacerlo con un filter y me muestra los datos que nesecito pero no me deja editarlos por lo tanto esa opcion no me sirve

PD:utilizo un DBedit porque es el que hace la relacion con la tabla T_cliente para traer sus datos, despues tengo un DBgrid relacionado con el Query y un DBnavigator para poder modificar los datos del telefono del cliente

bueno espero que me puedan dar una ayudita con esto, y muchas gracias

Caral
14-08-2010, 22:08:07
Hola
Da la impresion de que el campo Cod_Cliente es Numerico????.
El DBEdit es un componente NO un campo, por eso no puede estas en la sentencia sql como si lo fuera, para eso se necesita concatenar, trata asi:

Query1.SQL.Text:= 'SELECT Numero from T_telcliente where Cod_cliente= '+DBedit1.text;
Query1.active:=true;

Lo demas, esta sobrando.
Saludos

marcos_0586
15-08-2010, 14:45:51
Hola
Da la impresion de que el campo Cod_Cliente es Numerico????.
El DBEdit es un componente NO un campo, por eso no puede estas en la sentencia sql como si lo fuera, para eso se necesita concatenar, trata asi:
Código Delphi [-] (http://www.clubdelphi.com/foros/#)Query1.SQL.Text:= 'SELECT Numero from T_telcliente where Cod_cliente= '+DBedit1.text; Query1.active:=true;


Lo demas, esta sobrando.
Saludos



gracias caral por la ayuda, lo he probado,con el DBedit y con un edit pero me aparece un mensaje:type mismatch in expression.
El campo Cod_Cliente es tipo string porque no son solo numeros tambien tiene guiones

Caral
15-08-2010, 15:11:18
Hola
Me imagino que el dbedit tiene un query o table independiente del de esta sentencia.
Lo que dice el mensaje es que el tipo de dato no es correcto, lo que quiere decir que o no coincide o no lo encuentra pudiendo ser un null.
Saludos
PD: Que base de datos usas?

marcos_0586
15-08-2010, 15:43:04
hola caral, si, el DBedit esta relacionado con la tabla T_clientes y es el resultado de una busqueda echa en la tabla T_cliente, con respecto al error estoy seguro que es la opcion de que el tipo de datos es incorrecto ya que el valor que estoy buscando existe porque lo hice yo mismo, creo que es por la forma de agregar el dbedit al query ya que el campo a buscar existe y el campo Cod_cliente es tipo texto y el campo dbedit tambien. seguire buscando la forma de solucionar esto, gracias

Caral
15-08-2010, 20:35:32
Hola
Usa una variable y un parametro, tal vez ayude.
En el caso de los dbedit aveces molestan.
Saludos

marcos_0586
17-08-2010, 21:08:24
hola, el problema es que estoy buscando un dato que no es clave primaria, por eso me dice ese error, ahora bien, alguien me podria dar un ejemplo de como asignarle el indice a un campo de la tabla? o como buscar por campos que no sean indices? probe con IndexName o con locate pero el locate es con indices tambien. Saludos

Caral
17-08-2010, 21:22:40
Hola
A ver asi:

var Dato: String;
Begin
Dato:= DBEdit1.Text;
Query1.SQL.Text:= 'SELECT Numero from T_telcliente where Cod_cliente= :a';
Query1.Parameters[0].Value:= Dato;
Query1.active:=true;
Saludos
PD: Con que base de datos esta trabajando?

marcos_0586
17-08-2010, 22:49:27
trabajo con database desktop que viene con delphi7 (las tablas las hice en paradox 7)
ahora me aparece:
[Error] Unit8.pas(129): Undeclared identifier: 'Parameters'
[Error] Unit8.pas(129): Missing operator or semicolon
a no se que hacer, dejo el codigo a ver si se puede hacer algo para poder terminar con esto

procedure TForm8.Image1Click(Sender: TObject); var Dato: String;
var Dato: String;
begin
if form1.table4.findkey([Edit3.Text])= true then
begin
panel1.Visible:=true;
IF RadioButton1.Checked=true then
begin
Image2.Visible:=false;
Image3.Visible:=true;
DBLookupComboBox1.ReadOnly:=true;
DBEdit1.ReadOnly:=true;
DBEdit2.ReadOnly:=true;
DBEdit3.ReadOnly:=true;
dbgrid1.ReadOnly:=true;
Dato:= DBEdit1.Text;
Query1.SQL.Text:='SELECT Numero from T_telcliente where Cod_cliente=:a';
Query1.Parameters[0].Value:= Dato;
Query1.active:=true;
end
else
begin
Image2.Visible:=true;
Image3.Visible:=false;
DBLookupComboBox1.ReadOnly:=false;
DBEdit1.ReadOnly:=false;
DBEdit2.ReadOnly:=false;
DBEdit3.ReadOnly:=false;
dbgrid1.ReadOnly:=false;
end;
end
else
begin
showmessage('no existe el dni buscado');
edit3.Text:='';
end;
edit3.Text:='';
end;

Caral
17-08-2010, 23:02:08
Hola
El codigo es un poco lioso para entender lo que pretendes hacer.
La unica manera seria viendo el programa y tratar de correrlo.
De todos modos:
El error es simplemente por que no usa Parameters el query de la paleta BDE, lo que usa es Params.
Sigue con este a ver que errores te da:

procedure TForm1.Image1Click(Sender: TObject);
var Dato: String;
begin
if form1.table4.findkey([Edit3.Text])= true then
begin
panel1.Visible:=true;
IF RadioButton1.Checked=true then
begin
Image2.Visible:=false;
Image3.Visible:=true;
DBLookupComboBox1.ReadOnly:=true;
DBEdit1.ReadOnly:=true;
DBEdit2.ReadOnly:=true;
DBEdit3.ReadOnly:=true;
dbgrid1.ReadOnly:=true;
Dato:= DBEdit1.Text;
Query1.SQL.Text:='SELECT Numero from T_telcliente where Cod_cliente= :a';
Query1.Params[0].Value:= Dato;
Query1.active:=true;
end
else
begin
Image2.Visible:=true;
Image3.Visible:=false;
DBLookupComboBox1.ReadOnly:=false;
DBEdit1.ReadOnly:=false;
DBEdit2.ReadOnly:=false;
DBEdit3.ReadOnly:=false;
dbgrid1.ReadOnly:=false;
end;
end
else
begin
showmessage('no existe el dni buscado');
edit3.Text:='';
end;
edit3.Text:='';
end;
end;

Otra cosa que no entiendo es por que buscas la llave en el edit3 sin embargo buscas el dato en el dbedit1, no se que contienen.
Saludos

marcos_0586
17-08-2010, 23:18:59
Muchas gracias caral me salvaste,esta vez si funciono, porfin podre seguir con mi proyecto gracias.
Lo del edit y dbedit es porque: al ingresar al form el edit y una imagen son los únicos componente visible luego de presionar sobre la imagen de buscar aparece un panel1 que contiene el dbedit y otros componentes, el cual aparece directamente con el dato que deseo mostrar, es decir en el edit se ingresa un dato y en el dbedit solo lo muestra para corroborar que sean correctos los demas datos.