PDA

Ver la Versión Completa : Actualizar campo de dbgrid


jorelivi
26-04-2007, 22:11:52
Tengo un Dbgrid con multiselect y solo quiero actualizar solo los que seleccione y me cambia todos los que muestra el DbGrid.

Solicito su ayuda y gracias por las indicaciones para llegar a este foro.:confused:


Codigo Delphi

if DbGrid1.SelectedRows.Count>0 then // por si solo seleccionan uno...
for I := 0 to DbGrid1.SelectedRows.Count-1 do
begin
DbGrid1.DataSource.DataSet.BookMark := DbGrid1.SelectedRows[I];
// Todo lo que tengas que hacer
If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
sQuery:='Update cuen01 Set Fecha_venc=Fecha_apli+:Dias';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(sQuery);
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
Query1.ExecSQL;
End;
end

Caral
26-04-2007, 22:17:20
Hola jorelivi
Primero lo voy a arreglar un poco para entenderlo mejor, es bueno que te fijes en la guia de estilo del foro.

if DbGrid1.SelectedRows.Count>0 then // por si solo seleccionan uno...
for I := 0 to DbGrid1.SelectedRows.Count-1 do
begin
DbGrid1.DataSource.DataSet.BookMark := DbGrid1.SelectedRows[i];
// Todo lo que tengas que hacer
If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
sQuery:='Update cuen01 Set Fecha_venc=Fecha_apli+ias';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(sQuery);
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
Query1.ExecSQL;
End;
end
Saludos

Caral
26-04-2007, 22:24:11
Hola
Bueno primero tengo varias dudas:
1: Por que usar una variable sQuery en doden pones la sentencia sql?
2: Dias me suena a date no a integer ?
En tal caso, para empezar lo haria asi:

if DbGrid1.SelectedRows.Count>0 then // por si solo seleccionan uno...
for I := 0 to DbGrid1.SelectedRows.Count-1 do
begin
DbGrid1.DataSource.DataSet.BookMark := DbGrid1.SelectedRows[i];
// Todo lo que tengas que hacer
If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
Query1.Close;
Query1.SQL.Text:= 'Update cuen01 Set Fecha_venc=Fecha_apli+ias';
Query1.ExecSQL;
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
End;
end

Con esto ya simplificamos un poco el codigo.
Vamos a por otra.
Saludos

Caral
26-04-2007, 22:31:22
Hola
Sigo con mis dudas, como sale modificado el codigo en el grid si usas un ExecSQL; para el Update, no lo entiendo.?
Recuerda que que grid es solo un visor de la tabla o tablas en si, creo que falta algo del codigo que estas haciendo, adicionalmente, me quedo corto con la pregunta.
Saludos

jorelivi
26-04-2007, 22:39:06
Mira Caral,

Este es mi codigo que tengo en un boton para actualizar dos situaciones diferentes dentro de un grid.

procedure TForm1.BitBtn2Click(Sender: TObject);
var sQuery:String;
var I:Integer;
begin
if DbGrid1.SelectedRows.Count>0 then // por si solo seleccionan uno...
for I := 0 to DbGrid1.SelectedRows.Count-1 do
begin
DbGrid1.DataSource.DataSet.BookMark := DbGrid1.SelectedRows[I];
// Todo lo que tengas que hacer
sQuery:='Update cuen01 Set Fecha_venc=Fecha_apli+:Dias';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(sQuery);
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
Query1.ExecSQL;
end
else
// Todo lo que tengas que hacer
If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
sQuery:='Update cuen01 Set Fecha_venc=Fecha_apli+:Dias Where cclie=:cclie';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(sQuery);
Query1.ParamByName('cclie').AsString:=Edit1.Text;
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
Query1.ExecSQL;
End;
end;

Espero esto sea mas claro, sigo en linea y gracias por tu tiempo

Caral
26-04-2007, 22:49:20
Hola
La verdad me queda un poco largo, pero para mi el problema esta en que haces un recorrido por el dbgrid, con esto, para mi le estas diciendo al programa que actualice todo lo que este en el grid, no se, me parece por ahi.
El codigo lo entiendo, entiendo mas o menos el problema, tambien creo que se puede reducir el codigo un poco, sera mejor para analizar.
Soy muy probablemente mas novato que tu, asi que no esperes mucho.:D
Saludos

