Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-05-2015
MALBOTO22 MALBOTO22 is offline
Miembro
 
Registrado: oct 2005
Posts: 21
Poder: 0
MALBOTO22 Va por buen camino
ibase_query() [function.ibase-query]: Dynamic SQL Error SQL error code = -104 Token

Buenos dias, muy comedidamente solicito su colaboración para tratar de dar solución a este problema, la verdad es que llevo más de una semana tratando de dar solución, he consultado varias paginas y foros, pero nada que doy con la solución.

El caso es el siguiente: Deseo pasar una información de una tabla en DBF a otra tabla en FIREBIRD, pero no permite hacer la respectiva grabación de los datos. Se pueden visualizar desde la tabla DBF pero no permite la grabación en la tabla FIREBIRD.

Uso: S.O. Windows 7, Appserver 2.5, Firebird 2.5


Código PHP:
 <?php
    
    $Conexion_DB    
ibase_pconnect('C:\FIREBIRD\BASES\IMPPDF.FDB','SYSDBA','masterkey');
    
$Transaccion ibase_trans("IBASE_WRITE"$Conexion_DB);
    
$Comando      'DELETE FROM CUENTAS WHERE CODIGO > 0;';
    
$nResultado   ibase_query($Transaccion$Comando);
    
ibase_commit($Transaccion);
    
ibase_close($Conexion_DB);

    echo 
">>>>> PROCESO DE BORRADO TERMINADO""<br />";
    echo 
">>>>> ESTAMOS REALIZANDO MIGRACION DE DBF A FIREBIRD""<br />";

    
$Conexion_DB    ibase_pconnect('C:\FIREBIRD\BASES\IMPPDF.FDB','SYSDBA','masterkey');
    
