Duda con la sentencia Insert

Duda con la sentencia Insert

Postby horacio » Wed Oct 08, 2014 2: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: Select all  Expand view

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
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Duda con la sentencia Insert

Postby xmanuel » Wed Oct 08, 2014 3:02 pm

Cuando se hace un INSERT desde un SELECT no hay que poner la clausula VALUES
Por ejemplo:
Code: Select all  Expand view
INSERT INTO miTabla2
(columna_nombre(s))
SELECT columna_nombre(s)
FROM miTabla1;
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Duda con la sentencia Insert

Postby horacio » Wed Oct 08, 2014 3: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
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Duda con la sentencia Insert

Postby Carlos Mora » Thu Oct 09, 2014 1: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: Select all  Expand view

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
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Duda con la sentencia Insert

Postby horacio » Thu Oct 09, 2014 3:08 pm

Carlos, gracias por contestar, me conecto a Mysql mediante Ado. Probé tu sugerencia y obtengo este error

Code: Select all  Expand view

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
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 26 guests