Error en Insert Into desde VFP9 para Postgres

218 views
Skip to first unread message

eap pupo

unread,
Sep 12, 2013, 11:37:11 AM9/12/13
to publice...@googlegroups.com
Hola a la comunidad!

Estoy pasando los datos desde VFP9 para postgres las estructuras son ídem, y utilizo el insert into, pero las tablas tienen mas de 100 campos pues me da error pues debo crear varias filas con la lista de campos, al final de cada fila le pongo +; o ,; y me da error, también falta el VALUES pues es inmenso, existe alguna posibilidad de resolver esto o utilizar otra instrucción para adicionar mis datos para Postgres.

Saludos y gracias.

Pupo

Víctor Hugo Espínola Domínguez

unread,
Sep 12, 2013, 12:36:41 PM9/12/13
to publicesvfoxpro
Hola eap pupo

TEXT TO lcInsertCmd NOSHOW PRETEXT 15
INSERT INTO tabla 
(
campo1, campo2, etc..., etc..., etc..., etc..., etc..., etc..., etc...
, etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc...
, etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc...
, etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc...
)
VALUES
(
?lVar1, ?lVar2, ?lVar3, ?lVar4, , etc..., etc..., etc..., etc..., etc..., etc...
, etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc...
, etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc...
, etc..., etc..., etc..., etc..., etc..., etc..., etc..., etc...
)

ENDTEXT

Saludos,
Víctor.
Lambaré - Paraguay.

eap pupo

unread,
Sep 12, 2013, 1:34:15 PM9/12/13
to publice...@googlegroups.com
Gracias, pero hay un detalle, en las tablas nativas hay información de tipo "memo" que sería text en Postgres y eso no lo coge, pero con estas instrucciones las coge:


SCAN

SCATTER NAME oCampos
STORE espec TO vmemov

=SQLEXEC(chandle,"Insert into bdp2(tarje,coarea,brigada,nombre,espec) VALUES (?ocampos.tarje,?ocampos.coarea,?ocampos.brigada,?ocampos.nombre,?ocampos.vmemov)")

Esas líneas fue mi primer prueba pero el problema es con tablas de más de 100 campos.

Así pasa todo la información del campo memo para text en postgres, pero el problema está que son muchos campos y con eso que me mandaste no lo hace solo pone "".Revisa por favor y dime algo.

Muchas gracias

Pupo

Víctor Hugo Espínola Domínguez

unread,
Sep 12, 2013, 2:29:27 PM9/12/13
to publicesvfoxpro
Hola eap pupo

>SCATTER NAME oCampos
>STORE espec TO vmemov

>=SQLEXEC(chandle,"Insert into bdp2(tarje,coarea,brigada,nombre,espec) VALUES (?ocampos.tarje,?ocampos.coarea,?>ocampos.brigada,?ocampos.nombre,?ocampos.vmemov)")

Si graba "" es porque espec tiene ese valor

Si haces SCATTER NAME oCampos MEMO, copia los campos incluyendo los memo a variables.

Saludos,
Víctor.
Lambaré - Paraguay.


eap pupo

unread,
Sep 12, 2013, 2:59:38 PM9/12/13
to publice...@googlegroups.com
Hugo mira las líneas, pero da error no hace nada.


TEXT TO lcInsertCmd NOSHOW PRETEXT 15


Insert into sp041(nube,tarje,coarea,codp2,tallas,tipo,brigada,brigadaji,categ,nofij,expediente,nombre,men,horamas260,clasizaje,fecalta
                                    ,liquid,codcar,cbasico,sescala,icies,basicajo,calberg,caltura,antiguedad,alton,pplus,salmaster,salalmace,contra,espec
                                    ,jorna,uneca,otras,motras,sexo,esc_sal,espacio,salperfe,salinm,dir,camisa,pantalon,zapato,pullover,blusa,falda,falda1
                                    ,blusa1,pulover1,pantalo1,camisa1,alberga,ciestur,cdr,ctc,ujc,pcc,bpd,mtt,telf,localidad,estadoc,nombpa,chijos,nivel,colpiel
                                    ,lugarnac,estmayor,areadefen,um,fei,gradom,revisado,promedio,meses,pbaja,baja,pservicio,nabarcado,nop2,sancionado)
                                                                          
