Cakephp 1.3 y SQL Server 2008. Problemas con Insert

96 views
Skip to first unread message

wchopite

unread,
Mar 30, 2012, 3:15:08 PM3/30/12
to CakePHP en Español
Saludos comunidad. Tengo un problema tratando de insertar un registro
en una tabla de sql server 2008. A continuacion el query:

$sql = "
INSERT INTO reng_aju (
ajue_num,
reng_num,
tipo,
co_art,
co_alma
)
VALUES (".
$datos['Ajuste']['ajue_num'].",".
$renglon['reng'].",".
"'".$renglon['tipo']."',".
"'".trim($renglon['co_art'])."',".
"'".$datos['Ajuste']['co_alma']."'
)";

$this->Renglon->query($sql);


Este query lo ejecuto luego de crear el campo asociado, el de la tabla
Ajuste => ajue_num

Me arroja el siguiente error:

INSERT INTO reng_aju (
ajue_num,
reng_num,
tipo,
co_art,
co_alma
)
VALUES
(80042,1,'AJUENT','MF0000000000000000000011','000008')

SQL Error: Se termino la instruccion. [CORE\cake\libs\model\datasources
\dbo_source.php, line 686]



Lo curioso es que el query lo ejecuto directamente en SQL Server y
funciona perfectamente.

Alguna sugerencia o idea para solucionar esto? Que estoy haciendo mal?
Por que si ejecuto el query desde el propio SQL Server funciona, y
cuando lo hago desde el framework me da error?

Agradeceria cualquier ayuda por favor

c.pf...@gmail.com

unread,
Mar 31, 2012, 8:13:55 AM3/31/12
to cakep...@googlegroups.com
intenta asignarlo a una variable por ejemplo:
$datos['Modelo']['nombre_columna'] = tu dato;
donde Modelo sería: reng_aju y nombre_columna el nombre tal cual figura en la db de cada una de las columnas.
luego haz un $this->Modelo->save($datos); Verifica el nombre del modelo para asegurarte....
Eso haría supuestamente lo mismo, pero lo está haciendo usando el ORM de cake..... siempre prefiero usar el ORM a menos que la consulta la haga muy fea Cake (habilita del debug para ver las consultas SQL)
saludos
=========================================================
Christian N. Pfarher
S3000 Santa Fe. Argentina
e-mail: c.pf...@gmail.com
blog: 
http://kikipblog.blogspot.com
skype: kikip1
=========================================================




--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP en Español" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a cakep...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a cakephp-esp...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/cakephp-esp?hl=es.


Wladimir Chopite

unread,
Mar 31, 2012, 9:26:37 AM3/31/12
to cakep...@googlegroups.com

Voy a probar asi. Y si, yo tambien prefiero hacerlo mediante el ORM pero con este SQL server he tenido muchos problemas. Es la 1ra vez que trabajo con cake junto con SQL server juntos.

Voy a probar mediante el ORM. Gracias por el dato

romel javier gomez herrera

unread,
Mar 31, 2012, 10:27:06 AM3/31/12
to cakep...@googlegroups.com
ha chopite. 

Citando esta linea: 
$this->Picture->query("SELECT * FROM pictures LIMIT 2;");



creo que cakephp espera el plural de reng_aju en tu consulta. 

saludos

romel javier gomez herrera

unread,
Mar 31, 2012, 10:35:46 AM3/31/12
to cakep...@googlegroups.com
Una vez trabaje cakephp con una base de datos legacy, y tuve que modificar especificar en el modelo el nombre de la tabla y no recuerdo que otra cosa mas. 

supongo que ya realizaste eso verdad?

saludos.

romel javier gomez herrera

unread,
Mar 31, 2012, 10:44:25 AM3/31/12
to cakep...@googlegroups.com
Creo que cake espera el plural  de Renglon en la consulta o  para $this->RengAju el plural también. 
 

