FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Duda con la sentencia Insert
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Duda con la sentencia Insert
Posted: Wed Oct 08, 2014 02:53 PM
Tengo que insertar varios registros en una tabla, en la inserci贸n lo 煤nico que cambia es el c贸digo, el resto son valores constantes, he intentado de la siguiente manera pero me da error.

Code (fw): Select all Collapse
cInsert := "insert into carga ( codigo, rubro, descrip, importe, porcentaje, activo ) Values ( " +;
           "( select codigo from alumnos where curso = " + cCurso + " and seccion = " + cSeccion  + ' ), ' +;
        Alltrim( Str( aConceptos[ oBrw1 : nArrayAt ][ 1 ] ) ) + ", '" + Alltrim( aConceptos[ oBrw1 : nArrayAt ][ 3 ] ) + "', " +;
        Alltrim( Str( aConceptos[ oBrw1 : nArrayAt ][ 4 ] ) ) + ", " + Alltrim( Str( aConceptos[ oBrw1 : nArrayAt ][ 5 ] ) ) + ", 1 )"


Cual ser铆a una forma correcta de armar esta sentencia ? Muchas Gracias

Saludos
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Duda con la sentencia Insert
Posted: Wed Oct 08, 2014 03:02 PM
Cuando se hace un INSERT desde un SELECT no hay que poner la clausula VALUES
Por ejemplo:
Code (fw): Select all Collapse
INSERT INTO miTabla2
(columna_nombre(s))
SELECT columna_nombre(s)
FROM miTabla1;
______________________________________________________________________________

Sevilla - Andaluc铆a
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Duda con la sentencia Insert
Posted: Wed Oct 08, 2014 03:23 PM

Gracias Manuel por contestar, clarifico un poco el escenario. Tengo tres tabla: alumnos ( datos de los alumnos: c贸digo, curso, secci贸n, etc. ), conceptos ( conceptos para facturaci贸n ) y carga ( conceptos asignados a cada alumno ). La tabla alumnos y carga se relacionan por el c贸digo del alumno. Quiero cargar conceptos de acuerdo a el curso y la secci贸n, para eso necesitar铆a recuperar los c贸digos de los alumnos que pertenecen al curso y secci贸n seleccionado y despu茅s generar los registros en la carga. Me gustar铆a ver si lo puedo hacer con una sola sentencia. Espero haberme explicado. Gracias nuevamente

Saludos

Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: Duda con la sentencia Insert
Posted: Thu Oct 09, 2014 01:45 PM
Est谩s cerca, pero est谩s mezclando un resultado multiple (como el select) con datos en una fila. la cosa es casi igual...


Code (fw): Select all Collapse
cInsert := "insert into carga ( codigo, rubro, descrip, importe, porcentaje, activo ) Values ( " +;
           "( select codigo, ' + Alltrim( Str( aConceptos[ oBrw1 : nArrayAt ][ 1 ] ) ) + " as rubro, '" + Alltrim( aConceptos[ oBrw1 : nArrayAt ][ 3 ] ) + "' as descrip, " +;
        Alltrim( Str( aConceptos[ oBrw1 : nArrayAt ][ 4 ] ) ) + " as importe, " + Alltrim( Str( aConceptos[ oBrw1 : nArrayAt ][ 5 ] ) ) + " as porcentaje, 1 as activo )  from alumnos where curso = '" + cCurso + "' and seccion = '" + cSeccion  + "' ),


Cuidado, donde van strings asegurate que est茅n encerradas en comillas.

驴Con que accedes a sql?
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
鈥淚f you think education is expensive, try ignorance"
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Duda con la sentencia Insert
Posted: Thu Oct 09, 2014 03:08 PM
Carlos, gracias por contestar, me conecto a Mysql mediante Ado. Prob茅 tu sugerencia y obtengo este error

Code (fw): Select all Collapse
Application
===========
聽 聽Path and name: C:\cole_sql\colegio.EXE (32 bits)
聽 聽Size: 2,324,992 bytes
聽 聽Compiler version: Harbour 3.1.0dev (Rev. 17222)
聽 聽FiveWin 聽Version: FWH 12.03
聽 聽Windows version: 6.1, Build 7601 Service Pack 1

聽 聽Time from start: 0 hours 0 mins 8 secs 
聽 聽Error occurred at: 09/10/2014, 17:00:04
聽 聽Error description: (DOS Error -2147352567) WINOLE/1007 聽[MySQL][ODBC 5.1 Driver][mysqld-5.1.30-community]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from alumnos where curso = 1 and seccion = 1 )' at line 1 (0x80040E14): Microsoft OLE DB Provider for ODBC Drivers
聽 聽Args:
聽 聽 聽[ 聽 1] = C 聽 insert into carga ( codigo, rubro, descrip, importe, porcentaje, activo ) Values ( ( select codigo, 2000 as rubro, 'CUOTA EXTRAPROG. SALA DE 4 A脩OS' as descrip, 835.00 as importe, 0.00 as porcentaje, 1 as activo ) 聽from alumnos where curso = 1 and seccion = 1 )


Que es lo que est谩 mal ??? Gracias

Saludos

Continue the discussion