$Transaccion ibase_trans("IBASE_WRITE"$Conexion_DB);
   [
color=Red$Comando      ='insert into cuentas (codigo,nombre,cedula,direccion,perifact,barrio) values ('."$cod  _usu".','."$nom_usu".','."$ced_usu".','."$dir_usu".','."$per_fac".','."$bar_usu".');';[/color]
    
    
$db dbase_open('c:\windows\media\lec\factur2.dbf'0);  //PERMITE LA CONEXION CON LA TABLA DESEADA
    
if ($db
    {
      
$numero_registros dbase_numrecords($db);  //DETERMINA EL NUMERO DE REGISTROS DE LA TABLA
      
for ($i 1$i <= $numero_registros$i++) 
        {
        
$temp dbase_get_record($db$i); // procesar cada uno de los registros
        
$cod_usu=$temp[0];   //ALMACENA EL CONTENIDO DE UN CAMPO EN UNA VARIABLE
        
$nom_usu=$temp[1];
        
$ced_usu=$temp[2];
        
$dir_usu=$temp[3];
        
$per_fac=$temp[5];
        
$bar_usu=$temp[18];
        echo 
$cod_usu."\t";
        echo 
$nom_usu."\t";
        echo 
$ced_usu"<br />";

       [
color=Red$nResultado   ibase_query($Transaccion$Comando);[/color]
        echo 
">>>>> PROCESO DE INSERCION EXITOSO <<<<<""<br />" ;
      }
      
ibase_commit($Transaccion);
      
ibase_close($Conexion_DB);
    }

?>
pero me genera el siguiente error (Resalto en rojo las lineas a las que me esta direccionando el error)

Código PHP:
>>>>> PROCESO DE BORRADO TERMINADO
>>>>>  ESTAMOS REALIZANDO MIGRACION DE DBF A FIREBIRD
2 ANGELICA MARIA PORRAS  SALAZAR 1098615598

[b]Warning[/b]: ibase_query() [[url="http://www.clubdelphi.com/foros/function.ibase-query"]function.ibase-query[/url]]: Dynamic SQL Error SQL  error code = -104 Token unknown line 1column 78 in  [b]C:\AppServ\www\sidutec\impresion.php[/bon line  [b]44[/b]
>>>>> 
PROCESO DE INSERCION EXITOSO  <<<<<
3 SANDRA MILENA RIA&#65533;O CELIS  63531217

[b]Warning[/b]: ibase_query() [[url="http://www.clubdelphi.com/foros/function.ibase-query"]function.ibase-query[/url]]: Dynamic SQL Error SQL  error code = -104 Token unknown line 1column 78 in  [b]C:\AppServ\www\sidutec\impresion.php[/bon line  [b]44[/b]
>>>>> 
PROCESO DE INSERCION EXITOSO  <<<<<
4 LEIDY CAROLINA NARANJO SOLANO 63453717 
Doy claridad que el PHP y el FIREBIRD si funcionan adecuadamente, he realizado pruebas con ejemplos y me permite insertar y consultar registros.

Agradezco la colaboración u orientación que me puedan brindar

Última edición por nlsgarcia fecha: 05-05-2015 a las 17:05:36. Razón: Sintaxis PHP
Responder Con Cita
  #2  
Antiguo 04-05-2015
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Te está diciendo "Token unknown - line 1, column 78".
Esto quiere decir que no entiende algún comando del SQL que generas.

Revisa que por ejemplo los nombres no tengan un apóstrofe o comillas. Esto rompería la sentencia SQL.

Por ejemplo, imagina que insertas : La casa de "Don Juan"
Luego el SQL quedaría
Código SQL [-]
insert into tabla (nombre) values ("La casa de "Don Juan");"
Esto se interpretaría como

Código SQL [-]
OK  - SQL    -> insert into tabla (nombre) values (
OK  - String -> "La casa de "
ERR - SQL    -> Don Juan
??? - string -> ");"
Responder Con Cita
  #3  
Antiguo 04-05-2015
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
También he visto que en el código en la columna 78 tienes un error en el código.
La variable $cod _usu está separada y supongo que PHP la interpreta como "string vacío"

Código:
$Comando = 'insert into cuentas (codigo,nombre,cedula,direccion,perifact,barrio) values ('."$cod  _usu".','."$nom_usu".','."$ced_usu".','."$dir_usu".','."$per_fac".','."$bar_usu".');';
PHP no se queja, pero si cuentas caracteres de la sentancia SQL es justo donde te está diciendo que hay un error.
Responder Con Cita
  #4  
Antiguo 05-05-2015
MALBOTO22 MALBOTO22 is offline
Miembro
 
Registrado: oct 2005
Posts: 21
Poder: 0
MALBOTO22 Va por buen camino
duilioisola, gracias por su respuesta

Con respecto a sus observaciones me permito indicarle que el espacio debio haberse creado cuando hice la copia, en el codigo original no lo tengo.

Ante su observacion revise un codigo que si esta funcionando e hice un ajuste al la linea de insercion dejandola asi:

Código PHP:
$Comando      ="insert into cuentas (codigo,nombre,cedula,direccion,perifact,barrio) values ('" $cod_usu "','" $nom_usu "','" $ced_usu ."','" $dir_usu ."','" $per_fac "','" $bar_usu "');"
y ahora sale el siguiente error

Código PHP:
>>>>> PROCESO DE BORRADO TERMINADO
>>>>>  ESTAMOS REALIZANDO MIGRACION DE DBF A FIREBIRD
1
MARTIN ALONSO BOBADILLA  TORRES 
93376454
CASA 14 ET8 B JUAN 
CENTRO 
ENERO 2015  

[color=Red][b]Warning[/b]: ibase_query() [[url="http://www.clubdelphi.com/foros/function.ibase-query"]function.ibase-query[/url]]: conversion error from  string "" in [b]C:\AppServ\www\sidutec\impresion2.php[/bon line  [b]50[/b][/color]
>>>>> 
PROCESO DE INSERCION EXITOSO  <<<<< 
Los datos visualizados son los que estan en la tabla .dbf, hice cambios a la estructrura de la tabla .fdb dejandola lo más sencilla posible

Código PHP:
CREATE TABLE CUENTAS (
  
CODIGO     INTEGER,
  
NOMBRE     VARCHAR(30),
  
CEDULA     INTEGER,
  
DIRECCION  VARCHAR(40),
  
BARRIO     VARCHAR(30),
  
PERIFACT   VARCHAR(15)
); 
le quite los not null y los indices pero el error persiste.

Que puede ser?

Última edición por nlsgarcia fecha: 05-05-2015 a las 17:07:13. Razón: Sintaxis PHP
Responder Con Cita
  #5  
Antiguo 05-05-2015
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Te sugiero en estos casos hacer un log de cada sentencia SQL que se ejecuta.
Veo que ya presentas los diferentes datos que se insertarán, pero no sabes exactamente que es lo que se envia a Firebird.
En este caso, parece que en algún lugar en el que se espera un entero se le entrega un string vacío. Esto no sabe como convertirlo, dado que no es un número.
Dicho esto, no es necesario entrecomillar los valores numéricos.

Código PHP:
    $Comando      ="insert into cuentas (codigo,nombre,cedula,direccion,perifact,barrio) values ( " $cod_usu " , '" $nom_usu "' , " $ced_usu ." , '" $dir_usu ."' , '" $per_fac "' , '" $bar_usu "' );"
    
    
$db dbase_open('c:\windows\media\lec\factur2.dbf'0);  //PERMITE LA CONEXION CON LA TABLA DESEADA
    
if ($db
    {
      
$numero_registros dbase_numrecords($db);  //DETERMINA EL NUMERO DE REGISTROS DE LA TABLA
      
for ($i 1$i <= $numero_registros$i++) 
        {
...
        echo 
$cod_usu."\t";
        echo 
$nom_usu."\t";
        echo 
$ced_usu."\t";
****
        echo 
$Comando "<br />";
****
... 
Deberías obtener algo así:
Código SQL [-]
insert into cuentas (codigo,nombre,cedula,direccion,perifact,barrio) values (1 , 'PEPITO' , 123456 , 'calle 1, 23' , 'Perifact' , 'Barrio' );
Responder Con Cita
  #6  
Antiguo 06-05-2015
MALBOTO22 MALBOTO22 is offline
Miembro
 
Registrado: oct 2005
Posts: 21
Poder: 0
MALBOTO22 Va por buen camino
duilioisola, gracias por su colaboración

Le comento que ya elimine las comillas de los campos numericos y no ha sido posible que los datos se graben en la base de datos de Firebird.

Usted me sugiere hacer un LOG para las transacciones SQL, pero honestamente no se como se hace, me podria orientar o indicar donde encuentro la información al respecto, ya que hice varias consultas pero solo encontre una para el manejo de Procedures Stored y los triggers.

Mil gracias
Responder Con Cita
  #7  
Antiguo 06-05-2015
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Con "Log" me refería solamente a agregar
Código PHP:
echo $Comando 
al procedimiento que hace las inserciones.

De esta manera podrás ver exactamente que es lo que se envía a Firebird.
Luego habrá que ver porqué la sentencia da error y corregir la formación de ese "$Comando".
Responder Con Cita
  #8  
Antiguo 06-05-2015
MALBOTO22 MALBOTO22 is offline
Miembro
 
Registrado: oct 2005
Posts: 21
Poder: 0
MALBOTO22 Va por buen camino
duilioisola,

le cuento que definitivamente usando la variable $Comando para pasar como parametro a query no me funciono por ningun lado, con el log me mostraba

Código:
>>>>> PROCESO DE BORRADO TERMINADO
>>>>> ESTAMOS REALIZANDO MIGRACION DE DBF A FIREBIRD
1
MARTIN ALONSO BOBADILLA TORRES 
93376454
CASA 14 ET8 B JUAN 
CENTRO 
ENERO 2015 
insert into cuentas (codigo,nombre,cedula,direccion,perifact,barrio) values ('','','','','','');
Warning: ibase_query() [function.ibase-query]: conversion error from string "" in C:\AppServ\www\sidutec

\impresion2.php on line 52
insert into cuentas (codigo,nombre,cedula,direccion,perifact,barrio) values ('','','','','','');
>>>>> PROCESO DE 

INSERCION EXITOSO <<<<<
la solución la encontre ubicando directamente sobre el ibase_query el comando de inserción

Código:
        $nResultado   = ibase_query($Transaccion, "insert into cuentas (codigo,nombre,cedula,direccion,perifact,barrio)" .
                                                   "values ($cod_usu,'$nom_usu',$ced_usu,'$dir_usu','$per_fac','$bar_usu');");
Nuevamente le agradezco por su colaboración y generosidad al dedicarme tiempo y orientarme
Responder Con Cita
  #9  
Antiguo 06-05-2015
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Si te fijas en la sentencia SQL verás claramente el error:

Código SQL [-]
insert into cuentas (codigo,nombre,cedula,direccion,perifact,barrio) 
values ( '' /* codigo es un integer */,'','' /* cedula es un integer */,'','','');

Es lo que comentaba en uno de los mensajes anteriores.
Deberías quitar las comillas a los valores que sean enteros y en el caso de que alguno de los valores enteros sea nulo forzar un 0 o NULL.

Última edición por Casimiro Notevi fecha: 06-05-2015 a las 21:28:16.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Dynamic Sql Error -901 trex2000 Conexión con bases de datos 2 16-09-2008 10:37:04
Dynamic sql error -303 amkalzada Conexión con bases de datos 2 27-06-2008 12:12:33
Dynamic Sql error -303 amkalzada Firebird e Interbase 1 16-06-2008 16:37:51
error (incorrect token followed by ":") en query voldemmor Conexión con bases de datos 4 16-04-2008 19:27:00
dynamic Sql Error digital Firebird e Interbase 1 03-03-2004 10:48:26


La franja horaria es GMT +2. Ahora son las 00:46:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi