Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-10-2020
serhasae serhasae is offline
Miembro
 
Registrado: jun 2004
Ubicación: España
Posts: 117
Poder: 20
serhasae Va por buen camino
Código Delphi [-]
CAsmm.Active:=False;
CAsmm.SQL.Clear;

CAsmm.SQL.Text:='INSERT INTO ASM_MASIVO '+
           'SELECT DISTINCT C.*,C.TNETO AS T_NETO,C.PESO_FAC AS T_PESO_FAC,'+
           'T.PRECIO AS TARIFA FROM COUTIN AS C, TASM AS T '+
           'WHERE T.AGENCIA=:AG AND T.DESTINO=:AS AND '+
           '(C.PESO_FAC>=T.PMIN AND C.PESO_FAC<=T.PMAX) AND '+
           '(C.ESCALADO>=T.EMIN AND C.ESCALADO<=T.EMAX);';


CAsmm.Parameters.ParamByName('AG').Value:='ASMMAS';
CAsmm.Parameters.ParamByName('AS').Value:='NAP';

CAsmm.Prepared:=True;



   if (CAsmm.ExecSQL=0) then
       Begin
  MessageDlg ('Error al Intentar Crear Asm Masivo', mtError,
                  [mbOK], 0);
       sw:=false;
       end;

Se que la consulta esta bien, la tiro directamente desde access y me la devuelve correctamente. Se que el problema es el ExecSql, tambien he probado a cerrar las tablas antes de llamar a esta consulta, me tiene loco proque a veces lo hace correctamente y a veces no, no entiendo el porque.

Tambien he probado a crear la consulta en access que funciona y borrar la tabla y crearla con:

CAsmm.Close;
CAsmm.SQL.Clear;
CAsmm.SQL.Text:='DROP TABLE ASM_MASIVO';
CAsmm.ExecSQL;

CAsmm.Close;
CAsmm.SQL.Clear;
CAsmm.SQL.Text:='SELECT * INTO ASM_MASIVO FROM (SELECT * FROM CASM_MASIVO);';
CAsmm.ExecSQL;


No lo hace tampoco.

Gracias a todos.

Última edición por serhasae fecha: 22-10-2020 a las 23:31:19.
Responder Con Cita
  #2  
Antiguo 23-10-2020
serhasae serhasae is offline
Miembro
 
Registrado: jun 2004
Ubicación: España
Posts: 117
Poder: 20
serhasae Va por buen camino
Código Delphi [-]
CAsmm.Active:=False;
CAsmm.SQL.Clear;

CAsmm.SQL.Text:='DELETE * FROM ASM_MASIVO; ';

CAsmm.Prepared:=True;

 if CAsmm.ExecSQL=0 then
    Begin
     MessageDlg ('Error al Intentar Borrar Asm Masivo', mtError,
                 [mbOK], 0);
     sw:=false;
    end;


CAsmm.Active:=False;
CAsmm.SQL.Clear;

CAsmm.SQL.Text:='INSERT INTO ASM_MASIVO '+
           'SELECT DISTINCT C.*,C.TNETO AS T_NETO,C.PESO_FAC AS T_PESO_FAC,'+
           'T.PRECIO AS TARIFA FROM COUTIN AS C, TASM AS T '+
           'WHERE T.AGENCIA=:AG AND T.DESTINO=:AS AND '+
           '(C.PESO_FAC>=T.PMIN AND C.PESO_FAC<=T.PMAX) AND '+
           '(C.ESCALADO>=T.EMIN AND C.ESCALADO<=T.EMAX);';


CAsmm.Parameters.ParamByName('AG').Value:='ASMMAS';
CAsmm.Parameters.ParamByName('AS').Value:='NAP';

CAsmm.Prepared:=True;



   if (CAsmm.ExecSQL=0) then
       Begin
  MessageDlg ('Error al Intentar Crear Asm Masivo', mtError,
                  [mbOK], 0);
       sw:=false;
       end;

Se que la consulta esta bien, la tiro directamente desde access y me la devuelve correctamente. Se que el problema es el ExecSql, tambien he probado a cerrar las tablas antes de llamar a esta consulta, me tiene loco proque a veces lo hace correctamente y a veces no, no entiendo el porque.

Tambien he probado a crear la consulta en access que funciona y borrar la tabla y crearla con:

Código Delphi [-]
 CAsmm.Close;
  CAsmm.SQL.Clear;
  CAsmm.SQL.Text:='DROP TABLE ASM_MASIVO';
  CAsmm.ExecSQL;

  CAsmm.Close;
  CAsmm.SQL.Clear;
  CAsmm.SQL.Text:='SELECT * INTO ASM_MASIVO FROM (SELECT * FROM CASM_MASIVO);';
  CAsmm.ExecSQL;

No lo hace tampoco.

Gracias a todos.

