Ver Mensaje Individual
  #1  
Antiguo 14-11-2007
Pitilingorri Pitilingorri is offline
Miembro
 
Registrado: ene 2007
Posts: 18
Reputación: 0
Pitilingorri Va por buen camino
Problema con el UpdateSQL

Tengo una base de datos en interbase, sobre la que trabaja una aplicacion en delphi cuatro.
La cuestion es que he añadido un campo nuevo a la tabla, y al hacer un update/insert me da problemas. Antes de añadir ese campo me hacia las actualizaciones sin ningun problema.

La tabla en cuestión, llamada obra, tiene la siguiente estructura:


CODIGOOBRA INTEGER NOT NULL, (Clave de la tabla)
CODIGOCLIENTE INTEGER, (Clave que hace referencia a una tabla llamada cliente)
NULA VARCHAR(1),
DIRECCION VARCHAR(60),
POBLACION VARCHAR(20),
CODIGOPOSTAL VARCHAR(5),
NUMEROTELEFONO1 VARCHAR(15),
NUMEROTELEFONO2 VARCHAR(15),
FECHAOBRA DATE,
MEDIRFECHA DATE,
MEDIRHORA VARCHAR(5),
MEDIDOPOR VARCHAR(20),
IVA FLOAT,
OBSERVACIONES VARCHAR(2000),
PROVINCIA VARCHAR(20),
CODIGOEMPRESACONT INTEGER (Este es el nuevo campo que he añadido)

Para añadir el nuevo campo, entre en el Update SQL editor y marco el campo "CodigoEmpresaCont" dentro de la lista de campos en la lista de Updatefields. Dentro de los campos DeleteSQL, InsertSQL y ModifySQL he puesto lo siguiente

INSERT:
insert into OBRA
(NULA, FECHAOBRA, CODIGOCLIENTE, DIRECCION, CODIGOPOSTAL,
POBLACION,
PROVINCIA, NUMEROTELEFONO1, NUMEROTELEFONO2, MEDIRFECHA,
MEDIRHORA,
MEDIDOPOR, IVA, CODIGOEMPRESACONT)
values
(:NULA, :FECHAOBRA, :CODIGOCLIENTE, IRECCION, :CODIGOPOSTAL,
:POBLACION,
:PROVINCIA, :NUMEROTELEFONO1, :NUMEROTELEFONO2, :MEDIRFECHA,
:MEDIRHORA,
:MEDIDOPOR, :IVA, :CODIGOEMPRESACONT)

DELETE:
delete from OBRA
where
CODIGOOBRA = :OLD_CODIGOOBRA

UPDATE
update OBRA
set
NULA = :NULA,
FECHAOBRA = :FECHAOBRA,
CODIGOCLIENTE = :CODIGOCLIENTE,
DIRECCION = IRECCION,
CODIGOPOSTAL = :CODIGOPOSTAL,
POBLACION = :POBLACION,
PROVINCIA = :PROVINCIA,
NUMEROTELEFONO1 = :NUMEROTELEFONO1,
NUMEROTELEFONO2 = :NUMEROTELEFONO2,
MEDIRFECHA = :MEDIRFECHA,
MEDIRHORA = :MEDIRHORA,
MEDIDOPOR = :MEDIDOPOR,
IVA = :IVA,
CODIGOEMPRESACONT = :CODIGOEMPRESACONT
where
CODIGOOBRA = :OLD_CODIGOOBRA

Siendo CodigoEmpresaCont el campo que he añadido

El SQL del query que he usado es el siguiente:

SELECT
OBRA.CodigoObra , OBRA.Nula,
OBRA.FechaObra ,
OBRA.CodigoCliente ,
CLIENTE.Nombre ,
OBRA.Direccion ,
OBRA.CodigoPostal , OBRA.Poblacion ,
OBRA.Provincia,
OBRA.NumeroTelefono1 ,
OBRA.NumeroTelefono2 ,
OBRA.MedirFecha ,
OBRA.MedirHora ,
OBRA.MedidoPor ,
OBRA.IVA,
OBRA.CodigoEmpresaCont,--->Campo que he añadido
CLIENTE.Direccion CDireccion,
CLIENTE.FechaAlta ,
CLIENTE.Poblacion CPoblacion,
CLIENTE.CodigoPostal CCodigoPostal, CLIENTE.Provincia CProvincia,
CLIENTE.DNINIF ,
CLIENTE.NumeroTelefono1 CNumeroTelefono1,
CLIENTE.NumeroTelefono2 CNumeroTelefono2,
CLIENTE.NumeroMovil CNumeroMovil,
CLIENTE.NumeroFax CNumeroFax


FROM
OBRA JOIN CLIENTE
ON ( OBRA.CodigoCliente = CLIENTE.CodigoCliente )

Y en el procedure QueryupdateRecord tengo lo siguiente:

var
AQuery: TQuery;
begin
AQuery := TQuery.Create(nil);
try
AQuery.DatabaseName := NombreBaseDatos;
case UpdateKind of
ukModify, ukInsert:
begin
if UpdateKind = ukModify then
AQuery.SQL.Text := UpdateSQL1.ModifySQL.Text
else
AQuery.SQL.Text := UpdateSQL1.InsertSQL.Text;

if DataSet.FieldByName('CodigoCliente').NewValue = Null then
AQuery.ParamByName('CodigoCliente').DataType := ftInteger
else
AQuery.ParamByName('CodigoCliente').AsInteger :=
DataSet.FieldByName('CodigoCliente').NewValue;

if DataSet.FieldByName('CodigoEmpresaCont').NewValue = Null then
AQuery.ParamByName('CodigoEmpresaCont').DataType := ftInteger
else
AQuery.ParamByName('CodigoEmpresaCont').AsInteger :=
DataSet.FieldByName('CodigoEmpresaCont').NewValue;



...

AQuery.ParamByName('Observaciones').Value :=
MemoObra.Lines.Text;


AQuery.ParamByName('CodigoObra').AsInteger :=
DataSet.FieldByName('CodigoObra').NewValue;


end;
ukDelete:
begin
AQuery.SQL.Text := UpdateSQL1.DeleteSQL.Text;
AQuery.ParamByName('CodigoObra').AsInteger :=
DataSet.FieldByName('CodigoObra').OldValue;
end;
end;
AQuery.ExecSQL;
UpdateAction := uaApplied;
finally
AQuery.Free;
end;
end;

He mirado algún hilo que habla sobre el tema, pero sigo sin ver donde esta el fallo...haber si vosotros podeis ayudar, porque yo no lo pillo. Gracias de antemano por vuestra ayuda.
Responder Con Cita