vALUES (?nube,?tarje,?coarea,?codp2,?tallas,?tipo,?brigada,?brigadaji,?categ,?nofij,?expediente,?nombre,?men,?horamas260,?clasizaje,?fecalta
        ,?liquid,?codcar,?cbasico,?sescala,?icies,?basicajo,?calberg,?caltura,?antiguedad,?alton,?pplus,?salmaster,?salalmace,?contra,?espec
       ,?jorna,?uneca,?otras,?motras,?sexo,?esc_sal,?espacio,?salperfe,?salinm,?vmemov,?camisa,?pantalon,?zapato,?pullover,?blusa,?falda,?falda1
       ,?blusa1,?pulover1,?pantalo1,?camisa1,?alberga,?ciestur,?cdr,?ctc,?ujc,?pcc,?bpd,?mtt,?telf,?vmemov1,?estadoc,?nombpa,?chijos,?nivel,?colpiel
       ,?lugarnac,?estmayor,?areadefen,?um,?fei,?gradom,?revisado,?promedio,?meses,?pbaja,?baja,?pservicio,?nabarcado,?nop2,?sancionado)
      
        
      
      
      



ENDTEXT
SQLEXEC(chandle,lcInsertCmd)


Gracias por tu ayuda

MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Sep 12, 2013, 3:02:07 PM9/12/13
to publice...@googlegroups.com
Hola lo que estas haciendo esta bien solo trata de que todo este en una variable.

SELECT TUTABLA
         SCATER MEMVAR MEMO
        CadSQL = " INSERT INTO TABLA(campo1 campo n) "+;
                " campo, campo, campo, campo, campo, campo, "+;
                " campo, campo, campo, campo, campo, campo "+;
                " VALUES(?m.campo1, ?m.campoN, "+;
                " ?m.campo,?m.campo,?m.campo,?m.campo,?m.campo,"+;
                " ?m.campo,?m.campo,?m.campo,?m.campo,?m.campo)"
              SQLEXEC(CONEXION,CadSQL)  
ENDSCAN
Visita mi canal o mi blog tengo una herramienta especialmente para estos tipos de trabajo


Pd.: Descargate mi grilla que tiene multiples funciones como filtrar, multiseleccion, búsqueda, etc del siguiente link http://www.developervfp.blogspot.com/p/gridlibre-v35.html. Ahora también puedes bajarte mi ultima herramienta Busqueda Incremental con un TEXTBOX http://developervfp.blogspot.mx/p/busqueda-incremental-con-un-textbox.html  las herramientas viene con código fuente, ojo no hacer mal uso por favor. 


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
San Juan del Rio - Queretaro - Mexico 
Nextel.: 52*133750*16
rycjesusrj @ hotmail.com
Framework Multi-conexion version 6.0 (nueva)

Víctor Hugo Espínola Domínguez

unread,
Sep 12, 2013, 3:34:16 PM9/12/13
to publicesvfoxpro
Hola eap pupo

Atrapa el error y cuéntanos:

lnError = SQLEXEC(chandle,lcInsertCmd)
If lnError < 0
= Aerror( laError )
Messagebox(                                                                              ;
"Error: No puede grabar!" + Chr(13)                                     + ;
"Nº de Error: " + Transform( laError( 1 ) ) + Chr(13) + ;
laError( 2 )  + Chr(13) + ;
laError( 3 ), 0 + 16, "Atención!" )
Cancel
Endif

Saludos,
Víctor.



Felipe Araoz Ramos

unread,
Sep 12, 2013, 6:46:25 PM9/12/13
to publice...@googlegroups.com
Hola eap pupo

Es  necesario que pongas PRETEXT.   Puedes poner tantas lineas quieras dentro del TEXT, y si es muy larga la puedes dividir en varias filas si no hay un punto y coma de por medio (;), postgres la va a considerar como una sola linea.   O Podría estar pasando que algún campo no tenga correspondencia con su variable o viceversa.

Saludos

Felipe
--
Felipe Araoz Ramos
RPM #941990605 / 941990605
RPC 992760385
NXT  822*9500 / 998229500

Alejandro Isla

unread,
Sep 12, 2013, 7:59:13 PM9/12/13
to publice...@googlegroups.com
Una sugerencia, creo que en la parte de values te conviene poner los "m." antes del nombre  (que quede ?m.xxx) porque tengo entendido que si tenes una tabla activa y una var de memoria con el mismo nombre que el campo (algo lógico si hiciste scatter memvar) te toma el campo de la tabla.
¿era así cierto?

Saludos

Ricardo Pina

unread,
Sep 12, 2013, 8:08:24 PM9/12/13
to Grupo VFP
Hola Alejandro
 
Es correcto, era y es así.
Si existe un campo con el mismo nombre que la variable y esta no está identificada por m. toma el valor del campo
 
Saludos
--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Alan Cybar

unread,
Sep 13, 2013, 11:49:17 AM9/13/13
to publice...@googlegroups.com
Para saber que es lo que esta haciendo mal, o pasando mal las variables, debes ejecutarlo de la siguiente manera:

SET TEXT MERGE ON
SELECT TUTABLA
SCAN    
    TEXT TO sqlcomand NOSHOW
        CadSQL = " INSERT INTO TABLA(campo1 campo n) "+;
                " campo, campo, campo, campo, campo, campo, "+;
                " campo, campo, campo, campo, campo, campo "+;
                " VALUES(<<m.campo1>>, <<m.campoN>>, "+;
                " <<m.campo>>,<<m.campo>>,<<m.campo>>,<<m.campo>>,<<m.campo>>,"+;
                " <<m.campo>>,<<m.campo>>,<<m.campo>>,<<m.campo>>,<<m.campo>>)"
              SQLEXEC(CONEXION,CadSQL) 
     ENDTEXT
ENDSCAN

y luego tomas los valores de sqlcomand y ejecutas en el server

Saludos,

Alan

HernanCano

unread,
Sep 13, 2013, 1:14:34 PM9/13/13
to publice...@googlegroups.com
lo lamento, "cybar". Creo q tu propuesta no funciona.
Tal vez
SET TEXT MERGE ON
SELECT TUTABLA
SCAN    
    scatter memvar 
    TEXT TO sqlcomand NOSHOW
                 INSERT INTO TABLA(campo1 campo n) 
                 campo, campo, campo, campo, campo, campo, 
                 campo, campo, campo, campo, campo, campo 
                 VALUES(<<m.campo1>>, <<m.campoN>>, 
                 <<m.campo>>,<<m.campo>>,<<m.campo>>,<<m.campo>>,<<m.campo>>,
                 <<m.campo>>,<<m.campo>>,<<m.campo>>,<<m.campo>>,<<m.campo>>)
     ENDTEXT
     SQLEXEC(CONEXION,sqlcomand )  
ENDSCAN
****** disculpen: no lo he probaddo......

Tip: la idea es no usar una cadena al estilo 
        CadSQL = " INSERT INTO TABLA(campo1 campo n) y algo mas------------muy largo"
que tiene la limitante de los 255 cars, en cambio la estructura TRY/CATCH no.

eap pupo

unread,
Sep 13, 2013, 1:29:36 PM9/13/13
to publice...@googlegroups.com
Muchas gracias a todos los que participaron en el debate, pero resolví con esas líneas de Hugo. Lo otro era yo que tenía unos detalles que no iban en esas líneas.

Resuelto el problema.
Saludos a todos

Pupo
Reply all
Reply to author
Forward
0 new messages