Caral
26-04-2007, 23:16:45
Hola
La verdad esta linea no la entiendo, Por que?
DbGrid1.DataSource.DataSet.BookMark := DbGrid1.SelectedRows[i];
El DbGrid1, sera igual al DbGrid1.SelectedRows[i] ???
Me explicas?
Saludos

jorelivi
26-04-2007, 23:31:07
Segun yo, es para llevar el control de los registros seleccionados??? o no?

Caral
26-04-2007, 23:43:26
Hola
Tiene su lojica, la verdad desconozco esto del dbgrid multiselect, nunca lo he trabajado, es mas no se como trabaja.
Normalmente lo hago diferente, seguro me complico pero cuando quiero una seleccion grande de datos, los guardo en otra tabla, defino en otro grid si son los que en verdad queria o necesitava y luego, actualizo u otro.
En este tipo de programa uso mucho el PageControl y bueno me simplifico la vida asi.
Seguro hay muchas formas de matar moscas.:D
Siento no poder ayudarte con esto, tal vez algun otro forista.
Saludos

jorelivi
26-04-2007, 23:47:11
De ante mano te estoy agradecido por todo el tiempo que te tomaste, sigo en line para dicho problema, gracias y cuidate.

Oye de donde eres?

Caral
26-04-2007, 23:48:39
Hola
Soy Español y Vivo en Costa Rica.
Saludos

Caral
26-04-2007, 23:56:20
Hola
Roman, Puedes darnos una mano con esto?
Por Favor.
Saludos

egostar
27-04-2007, 00:12:26
Antes de meternos con tu proceso de actualización, lo que yo creo es que primero debes de saber que registro estas buscando para de esa manera hacer lo que quieres.

Para saber que registros has seleccionado realiza este proceso


procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: Integer;
begin
if DBGrid1.SelectedRows.Count > 0 then
begin
with DBGrid1.DataSource.DataSet do
begin
for i := 0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
ShowMessage(Table1.FieldByName('cclie').AsString);
// No se si estas usando un TTable o un TQuery.
// Cambialo a tu conveniencia.
end;
end;
end
end;


Una vez que obtengas esto ya puedes hacer lo que quieras.

Salud OS.

Caral
27-04-2007, 00:23:07
Hola egostar
Muy interesante el concepto, lo vi en el help de delphi pero me quede colgado pensando si era lo correcto o no, ya sabes, aprendiz.:D
Saludos Maestro.

jorelivi
27-04-2007, 00:39:40
Es correcto pero como actualizo los datos que estan despues del message, pues cuando no selecciono ningun registro del Grid si lo hace pero caso contrario me manda un error.
if DBGrid1.SelectedRows.Count > 0 then
begin
with DBGrid1.DataSource.DataSet do
begin
for i := 0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
ShowMessage(Query1.FieldByName('Docto').AsString);
// No se si estas usando un TTable o un TQuery.
// Cambialo a tu conveniencia.
sQuery:='Update Fecha_venc Set Fecha_venc=Fecha_apli+:Dias Where Docto=:Docto';
Query1.SQL.Add(sQuery);
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
Query1.ExecSQL;
end;
end;
end


Disculpen soy novato.

egostar
27-04-2007, 00:54:58
Bueno,

Aqui vamos a ver cual es tu problema.

En esta linea


sQuery:='Update Fecha_venc Set Fecha_venc=Fecha_apli+:dias Where Docto=:docto';


Fecha_venc=Fecha_apli+:dias, Esto no me hace sentido, como es que estas sumando Fechas_Apli + :dias, yo lo haria de otra forma

Usaremos otra variable que se llame Fechas donde vamos a realizar la suma de Fecha_Apli y dias.

Docto=:docto Aqui no estas pasando el parámetro docto, asi que hay otro error.

Veamos como lo soñe yo.


procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: Integer;
begin
if DBGrid1.SelectedRows.Count > 0 then begin
with DBGrid1.DataSource.DataSet do begin
for i := 0 to DBGrid1.SelectedRows.Count-1 do begin
GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i])); [/FONT] [FONT=Arial]
sQuery:='Update Fecha_venc Set Fecha_venc= :fecha Where Docto = :docto';
Query1.SQL.Add(sQuery);
//No se que tipo de dato es docto, asi que le pongo String
//y estoy usando Table1 porque nbo se que uses para mostrar el DbGrid
Query1.ParamByName('docto').AsString:= Table1.FieldByName('docto').AsString;
Query1.ParamByName('fecha').AsInteger:= Table1.FieldByName('Fecha_Apli').AsInteger + StrtoInt(Edit4.Text);
Query1.ExecSQL;
end;
end;
end
end;


Trata de hacerlo y nos cuentas.

Salud OS.

jorelivi
27-04-2007, 01:02:22
Que amable egostar, de verdad que quiero ser mas adelante parte de su foro en cuanto a aportar algunos conocimientos.

Sin embargo, ahora tengo mis detalles todavia.

Mi Fecha_apli, es un campo de mi archivo al cual le voy a sumar unos X numero de dias para tener en fecha_venc la fecha de vencimiento de un docto.

El ejemplo que me enviaste no lo digiero muy bien, aunque es muy bien explicado.

egostar
27-04-2007, 01:10:47
Bueno, estoy asumiendo que Fecha_Apli es parte del registro que se va a modificar y solo se le suman los dias que capturas en el Edit4.

Eso nos dará lo que quieres en la Fecha_Venc.

Seria bueno que nos dieras mas información de como esta tu programa para poder ser mas exactos en las respuestas.

Y que es lo que no digieres del ejemplo que te puse.

Salud OS.

jorelivi
27-04-2007, 01:24:22
Este es el procedimiento que estoy tratando de hacer funcionar para la actualizacion del campo Fecha_venc en base a una fecha_apli que es otro campo y a unos dias que se capturan en edit4.
Pero al dar el quiery1.execsql, me manda un error de Keyboar
Creo que ya casi esta pero falta grabar correctamente.

procedure TForm1.BitBtn2Click(Sender: TObject);
var sQuery:String;
var I:Integer;
begin
if DBGrid1.SelectedRows.Count > 0 then begin
with DBGrid1.DataSource.DataSet do begin
for i := 0 to DBGrid1.SelectedRows.Count-1 do begin
GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
sQuery:='Update Fecha_venc Set Fecha_venc= :fecha Where Docto = :docto';
Query1.SQL.Add(sQuery);
Query1.ParamByName('docto').AsString:= Query1.FieldByName('docto').AsString;
Query1.ParamByName('fecha').AsDateTime:= Query1.FieldByName('Fecha_Apli').AsDateTime + StrtoInt(Edit4.Text);
Query1.ExecSQL;
end;
end;
end
else
// Todo lo que tengas que hacer
If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
sQuery:='Update cuen01 Set Fecha_venc=Fecha_apli+:Dias Where cclie=:cclie';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(sQuery);
Query1.ParamByName('cclie').AsString:=Edit1.Text;
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
Query1.ExecSQL;
End;
End;

Caral
27-04-2007, 01:25:49
Hola
Bueno aqui me perdi, campo fecha integer?
Salio un table adicional?, bien dice Egostar, con que componente se presenta la informacion al grid.?

procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: Integer;
begin
if DBGrid1.SelectedRows.Count > 0 then begin
with DBGrid1.DataSource.DataSet do begin
for i := 0 to DBGrid1.SelectedRows.Count-1 do begin
GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i])); [/font] [font=Arial]
sQuery:='Update Fecha_venc Set Fecha_venc= :fecha Where Docto = :docto';
Query1.SQL.Add(sQuery);
//No se que tipo de dato es docto, asi que le pongo String
//y estoy usando Table1 porque nbo se que uses para mostrar el DbGrid
Query1.ParamByName('docto').AsString:= Table1.FieldByName('docto').AsString;
Query1.ParamByName('fecha').AsDate:= Table1.FieldByName('Fecha_Apli').AsDate + DateToStr(Edit4.Text);
Query1.ExecSQL;
end;
end;
end
end;
Me explican?
Saludos

egostar
27-04-2007, 01:32:40
Veo que estas haciendo esto


If xxxxx then
else
xxxx


No necesitas el else, en el primer bloque haces lo que necesitas, lo que faltaba es un table1.Refresh después del for, para que veas los cambios de inmediato en el DBGrid.

Así quedaría


