FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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); 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 |
#2
|
|||
|
|||
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
|
#3
|
||||
|
||||
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 |
#4
|
|||
|
|||
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. |
#5
|
|||
|
|||
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. |
#6
|
|||
|
|||
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. |
#7
|
|||
|
|||
Cita:
Mil gracias! Te debo una! Salu2 Calo |
#8
|
||||
|
||||
Cita:
¿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 |
|
|
|