Última edición por serhasae fecha: 23-10-2020 a las 00:38:17.
Responder Con Cita
  #3  
Antiguo 23-10-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En la primera consulta, es posible que el SELECT DISTINCT no devuelva nada y por eso no se inserte nada en la tabla.

Pero en la segunda:
Código SQL [-]
 CAsmm.SQL.Text:='SELECT * INTO ASM_MASIVO FROM (SELECT * FROM CASM_MASIVO);';
No tiene sentido que no inserte nada si hay registros en CASM_MASIVO.
En otros sistemas es necesario añadir un alias a la tabla (SELECT) para que funcione, aunque imagino que ya lo has probado:

Código SQL [-]
SELECT TABLA.* INTO ASM_MASIVO FROM (SELECT * FROM CASM_MASIVO) AS TABLA;
Otra opción que puedes probar es a almacenar esta consulta en access y llamarla desde Delphi. Si no recuerdo mal, puedes crae la consulta dentro del MDB y llamarla como si fuera un StoredProcedure (con sus parámetros). Aunque sólo sea por probar.

Otra cosa que yo haría es añadir try..except a las llamadas. No se si fuera de este código tienes control de excepciones. Si es así es posible que esté sucediendo algún error y lo estés enmascarando. Encierra cada ExecSQL entre try..except, y visualiza el error si se produce.

Por último, ten en cuenta, que no todas las consultas que funcionan en Access, funcionan igual desde Delphi+ADO. Access como entorno hare determinadas cosas que no se admiten desde Jet4, que es elmotor realmente.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 23-10-2020
serhasae serhasae is offline
Miembro
 
Registrado: jun 2004
Ubicación: España
Posts: 117
Poder: 20
serhasae Va por buen camino
Si lo del alias ya me di cuenta que access cuando creas la consulta añade el alias al final, si lo probe y no tuve suerte.

Probé también a crear una consulta de access ya creada es CASM_MASIVO que funciona perfectamente en access.

No tengo puestos try except porque realmente no da errores, simplemente no hace nada, ExecSql no actua sobre ninguna fila devuelve 0.

He quitado el distinct y nada, hace lo mismo.

Última edición por serhasae fecha: 23-10-2020 a las 11:50:27.
Responder Con Cita
  #5  
Antiguo 23-10-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.056
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No sé si he leido mal, pero sería:
insert into tabla (select from otra tabla)
Responder Con Cita
  #6  
Antiguo 23-10-2020
serhasae serhasae is offline
Miembro
 
Registrado: jun 2004
Ubicación: España
Posts: 117
Poder: 20
serhasae Va por buen camino
CASIMIRO:

El Insert Es Para Agregar Nuevos Registros A Una Tabla Existente:

INSERT INTO ASM_MASIVO (SELECT * FROM ORIGEN);

Si Queremos Crear Una Nueva Tabla Usamos El Into Y La Sintaxis Es (siendo el alias opcional), la nueva tabla no debe existir, por eso la borro con el drop antes.

DROP TABLE ASM_MASIVO

SELECT * INTO ASM_MASIVO FROM (SELECT * FROM CASM_MASIVO) AS ALIAS;

Última edición por serhasae fecha: 23-10-2020 a las 22:31:00.
Responder Con Cita
  #7  
Antiguo 23-10-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.056
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por serhasae Ver Mensaje
El Insert Es Para Agregar Nuevos Registros A Una Tabla Existente:
Eso suponía que querías conseguir.

Por cierto, norma básica en cualquier foro, chat, conversación, etc. de internet, la número 6 en nuestra guía de estilo.
Cita:
6. No escribir nunca los mensajes en mayúsculas, esto denota falta de respeto a los foristas.
Responder Con Cita
  #8  
Antiguo 23-10-2020
serhasae serhasae is offline
Miembro
 
Registrado: jun 2004
Ubicación: España
Posts: 117
Poder: 20
serhasae Va por buen camino
Si disculpa , pero como son instrucciones las puse en mayusculas. Ya lo cambio, no me deja cambiarlo, . Solo me deja citar, no modificar.
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
InsertRecord con campo autonumerico de access y delphi7 saldanaluis Conexión con bases de datos 3 06-12-2010 04:35:39
Windows Vista + Delphi7 +ms Access ilisoft21 Conexión con bases de datos 2 09-01-2008 17:26:31
TSelectOnRunTime ACCESS VIOLATION DELPHI7 tuxtlagacse API de Windows 1 30-01-2007 11:08:45
Problemas de conexion con Delphi7 y access en Windows Me Chogo Tablas planas 3 26-04-2006 01:24:33
Access ´03 con delphi7. Donde pongo las sentencias. casimaxi Conexión con bases de datos 4 27-07-2005 03:22:30


La franja horaria es GMT +2. Ahora son las 11:46:03.


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