Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-11-2007
Pitilingorri Pitilingorri is offline
Miembro
 
Registrado: ene 2007
Posts: 18
Poder: 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
  #2  
Antiguo 14-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Faltaría el campo persistente del Query.

doble clic sobre el componente TQuery, y en la ventana que se abre, boton derecho y Add Field, saldrá el nuevo campo de empresa, lo seleccionas y botón Add.

No es tu caso, pero en futuras ocasiones, puede que no salga ningún campo nuevo, en ese caso, en delphi, pones el database.Connected a False, en el inspector de objetos, así como el transaction, después, vuelves al principio.

Espero sea eso, porque lo demás está perfecto.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 14-11-2007 a las 14:07:13.
Responder Con Cita
  #3  
Antiguo 14-11-2007
Pitilingorri Pitilingorri is offline
Miembro
 
Registrado: ene 2007
Posts: 18
Poder: 0
Pitilingorri Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Faltaría el campo persistente del Query.

doble clic sobre el componente TQuery, y en la ventana que se abre, boton derecho y Add Field, saldrá el nuevo campo de empresa, lo seleccionas y botón Add.

No es tu caso, pero en futuras ocasiones, puede que no salga ningún campo nuevo, en ese caso, en delphi, pones el database.Connected a False, en el inspector de objetos, así como el transaction, después, vuelves al principio.

Espero sea eso, porque lo demás está perfecto.

Saludos
Ante todo gracias por tu pronta respuesta. He mirado lo del TQuery, y no me sale el nuevo campo de empresa...de todos modos, he mirado el Fields Editor del TQuery y el campo si que esta incluido, por lo que no parece que ese sea el problema.

Parece que tendre que seguir buscando hasta encontrar la solución, o a alguien se le ocurra una
Responder Con Cita
  #4  
Antiguo 16-11-2007
Pitilingorri Pitilingorri is offline
Miembro
 
Registrado: ene 2007
Posts: 18
Poder: 0
Pitilingorri Va por buen camino
Thumbs up

Problema solucionado, tal como decia Lepe estaba todo perfecto...salvo una puñetera coma que me faltaba en una query, de la que no me habia dado cuenta al tener capturado el error. Vamos, que si soy más tonto nazco botijo . En fin, por lo menos esta cagadita me ha valido para leerme de cabo a rabo todo lo relativo al UpdateSQL que habia en este y en otros foros, y aprender más sobre este componente que no habia usado antes.

Un saludo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
UpdateSQL Pekador MySQL 4 26-09-2007 23:02:45
updateSQL mjjj Conexión con bases de datos 6 03-05-2007 02:40:33
control UpdateSQL con ADO? FlacoNet Conexión con bases de datos 3 28-03-2007 17:27:27
Componente Updatesql ebeltete SQL 6 24-06-2004 19:09:43
UpdateSQL y CachedUpdates fjolivares Conexión con bases de datos 2 11-03-2004 20:49:02


La franja horaria es GMT +2. Ahora son las 22:54:54.


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
Copyright 1996-2007 Club Delphi