$sql = "
                       INSERT INTO reng_aju (
                           ajue_num,
                           reng_num, 

...

$this->Renglon->query($sql);

Wladimir Chopite

unread,
Mar 31, 2012, 10:52:04 AM3/31/12
to cakep...@googlegroups.com

Si, ya le indique el nombre de la tabla, incluso la clave primaria. En los otros modelos me funciona. Pero no se xq alli me devuelve ese error, ya que el query sql lo pruebo directamente en la bd y funciona perfectamente

romel javier gomez herrera

unread,
Mar 31, 2012, 10:52:39 AM3/31/12
to cakep...@googlegroups.com
chopite otra idea: 

si RengAju es singular tendrías que modificar el nombre de la tabla. 

$data = Array
(
    'RengAju' => Array
    (
        'ajue_num' => 'value'
        'reng_num' => 'value'
        'tipo' => 'value'
        'co_art' => 'value'
        'co_alma' => 'value'
    )
)


$this->RengAju->save($data)   

y si es Renglon el modelo, la tabla tendria que ser el plural de este es decir Renglones, y se tiene que especificar en el modelo nombre de la tabla ya que cakephp no interpreta bien el plural del español 

$data = Array
(
    'Renglon' => Array
    (
        'ajue_num' => 'value'
        'reng_num' => 'value'
        'tipo' => 'value'
        'co_art' => 'value'
        'co_alma' => 'value'
    )
)


$this->Renglon->save($data)


saludos. 

Wladimir Chopite

unread,
Mar 31, 2012, 10:55:01 AM3/31/12
to cakep...@googlegroups.com

Quizas espera el plural. Pero yo modifique el modelo y le indico que el nombre de la tabla es reng_aju, tal cual en singular. Por eso no entiendo. Y tampoco me retorna un codigo de error de sql server. Solo dice directamente que termino la instruccion.

He tenido muchos problemas con sql server. De pana

romel javier gomez herrera

unread,
Mar 31, 2012, 11:03:36 AM3/31/12
to cakep...@googlegroups.com
otra idea:

tienes descomentado  la linea que imprime cake al realizarse una consulta, en layouts/defaut.ctp

<?php echo $this->element('sql_dump'); ?>

 cópiala y ejecútala directamente a ver. 

saludos. 

romel javier gomez herrera

unread,
Mar 31, 2012, 11:04:21 AM3/31/12
to cakep...@googlegroups.com
Me refiero a la consulta que imprime

Wladimir Chopite

unread,
Apr 2, 2012, 8:25:40 AM4/2/12
to cakep...@googlegroups.com
Creo que puedo hacerlo directamente usando el ORM. Al parecer tenia un error ya que intentaba hacerlo mediante el modelo renglon, pero en las variables del modelo le indique otra tabla. Por eso y aunque el query con el ORM no me daba error (Al menos en ese caso) no veia los datos almacenados en la tabla reng_aju, sino en la otra tabla.

Voy a probar y cualquier cosa comento, si me va bien publico la experiencia. Porque por alguna razon he tenido muchos problemas haciendo uso del ORM de cake junto con SQL Server 2008.

Gracias por sus comentarios y guias.
Atentamente:
Wladimir J. Chopite G.
+58 424-9700264
Ingeniero de Sistemas
Maturin, Venezuela
Linux Registered User #549401
Hack the p
lanet

Wladimir Chopite

unread,
Apr 2, 2012, 2:44:26 PM4/2/12
to cakep...@googlegroups.com
Logre hacerlo mediante el ORM de cakephp. Ahora me surge otro problema!

Debido a que debo hacer operaciones en varias tablas, quisiera saber si es posible ejecutar estos querys y hacer uso de rollback en caso de que alguno falle. Alguna sugerencia?

romel javier gomez herrera

unread,
Apr 2, 2012, 4:06:20 PM4/2/12
to cakep...@googlegroups.com
ha chopite. 

si se puede, la  versión que estas usando es la 1.3 verdad. ya que entre la 1.3 y 2.1 existen algunas diferencias. 
  
Por el el metodo query deduje que es la 1.3.


las tablas involucradas debe ser innoDB. 

Ya anterior mente he probado estos métodos y puedo decir con seguridad que si algún modelo involucrado no se guarda bien todo se echa para atrás es decir ninguna tabla es afectada.    

"For transactions to work correctly in MySQL your tables must use InnoDB engine. Remember that MyISAM tables do not support transactions."
  
lo que si no es si SQL Server soporta InnoDB, busca el equivalente a InnoDB y asunto resuelto. 
 

la 2.1 de cakephp es mas solida, en estos escenarios. 

saludos.

Wladimir Chopite

unread,
Apr 2, 2012, 5:38:19 PM4/2/12
to cakep...@googlegroups.com

Si man. Pero recuerda que la bd es sql server, no mysql

Reply all
Reply to author
Forward
0 new messages