PDA

Ver la Versión Completa : Error al Recorrer SQL se queda colgado


webmasterplc
17-02-2019, 19:40:46
Buenas mi consulta es la siguiente, necesito actualizar un precio de bolivares a dolares de forma masiva en un sistema de gestión, el fabricante nos proporciona una libreria que trae dos funciones una que e devuelve un precio y otra que la uso para enviar nuevos precios, como lo quiero hacer de forma masiva lo que hago es realizar una consulta a la base de datos y la recorro para enviar los parametros paso a paso pero el sistema se coloca en no responde y ala final no hace nada

la consulta es la siguente



begin;
with datosa2.Sqajuste do
begin
Close;
ParamByName('categoria').AsString:=listafpago.LookupValue; //aqui envio un parametro a la consulta sql
Open;
end;
if not datosa2.Sqajuste.IsEmpty then
while not datosa2.Sqajuste.Eof do
begin
codigo:=datosa2.Sqajuste.FieldByName('FI_CODIGO').AsString; //Asigno el codigo que le pasare a la funcion
LocalSt:=traercostostprecios(1,ComboPrecio.ItemIndex,codigo,EdtLote.Text,EdtRandom.Text); // La Salida es un String, separando los campos x el carácter ; (Punto y coma) trae 6 valores que coloco en un lisbox
if LocalST<>'' then
PrepareListBox(LocalST);
p1:=StrToCurr(ListBox1.Items[4]);
imp:=StrToCurr(ListBox1.Items[3]);
np1:=p1*StrToCurr(EdtTasa.Text);
nprecio:=CurrToStr(np1);
pfinal:=('1000,01;1000,02;'+nprecio+';0;0;0;0;0');
actualizarPrecio(0,ComboPrecio.ItemIndex,codigo,EdtLote.Text,EdtRandom.Text,pfinal);//esta es la funcion para actualizar precioa
end;
datosa2.Sqajuste.Next;
end;

webmasterplc
18-02-2019, 01:15:34
Replanteando la pregunta haciendo el analisis al codigo hice la siguiente prueba.

begin;
with datosa2.Sqajuste do
begin
Close;
ParamByName('categoria').AsString:=listafpago.LookupValue;
Open;
end;
begin
if not datosa2.Sqajuste.IsEmpty then
begin
codigo:=datosa2.Sqajuste.FieldByName('FI_CODIGO').AsString;
ShowMessage(CODIGO);
|end;
datosa2.Sqajuste.Next;
end;
end;

para verificar el recorrido y solo me da un mensaje con el prmer registro, aunque si mustro los datos de la consulta en un grid me muestra todos los registros.

Casimiro Notevi
18-02-2019, 01:24:25
Creo que necesitas leer esto (http://www.clubdelphi.com/foros/showthread.php?t=93348).

webmasterplc
18-02-2019, 03:39:35
Resuelto

if not datosa2.Sqajuste.IsEmpty then

while not datosa2.Sqajuste.Eof do
begin
//consultas y sentencias
datosa2.Sqajuste.Next; // este lo estaba dejando fuera y por ende no avanzaba gracias
end;

end;

Casimiro Notevi
18-02-2019, 10:20:17
Obviamente, no es eso, pues esa sentencia ya está puesta antes, según nos has mostrado en el código :)

webmasterplc
18-02-2019, 14:21:48
Buenas mi consulta es la siguiente, necesito actualizar un precio de bolivares a dolares de forma masiva en un sistema de gestión, el fabricante nos proporciona una libreria que trae dos funciones una que e devuelve un precio y otra que la uso para enviar nuevos precios, como lo quiero hacer de forma masiva lo que hago es realizar una consulta a la base de datos y la recorro para enviar los parametros paso a paso pero el sistema se coloca en no responde y ala final no hace nada

la consulta es la siguente



begin;
with datosa2.Sqajuste do
begin
Close;
ParamByName('categoria').AsString:=listafpago.LookupValue; //aqui envio un parametro a la consulta sql
Open;
end;
if not datosa2.Sqajuste.IsEmpty then
while not datosa2.Sqajuste.Eof do
begin
codigo:=datosa2.Sqajuste.FieldByName('FI_CODIGO').AsString; //Asigno el codigo que le pasare a la funcion
LocalSt:=traercostostprecios(1,ComboPrecio.ItemIndex,codigo,EdtLote.Text,EdtRandom.Text); // La Salida es un String, separando los campos x el carácter ; (Punto y coma) trae 6 valores que coloco en un lisbox
if LocalST<>'' then
PrepareListBox(LocalST);
p1:=StrToCurr(ListBox1.Items[4]);
imp:=StrToCurr(ListBox1.Items[3]);
np1:=p1*StrToCurr(EdtTasa.Text);
nprecio:=CurrToStr(np1);
pfinal:=('1000,01;1000,02;'+nprecio+';0;0;0;0;0');
actualizarPrecio(0,ComboPrecio.ItemIndex,codigo,EdtLote.Text,EdtRandom.Text,pfinal);//esta es la funcion para actualizar precioa
end;
datosa2.Sqajuste.Next;
end;

aqui la dejo por fuera de begin y el end y no avanza