procedure TForm1.BitBtn2Click(Sender: TObject);
var
sQuery:String;
I:Integer;
begin
if DBGrid1.SelectedRows.Count > 0 begin
with DBGrid1.DataSource.DataSet do begin
for i := 0 to DBGrid1.SelectedRows.Count-1 do begin
GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
sQuery:= 'Update Fecha_venc Set Fecha_venc= :fecha Where Docto = :docto';
Query1.SQL.Add(sQuery);
Query1.ParamByName('docto').AsString := Query1.FieldByName('docto').AsString;
Query1.ParamByName('fecha').AsDateTime := Query1.FieldByName('Fecha_Apli').AsDateTime + StrtoInt(Edit4.Text);
Query1.ExecSQL;
end;
Table1.Refresh;
end;
end;
end;


Lo del table1 lo puse porque no se con que estas ligando el DBGrid.

Salud OS.

egostar
27-04-2007, 01:40:59
Ya veo el problema, Caral, eres un analitico, resulta que Fecha es de tipo Date, por lo tanto lo que necesitamos es calcular la fecha de vencimiento y no los dias.

Bueno, pues veamos como se hace esto.

Tal vez cambiando esta linea


Query1.ParamByName('fecha').AsDateTime := Table1.FieldByName('Sectores').AsDateTime + StrtoInt(Edit4.Text);


Prueba con eso y nos comentas por favor.

Salud OS.

jorelivi
27-04-2007, 01:42:15
Perdon pero insisto,
cuando hace el Query1.ExecSQL; me manda el menaje de:
'Invalid Use of Keyboar ' Token:Update

egostar
27-04-2007, 01:48:30
Perdon pero insisto,
cuando hace el Query1.ExecSQL; me manda el menaje de:
'Invalid Use of Keyboar ' Token:Update

Pues que raro, hace rato vi que tenias algunas cosas raras en el codigo que posteaste, algo como class <kerword>, no se que pase, pero yo ya corri el código en una tabla ejemplo y funciona bien con el campo fecha

Salud OS.

Caral
27-04-2007, 01:51:15
Hola
Hay que ver el fondo del asunto:
El primer bloque dice que actualice la table con una sentencia sql que esta en sQuery, y ademas se le dice que la ejecute Query1.ExecSQL;
Vamos con el sengundo bloque:
Dice, de lo contrario: ELSE.
Use la misma variable sQuery y que ejecute denuevo.
La verdad no me parece logico o ejecuta o no.
Saludos

jorelivi
27-04-2007, 01:51:41
Bueno, de cualquier manera sus conocimientos me ayudaron mucho, le agradezco y si ven algo nuevo, please me avisan.

Que tengan una buena tarde.


See you

egostar
27-04-2007, 01:54:31
Hola
Hay que ver el fondo del asunto:
El primer bloque dice que actualice la table con una sentencia sql que esta en sQuery, y ademas se le dice que la ejecute Query1.ExecSQL;
Vamos con el sengundo bloque:
Dice, de lo contrario: ELSE.
Use la misma variable sQuery y que ejecute denuevo.
La verdad no me parece logico o ejecuta o no.
Saludos

Pues eso es lo que sobra, ya lo habia comentado.


// Todo lo que tengas que hacer
If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
sQuery:='Update cuen01 Set Fecha_venc=Fecha_apli+:Dias Where
cclie=:cclie';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(sQuery);
Query1.ParamByName('cclie').AsString:=Edit1.Text;
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
Query1.ExecSQL;
end;


Ese código esta de mas, no se requiere.

Salud OS.

Caral
27-04-2007, 02:02:08
Hola
Para mi anda por aqui la cosa:

procedure TForm1.BitBtn2Click(Sender: TObject);
var
I:Integer;
begin
Query1.Close;
Query1.SQL.Clear;
if DBGrid1.SelectedRows.Count > 0 then begin
with DBGrid1.DataSource.DataSet do begin
for i := 0 to DBGrid1.SelectedRows.Count-1 do begin
GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
Query1.SQL.Text:= 'Update Fecha_venc Set Fecha_venc= :fecha Where Docto = :docto';
Query1.ParamByName('docto').AsString:= Query1.FieldByName('docto').AsString;
Query1.ParamByName('fecha').AsDateTime:= Query1.FieldByName('Fecha_Apli').AsDateTime + StrtoInt(Edit4.Text);
Query1.ExecSQL;
end;
end;
end
else
// Todo lo que tengas que hacer
If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
Query1.SQL.Text:= 'Update cuen01 Set Fecha_venc=Fecha_apli + : Dias Where cclie= :cclie';
Query1.ParamByName('cclie').AsString:= Edit1.Text;
Query1.ParamByName('dias').AsInteger:= StrtoInt(Edit4.Text);
Query1.ExecSQL;
End;
End;
No se la verdad no me gusta el add. y veo muy repetido el codigo
Saludos

