Delphi - Ciclos para grabar en una base de datos

 
Vista:

Ciclos para grabar en una base de datos

Publicado por Alberto (6 intervenciones) el 27/05/2005 17:45:01
Tengo una duda. Tengo un ciclo FOR en el que uso la propiedad Table.Locate para localizar la clave primaria y actualizar ese registro.
Pero cuando tengo que actualizar muchos registros sale un error porque no localiza la clave. El codigo es el siguiente:

if Tbl.Locate('TarNumero;CupNumero;AgeNumero',
VarArrayOf([IntToStr(NroTar), NroCup, IntToStr(NroAge)]),[loCaseInsensitive]) then
begin
Tbl.Edit;
Tbl.Fields[3].AsString:= NroLiq;
Tbl.Fields[9].AsString:= 'COBRADO';
Tbl.Post;
end
else
Raise Exception.Create('Hubo un error grave en la base de datos. Por favor consulte a su proveedor');
TmrActualiz.Enabled:= False;

muchas veces muestra el raise. Como hago para que encuentre la clave primaria sin que salga el error????
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ciclos para grabar en una base de datos

Publicado por BigLuis (713 intervenciones) el 27/05/2005 18:58:55
Puedes utilizr SQL(y te lo recomiendo) =
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('UPDATE tala set campo1=:Valor1,Campo2=:Valor2 WHERE ClavePrimaria=:QueClave;');
Query.Parambyname('Valor1').asString(o lo que sea)=NroLiq;
Query.Parambyname('Valor2').asString(o lo que sea)='COBRADO';
Query.Parambyname('QueClave').asInteger(o lo que sea):=Numero;
Query.ExecSQL;
Si encuentra la clave primaria actualiza y si no, no pasa nada.
Piensa que pueden variar las propiedades y metodos dependiendo del tipo de TQUery que utilices pero basicamente es esto.
Puedes incluir en el ciclo FOR solamente el pase de parametros y ejecutarlos tantas veces como quieras.
Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: El problema es el Locate...

Publicado por Alberto (6 intervenciones) el 28/05/2005 14:21:56
Gracias por ayudarme, pero mi problema no es al actualizar, sino que el Table.locate no está encontrando la clave primaria, por ello ejecuta el raise. La clave primaria SI existe, pero no la encuentra. ¿Hay otra forma de preguntar si encuentra esa clave para recien actualizar???. Desde ya muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: El problema es el Locate...

Publicado por BigLuis (713 intervenciones) el 28/05/2005 16:42:32
Si entiendo bien lo que quieres, pues lo mismo pero con select
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SELECT ClavePrimaria from tabla WHERE ClavePrimaria=:QueClave;');
Query.Parambyname('QueClave').asInteger(o lo que sea):=Numero;
Query.Open;
if Query.Recordcount>0 then la ha encontrado.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar