Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con Procedimiento (https://www.clubdelphi.com/foros/showthread.php?t=62204)

Sr.Scorpion 10-12-2008 18:36:30

Problema con Procedimiento
 
Hola:

Tengo el siguiente procedimiento al cual le paso como parametros dos ADOTables y me esta dando un error (Informacion de columna clave insuficiente o incorrecta; demasiadas filas afectadas por la actualizacion) realmente no se el pq... me podrian ayudar con esto ?

Código Delphi [-]
procedure TMain.UpdateNames(TOrig, TDest: TADOTable; Flag: Integer);
var
Codigo: string;
begin
ShowProgress.Show;
ShowProgress.Caption:='Actualizando nombres...';
ShowProgress.ProgressBar1.Position:=0;
ShowProgress.ProgressBar1.Max:= TDest.RecordCount;
TDest.First;
while not TDest.Eof do
begin
TOrig.First;
 while not TOrig.Eof do
 begin
  If Flag = 0 Then
   Codigo:= '0' + TOrig.FieldByName('Codigo').AsString
  else
   Codigo:= TOrig.FieldByName('Codigo').AsString;
    If ((TDest.FieldByName('Codigo').AsString = Codigo)) and ((TDest.FieldByName('Nombre').AsString <> TOrig.FieldByName('Nombre').AsString) or (TDest.FieldByName('Direccion').AsString <> TOrig.FieldByName('Direccion').AsString))Then
     begin
      TDest.Edit;
      If TDest.FieldByName('Direccion').AsString <> TOrig.FieldByName('Direccion').AsString Then
         TDest.FieldByName('Direccion').AsString:= TOrig.FieldByName('Direccion').AsString;
      If TDest.FieldByName('Nombre').AsString <> TOrig.FieldByName('Nombre').AsString Then
         TDest.FieldByName('Nombre').AsString:= TOrig.FieldByName('Nombre').AsString;
       TDest.Post;
      break;
     end
    else
     TOrig.Next;
 end;
ShowProgress.ProgressBar1.Position:= TDest.RecNo;
ShowProgress.ProgressBar1.Repaint;
ShowProgress.Refresh;
Main.Repaint;
TDest.Next;
end;
TDest.First;
TOrig.First;
ShowProgress.Close;
end;

La llamada al procedimiento es

Código Delphi [-]
Main.UpdateNames(Main.ADOExtensiones_Libres, Main.ADOEstad_Table,0);

Saludos y gracias

droguerman 10-12-2008 18:57:51

Ese problema se da cuando tienes 2 o más filas con los mismos datos y el motor de SQL no sabe cual afectar. Puede ser mejor usar una sentencia SQL para actualizar los valores

Sr.Scorpion 10-12-2008 19:17:47

Tienes alguna idea de como seria la sentencia SQL ?

Saludos

poliburro 10-12-2008 20:50:59

si nos proporcionas el DDL de tus tablas podríamos ayudarte con la consulta de actualización. Nos ayudará de igual manera que nos indiques el motor de base de datos que utilizas.

saludos

Sr.Scorpion 10-12-2008 20:54:44

Yo uso ADOTables con Delphi 6.0 y la BD es una mdb de Access

Saludos


La franja horaria es GMT +2. Ahora son las 20:03:13.

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