Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2005
Calo Calo is offline
Registrado
 
Registrado: mar 2005
Posts: 5
Poder: 0
Calo Va por buen camino
unica ejecucion multiples recordsets

gente, ante todo queria saludarlos...hace varios meses que estoy recorriendo el foro y aprendi mucho de uds. Hoy aproveche para registrarme y plantearles la siguiente duda

Estoy con un sistema en delphi y access 2000

Cuando quiero realizar un Instert como el siguiente me devuelve el siguiente cordigo de error:

El proveedor actual no admite que una unica ejecucion devuelva multiples recordsets.

Entiendo perfectamente...ahora no se me ocurre nada para solucionarlo.

Aca tengo el codigo
Código:
 
datamodule1.QRYHistFact.SQL.Clear;
datamodule1.QRYHistFact.SQL.Add('INSERT INTO factura ( id_pedido, id_producto, precio_A, precio_B, precio_C ) ');
datamodule1.QRYHistFact.SQL.Add('SELECT ProductoPedido.id_pedido, ProductoPedido.id_producto, productos.precio_A, productos.precio_B, productos.precio_C ');
datamodule1.QRYHistFact.SQL.Add('FROM ProductoPedido INNER JOIN productos ON ProductoPedido.id_producto = productos.id_producto ');
datamodule1.QRYHistFact.SQL.Add('WHERE ProductoPedido.id_pedido='+ inttostr(dbgrid1.SelectedField.Value));
frmprincipal.InitConsulta(datamodule1.QRYHistFact);
El initconsulta lo unico que hace es poner en prepared el query, lo abre, locierra y lo ejecuta.

Esta consulta devuelve un listado de productos, que se van a guardar en una tabla factura con con dos claves, el codigo del producto y el codigo del pedido.

Nada mas...espero que alguien me salve de esta!

Salu2
Calo
Responder Con Cita
  #2  
Antiguo 31-03-2005
kenkatana kenkatana is offline
Registrado
 
Registrado: mar 2005
Posts: 6
Poder: 0
kenkatana Va por buen camino
2 sentencias SQL

El problema esta en q tienes 2 sentencias SQL: La primera un INSERT y luego un SELECT, simplemente ejecuta el INSERT primero, luego carga la instruccion SELECT y vuelve a ejecutarlo
Responder Con Cita
  #3  
Antiguo 31-03-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
A mi me parece una sentencia perfectamente válida.... eso si, no se si Access la soportará.

Para aclarar a kenkatana que parece que se nos ha perdido en el camino, la sentencia inserta en la tabla factura todas las filas que son resultado del Select que le sigue, lo que está basado en el estándar SQL.

Luego, para ejecutar una sentencia de este tipo, que no devuelve un cursor, regularmente no se "abre" el query, sino se ejecuta.

En la jerga del BDE, no se hace query1.Open, sino query1.ExecSQL (si no mal recuerdo).

Si usas otros componentes de acceso, como ADO, pues habrá de ver de que componente específico se trata para ver cual es el método a seguir, aunque lo usual sería utilizar un TADOCommand.

Saludos.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 31-03-2005
Calo Calo is offline
Registrado
 
Registrado: mar 2005
Posts: 5
Poder: 0
Calo Va por buen camino
Estas seguro? Mira que esa misma instruccion bajo access funciona perfectamente, ademas no quedaria completa ejecutando solamente el insert.
Lo unico que hace es decir, insertar en esta tabla y en los siguientes campos los datos que tengo en otro lado. Instruccion simple y bien armada de sql.
Responder Con Cita
  #5  
Antiguo 01-04-2005
pcicom pcicom is offline
Miembro
 
Registrado: may 2003
Ubicación: MONTERREY MEXICO
Posts: 253
Poder: 21
pcicom Va por buen camino
Re: unica ejecucion multiples recordsets

Al parecer todo esta bien, solo por una pequeñisima cosa..

la instruccion para hacer INSERTS es la siguiente

INSERT INTO tabla (CAMPO1, CAMPO2......CAMPOn)
VALUES ( VALOR1,VALOR2.... VALORn);

intenta esto..


INSERT INTO tabla (CAMPO1, CAMPO2......CAMPOn)
VALUES (
SELECT -- FROM tabla2 INNER JOIN tabla3 ON tabla2.campo=tabla3.campo) WHERE xCondicion
); <- cIERRA pARENTESIS..
__________________
Poco ha de saber el que no pregunta.. Yo por eso soy un pregunton

Última edición por pcicom fecha: 01-04-2005 a las 01:28:43.
Responder Con Cita
  #6  
Antiguo 01-04-2005
Calo Calo is offline
Registrado
 
Registrado: mar 2005
Posts: 5
Poder: 0
Calo Va por buen camino
Eso daría error de sintaxis a mi parecer, igualmente lo probe y nada, porque los values se utilizan para insetar valores directamente sobre cada campo y no ser extraidos de un select.



Salu2
Calo

Última edición por Calo fecha: 01-04-2005 a las 15:58:37.
Responder Con Cita
  #7  
Antiguo 01-04-2005
Calo Calo is offline
Registrado
 
Registrado: mar 2005
Posts: 5
Poder: 0
Calo Va por buen camino
Cita:
Empezado por jachguate
Si usas otros componentes de acceso, como ADO, pues habrá de ver de que componente específico se trata para ver cual es el método a seguir, aunque lo usual sería utilizar un TADOCommand.

Saludos.

Perfecto!!!! Con un adocommand y la especificacion de cmdtext. Le paso la instruccion sql y funciona perfecto.

Mil gracias! Te debo una!

Salu2
Calo
Responder Con Cita
  #8  
Antiguo 01-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por pcicom
intenta esto..
INSERT INTO tabla (CAMPO1, CAMPO2......CAMPOn)
VALUES (
SELECT -- FROM tabla2 INNER JOIN tabla3 ON tabla2.campo=tabla3.campo) WHERE xCondicion
); <- cIERRA pARENTESIS..
ooooorale!!!!

¿que motor te soporta esta sintaxis...?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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


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


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