egostar
27-04-2007, 02:04:38
Yeap, Ahi esta el problema.

No es Query.SQL.Add(), debe ser Query.SQL.Text. Pero insisto no se requiere del else ya que si no selecciono registros no es necesario.

Bien mencionado Caral

Salud OS.

Caral
27-04-2007, 18:28:10
Hola
Gracias egostar,Bien mencionado Caral viniendo de ti, me siento alagado.
Saludos Maestro.

jorelivi
27-04-2007, 20:23:26
hola egostar and Caral, que tengan un bonito dia.

Sigo con mi problema para actualizar algunos datos, me tratare de explicar mejor:
Tengo UnDbGrid, el cual se actualiza por un Query1 esto me lo hace perfecto.
despues que me muestra los datos, quiero actualizar la fecha de vencimiento (FECHA_VENC) de acuerdo a la fecha de emicion (FECHA_APLI) mas los dias que sean (X), que se capturan en Edit4.TExt. mi pregunta es tengo que utilizar el mismo Query1 o tiene que ser otro y como lo hago?

egostar
27-04-2007, 20:29:48
Ahh

Ya veo

Entonces la respuesta a nuestra pregunta "Que usas para enlazar el DBGrid", es un Query.

Pues mi sugerencia es que uses otro query para realizar los cambios.

Del código que al final puso nuestro buen amigo Caral, Query1 debe ser el Query "nuevo" que será usado para la actualización.

Si tienes Query1 como el objeto que usas para enlazar al DBGrid, entonces cambialo por Query2 o el nombre que le pongas.

Solo necesitas agregar al final de la actualización:

Query1.Close;
Query1.Open;

Para que los cambios se vean reflejados en el DBGrid.

Salud OS.

jorelivi
27-04-2007, 20:37:17
Sorry egostar, este es mi codigo me ilustras por favor.
Son dos casos el for es para cuando selecciono del dbgrid que es donde esta el problema. El otro funciona bien que es cuando se quiere para todos los registros.

plese for your help me.:)

procedure TForm1.BitBtn2Click(Sender: TObject);
var sQuery, Querytrab:String;
var I:Integer;
begin
if DBGrid1.SelectedRows.Count > 0 then begin
with DBGrid1.DataSource.DataSet do begin
for i := 0 to DBGrid1.SelectedRows.Count-1 do begin
GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
QueryTrab:='Update cuen01 set Fecha_venc=Fecha_apli+:dias Where cclie= :cclie And Docto= :docto';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(Querytrab);
Query1.ParamByName('docto').AsString:= Query1.FieldByName('docto').AsString;
Query1.ParamByName('cclie').AsString:=Edit1.Text;
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
Query1.ExecSQL;
end;
{ Label5.Caption:='oy es:'+DateTimetoStr(Now);
sQuery:='Select * from cuen01 where cclie=:cclie and tipo_mov=1';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(sQuery);
Query1.ParamByName('cclie').AsString:=Edit1.Text;
Query1.Open;
Label2.Visible:=True;
Edit4.Visible:=True;
BitBtn2.Visible:=True;}
end;
end
Else
If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
sQuery:='Update cuen01 Set Fecha_venc=Fecha_apli+:Dias Where cclie=:cclie';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(sQuery);
Query1.ParamByName('cclie').AsString:=Edit1.Text;
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
Query1.ExecSQL;
End;
end;

egostar
27-04-2007, 20:46:50
No entiendo cual es tu problema, de hecho si lo hace bien en la segunda SENTENCIA SQL, deberia hacerlo igual en la primera.

Lo que veo diferente es que en una metes docto y en otra no.

Cual es el problema, te da error, no te actualiza?

En la propiedad Options del DBGrid debes de tener configurado dos cosas

dgRowSelect en True
dgMultiSelect en True

Salud OS.

jorelivi
27-04-2007, 20:56:20
no me esta actualizando la fecha de vencimiento segun el codigo.

las opciones del dbgrid estan en TRUE las dos. y al actualizar me manda un mensaje de "List Index out of Bounds (1)"

egostar
27-04-2007, 21:00:10
Creo ver el problema, como estas usando el mismo Query, se pierde la relación de los registros que estas seleccionando, yo te sugiero que uses otro Query para hacer la actualización, solo cambia en el código Query1 por Query2 o el nombre que tenga el nuevo Query.

Solo recuerda que después de actualizar, debes de cerrar y abrir el Query1 para que veas los cambios.

Salud OS.

jorelivi
27-04-2007, 21:03:34
Lo voy a intentar, sigo con ustedes y gracias.

Una duda como coloco una imagen para mi usuario y que se vea como los demas del foro. ??????

Caral
27-04-2007, 21:10:53
Hola
HUiiiii esto si que es mas complicado que tu problema, tienes que pertenecer a un grupo selecto muy selecto de foristas........ES BROMA.:D
Solo editas tu perfil y buscas editar avatar en el pones la foto, es facil.
Saludos

Caral
27-04-2007, 21:16:04
Hola
Segun entiendo el problema dices sigue estando en esta parte:

QueryTrab:='Update cuen01 set Fecha_venc=Fecha_apli+:dias Where cclie= :cclie And Docto= :docto';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(Querytrab);
Query1.ParamByName('docto').AsString:= Query1.FieldByName('docto').AsString;
Query1.ParamByName('cclie').AsString:=Edit1.Text;
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
Query1.ExecSQL;
Me dices si me equivoco.?
Pra mi el problema esta aqui, si es asi, verdad:
Query1.ParamByName('docto').AsString:= Query1.FieldByName('docto').AsString;
Se saca la informacion del mismo sitio donde se pide, es la misma, para mi curioso.
Saludos

jorelivi
27-04-2007, 21:35:06
Siiipp, ese es el detalle y no se como hacerlo, me ayudan.

egostar
27-04-2007, 21:40:20
Haber, yo sigo insistiendo, debes usar otro Query para la actualización, no puedes hacerlo sobre el mismo Query1.

Así debería de verse y no tendrias ningún problema.


for i := 0 to DBGrid1.SelectedRows.Count-1 do begin
GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
QueryTrab:='Update cuen01 set Fecha_venc=Fecha_apli+:dias Where cclie= :cclie And Docto= :docto';
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Add(Querytrab);
Query2.ParamByName('docto').AsString:= Query1.FieldByName('docto').AsString;
Query2.ParamByName('cclie').AsString:=Edit1.Text;
Query2.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
Query2.ExecSQL;
end;
Query1.Close;
Query1.Open;


Salud OS.

Caral
27-04-2007, 21:40:37
Hola jorelivi
Pues yo creo que ya Egostar te lo indico, tienes que trabajar con otro query adicional.
query1= ve informacion grid
qurey2= actualiza
La otra opcion es usar como indique text en vez de add, con el text se borra en contenida del query con add, pues eso se añade al query.
Saludos

jorelivi
27-04-2007, 22:06:54
Bueno, creo que ya les di mucha lata, solo espero que estos comentarios que hemos hecho sean contructivos para los demas por que no sabemos cuando ni donde, nos volveremos a encontrar.

Gracias por sus comentarios y diculpenme por lo torpe que he sido.:confused:


Gracias Egostar, eres muy paciente y de verdad un buen dia, lo has logrado una vez mas, dejando tus conocimientos en alguien mas.:)

Caral, que puedo decir, al igual que a Egostar, ¡¡¡¡ L o h a n l o g r a d o!!!!! y de verdad les estoy muy agradecido. aaahhh que mas les puedo decir.

Bye, Bye (Funciono)

egostar
27-04-2007, 22:17:30
Pues me da mucho gusto que hayas resuelto tu problema. Lo importante es poder aprender algo cada día.

Salud OS.

Caral
27-04-2007, 22:23:19
Hola
El que no aprende con maestros como tu Egostar, mejor se dedica a otra cosa.:D
Saludos