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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-01-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Problema con una consulta hecha de 3 formas

Hola, tengo un problemón llevo 8 horas para hacer una consulta, la he intentado hacer de 3 formas distintas.

Primeramente utilizo la tabla texportar (contador,fecha,lectura,consumo) son sus campos.
Lo que pretendo es exportar datos a esta tabla mediante un query y lo que tiene que hacer la consulta es si el contador (que es la clave principal de la tabla) que pretendo introducir en la tabla texportar ya existe en esa tabla modifico sus datos (fecha,lectura,consumo) y si no existe los inserto. Necesito hacer la consulta de una vez para evitar la conexión repetida al servidor ya que la consulta está dentro de un bucle ó lazo.

Acontinuación os pongo el código de como la intentado hacer.Por cierto utilizo Firebird 1.5:

La primera opción por la que opté fue:
Código Delphi [-]
query.Close;
query.SQL.Add('replace texportar(contador,fecha,lectura,consumo)VALUES ('+datos.IBADOQ.fieldbyname('numero').text+',#'+FormatDateTime('mm/dd/yy',datos.IBADOQ.fieldbyname('fecha').asdatetime)+'#,'+datos.IBADOQ.fieldbyname('lectura').text+','+  datos.IBADOQ.fieldbyname('consumo').text+')');
query.ExecSQL;

Creo que no ha resultado porque el replace pertenece a MySql y no a SQL estandar,si no me equivoco.

Segunda forma:
Código Delphi [-]
query.SQL.Clear;
query.SQL.Add('insert into texportar(contador,fecha,lectura,consumo)values('+ datos.IBADOQ.fieldbyname('numero').text+',#'+FormatDateTime('mm/dd/yy',datos.IBADOQ.fieldbyname('fecha').asdatetime)+'#,'+datos.IBADOQ.fieldbyname('lectura').text+','+  datos.IBADOQ.fieldbyname('consumo').text+')on duplicate key (update fecha=#'+FormatDateTime('mm/dd/yy',datos.IBADOQ.fieldbyname('fecha').asdatetime)+'#, lectura='+datos.IBADOQ.fieldbyname('lectura').text+ ',consumo='+datos.IBADOQ.fieldbyname('consumo').text+')');
query.ExecSQL;

Esta opción creo que falla por lo mismo que la anterior porque el on duplicate key es de MySql

Tercera:
Código Delphi [-]
query.Close;
query.SQL.Text:='INSERT INTO texportar SELECT contador,fecha,lectura,consumo, (IF ((SELECT contador FROM texportar';
query.SQL.Text:=query.sql.Text+' WHERE contador<>'+datos.IBADOQ.fieldbyname('numero').text+')then';
query.SQL.Text:=query.sql.Text+' INSERT INTO texportar (contador,fecha,lectura,consumo)values('+datos.IBADOQ.fieldbyname('numero').text+'';
query.SQL.Text:=query.sql.Text+',#'+FormatDateTime('mm/dd/yy',datos.IBADOQ.fieldbyname('fecha').asdatetime)+'#,'+datos.IBADOQ.fieldbyname('lectura').text+'';
query.SQL.Text:=query.sql.Text+','+datos.IBADOQ.fieldbyname('consumo').text+')else UPDATE texportar'+'';
query.SQL.Text:=query.sql.Text+'SET fecha=#'+FormatDateTime('mm/dd/yy',datos.IBADOQ.fieldbyname('fecha').asdatetime)+'#';   query.SQL.Text:=query.sql.Text+',lectura='+datos.iBADOQ.fieldbyname('lectura').Text+',consumo='+dato  s.IBADOQ.fieldbyname('consumo').Text+' where contador='+ datos.IBADOQ.fieldbyname('numero').Text+')) from texportar';
query.Open;

Esta opción realmente no se porque falla ya que los if si son permitidos en Sql estandar.

Por favor, si laguien sabe como resolver esta consulta, ó si sabe otra forma de hacerla aunque sea partiendo la consulta en varias..

P.D:
datos.IBADOQ= corresponde a otro query de interbase ya que con el saco los datos que quiero exportar.

desde ya mismo , muchas gracias.
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 07:52:49.


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