Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta de Actualizacion (https://www.clubdelphi.com/foros/showthread.php?t=76854)

orpare 30-11-2011 23:26:35

Consulta de Actualizacion
 
Buenas a todos,

Estoy realizando una consulta de actualizacion asi:

Código SQL [-]
UPDATE tbl_traslados, RESULTADO_S3 SET tbl_traslados.glosado = 'V', tbl_traslados.observacion_glosa = [RESULTADO_S3]![GLOSA]
WHERE (((tbl_traslados.TIPODOC_AC)=[RESULTADO_S3].[TIPO1]) AND ((tbl_traslados.num_doc_ac)=[RESULTADO_S3].[DOCU1]));
Pero presenta errores como puedo aplicarla en una Bd Firebird 2.1 con el manejador EMS Interbase

oscarac 30-11-2011 23:43:16

que errores aparecen?

orpare 30-11-2011 23:51:30

Gracias por responder.

fmSQLEditor.Query:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 21.
,.

Esto es lo que obtengo, cabe anotar que estoy migrando una BD de Access a Firebird y en access funciona bien

ecfisa 01-12-2011 00:31:38

Hola orpare, bienvenido a Club Delphi. Y como es costumbre, te invito a que leas nuestra guía de estilo.

Con respecto a tu consulta, probá de este modo:
Código SQL [-]
UPDATE TBL_TRASLADOS
  SET TBL_TRASLADOS.GLOSADO = 'V',
  TBL_TRASLADOS.OBSERVACION_GLOSA = (SELECT GLOSA FROM RESULTADO_S3
    WHERE TBL_TRASLADOS.TIPODOC_AC = TIPO1
      AND TBL_TRASLADOS.NUM_DOC_AC = DOCU1)
WHERE TBL_TRASLADOS.TIPODOC_AC IN (SELECT TIPO1 FROM RESULTADO_S3)
  AND TBL_TRASLADOS.NUM_DOC_AC IN (SELECT DOCU1 FROM RESULTADO_S3)

Un saludo. :)

orpare 01-12-2011 02:01:30

Cordial saludo y gracias por responder pero e da el siguiente error:


fmSQLEditor.Query:
multiple rows in singleton select.
multiple rows in singleton select.

Caral 01-12-2011 02:33:31

Hola
Varias cosas que hay que tener en cuenta cuando se pasa de access a firebird.
1- Access acepta corchetes [ ] firebird NO.
2- Si la consulta esta hecha en delphi firebird pedira doble comilla en la consulta de texto.
3- El concatenado en firebird se hace con palitos ||
Código Delphi [-]
UPDATE tbl_traslados, RESULTADO_S3 SET tbl_traslados.glosado = ''V'', tbl_traslados.observacion_glosa = RESULTADO_S3 || || GLOSA
WHERE (((tbl_traslados.TIPODOC_AC)= RESULTADO_S3.TIPO1) AND ((tbl_traslados.num_doc_ac)=RESULTADO_S3.DOCU1));
Saludos

orpare 01-12-2011 02:41:02

Cordial saludo,

Al aplicar de ese modo me da el siguiente error:


fmSQLEditor.Query:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 21.
,.

ecfisa 01-12-2011 04:26:09

Cita:

Empezado por orpare (Mensaje 420075)
Cordial saludo y gracias por responder pero e da el siguiente error:
fmSQLEditor.Query:
multiple rows in singleton select.
multiple rows in singleton select.

Hola.

En principio te diría que de este modo solucionas el error:
Código SQL [-]
UPDATE TBL_TRASLADOS
  SET TBL_TRASLADOS.GLOSADO = 'V',
  TBL_TRASLADOS.OBSERVACION_GLOSA = (SELECT FIRST 1 GLOSA FROM RESULTADO_S3
    WHERE TBL_TRASLADOS.TIPODOC_AC = TIPO1
      AND TBL_TRASLADOS.NUM_DOC_AC = DOCU1)
WHERE EXISTS(SELECT TIPO1 FROM RESULTADO_S3 WHERE TBL_TRASLADOS.TIPODOC_AC = TIPO1)
  AND EXISTS(SELECT DOCU1 FROM RESULTADO_S3 WHERE TBL_TRASLADOS.NUM_DOC_AC = DOCU1)
Pero no estoy seguro de que obtengas el resultado esperado por que estoy forzando con FIRST 1 a asignar el valor de la primera ocurrencia, ya que al parecer, existen varios registros en RESULTADO_S3 que satisfacen la condición:
Código SQL [-]
  TBL_TRASLADOS.TIPODOC_AC = RESULTADO_S3.TIPO1  AND TBL_TRASLADOS.NUM_DOC_AC = RESULTADO_S3.DOCU1

Mi duda es: ¿ Cual de los valores GLOSA existentes en RESULTADO_S3 debe asignarsele a OBSERVACION_GLOSA ?


Saludos.

orpare 01-12-2011 15:05:59

Saludos y Gracias por responder,

El tema es asi tengo un tabla Tbl_Traslados y otra tabla Resultados_s3 la estructura es la misma solo que la tabla Tbl_Traslados aloja los datos para realizar un reporte sin saber si se aprueba o no luego los resultados los recojo en la tabla Resultado_S3 el cual contiene el campo Glosa con el dato de por que no es valido ese registro entonces para corregirlo tengo que actualizar el campo observacion_glosa de la primera tabla y poner en esa misma un campo denominado Glosado a 'V' para realizar el resto

PD. Todo esta funcionando en Access Pero en Firebird esas consultas de actualización me están dando duro

Caral 01-12-2011 15:08:47

Hola
La mejor manera de comprobar he ir solucionando los problemas del cambio de access a firebird es colocar la consulta en el ibexpert.
Ahi se pueden hacer cambios e ir viendo que resultados da, asi lo hice yo cuando tambien me cambie.
Saludos

ecfisa 01-12-2011 15:54:52

Cita:

Empezado por Caral (Mensaje 420141)
Hola
La mejor manera de comprobar he ir solucionando los problemas del cambio de access a firebird es colocar la consulta en el ibexpert.
Ahi se pueden hacer cambios e ir viendo que resultados da, asi lo hice yo cuando tambien me cambie.
Saludos

Eso es una verdad muy grande ;).

Pasa con los lenguajes también, siempre es mejor pensar como solucionar el problema desde la nueva plataforma y no como traducirlo.

Un saludo.:)

orpare 01-12-2011 16:11:41

Pues estoy probando el Ibexpert pero como ya sabrán soy nuevo en esto de Firebird de igual forma tengo el EMS Interbase pero no encuentro como crear una consulta de actualización en vista diseño

ecfisa 01-12-2011 16:24:34

Hola orpare.

Para este caso no vas a tener diferencias entre el EMS o el IBExpert.

Revisá este enlace: Modificar un registro en Firebird, podés extraer las cadenas SQL y ejecutarlas desde el EMS o IBExpert como para ir probando.

Un saludo.


La franja horaria es GMT +2. Ahora son las 08:51:23.

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