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 Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-03-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
funciones php para firebird

Hola a todos:

he visto que firebird puede manejar un update o un insert este es el link que algunos programadores que sugieren lo detallan; http://jhonny.clubdelphi.com/2010/08...-1-recuperado/


Este es mi codigo php

Código PHP:
//Actualiza o Ingresa de datos en tabla CONTEO_INV
    
$dbh =conectarINV();
    
$stmt="UPDATE OR INSERT INTO CONTEO_INV (
            FK_CODARTICULO,INV_BODEGA,INV_PVENTA, INV_AGREGADO,FK_CODUSUARIO
            )
            VALUES (
            '"
.$v_carticulo."',
            "
.$v_cantidad.",
      "
.$v_cantidadpv.",
      "
.$v_cantidadag.",
            '"
.$v_user."'
            )
      MATCHING (FK_CODARTICULO);"
;
    
$q=ibase_query($stmt);
    
$q=ibase_prepare($stmt);
    
ibase_free_query($q); 
al final me manda errores como este: Warning: ibase_query() [function.ibase-query]: Dynamic SQL Error SQL error code = -104 Token unknown - line 8, char 7 , in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\pventas\gestionbodegapda\ls_inventario_ajusta_bodega_db.php on line 168

Warning: ibase_prepare() [function.ibase-prepare]: Dynamic SQL Error SQL error code = -104 Token unknown - line 8, char 7 , in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\pventas\gestionbodegapda\ls_inventario_ajusta_bodega_db.php on line 169

Warning: ibase_free_query(): supplied argument is not a valid Firebird/InterBase query resource in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\pventas\gestionbodegapda\ls_inventario_ajusta_bodega_db.php on line 170


alguien podría ayudarme con esto?

Saludos


novato_erick
Responder Con Cita
  #2  
Antiguo 08-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues revisa ese código, los puntos, las comillas principalmente, etc.
Aquí tienes un documento para manejo de firebird con php
Responder Con Cita
  #3  
Antiguo 08-03-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Hola Casimiro

Gracias por contestar en este codigo:

Código PHP:
    
////Actualizar o Insertar tabla de CONTEO_INV
        
$dbh =conectarINV();
    
$stmt=("UPDATE OR INSERT INTO CONTEO_INV (
            FK_CODARTICULO,
                        INV_BODEGA,
                        INV_PVENTA,
                        INV_AGREGADO,
                        FK_CODUSUARIO
            )
            VALUES (
                         '"
.$v_carticulo."',
                         "
.$v_cantidadbdg.",
                                     "
.$v_cantidadpv.",
                                     "
.$v_cantidadag.",
                              '
$v_user',
                       )
                    MATCHING (
                       FK_CODARTICULO
                                   )"
);
    
$q=ibase_query($stmt);
    
$q=ibase_prepare($stmt);
    
ibase_free_query($q); 
Nada....

Bueno en la utilización del Insert no tengo problemas y en update el problema es usar ese metodo que sugieren... lo que necesito es solamente comprobar si el codigo existe que se actualice y si no simplemente se inserte en php.

Saludos

novato_erick
Responder Con Cita
  #4  
Antiguo 08-03-2012
georkis georkis is offline
Miembro
 
Registrado: abr 2008
Ubicación: Cuba
Posts: 39
Poder: 0
georkis Va por buen camino
Bueno colega...

No tengo experiencia sobre Firebird, pero te diré que la variable que almacena el lenguaje SQL hay dos acciones posibles a realizar update e insert... el error que te esta dando es sobre la sintasis de SQL... define bien la instrucción de SQL y clasificala por separado update y insert... maneja las variables por condiciones si es update ejecuta SQL update, sino Insert...
Responder Con Cita
  #5  
Antiguo 08-03-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Hola Gracias por responder

Este es mi condicion:

Código PHP:
//Lectura de Parametros
//  CODIGO ARTICULO
  
if (isset ($_POST['p_carticulo']))
   
///Prepara parametro de consulta para recuperar datos del articulo conforme al codigo
   
$v_carticulo$_POST['p_carticulo'];
   
$v_varconsulta=$v_carticulo;
   
/////Prepara variable de consulta
   
$v_wheret="c.FK_CODARTICULO='".$v_varconsulta."'";
   if (
$v_varconsulta<>'') { {$v_valida='S';
      }
//Si hay valor carga
  
if ($v_varconsulta<>'') {
   
$v_consulta=$v_consulta.$v_varconsulta.'.';
   
$v_valida='S';
   if (
$v_where<>'')  {  $v_where=$v_where." AND ".$v_wheret; }
   else    { 
$v_where=$v_wheret; }
  }
 } 
Me equivoco en algo?

Código PHP:
<?PHP
echo '<TABLE border="0" width= "100%" ALIGN=CENTER bgcolor="#dddddd" cellspacing="0" cellpadding="0">';
$v_user=$_SESSION['usuario'];
//////////////CONSULTA PARA CODIGO ARTICULO/////////////////////////////////////////////
echo '<tr><td class="titulotabla">Transaccion para : '.$v_carticulo;
echo 
'</td></tr>';
/////Se activa si se valida que entraron datos por el usuario.
  
if ($v_valida=='S')
  {
/////Carga consulta para conocer su existencia
  
$stmt=select_qconteo_inv($v_where);
///Actualizacion de datos en tabla CONTEO_INV
 
$dbh =conectarINV();
 
$stmt="UPDATE CONTEO_INV SET INV_BODEGA = ".$v_cantidadbdg.",
  FK_CODUSUARIO = '
$v_user' WHERE FK_CODARTICULO = '".$v_carticulo."'";
  
$q=ibase_query($stmt);
 
$q=ibase_prepare($stmt);
 
ibase_free_query($q);
  }
//<?PHP
else
{
//SI EL DATO NO SE ENCUENTRA
///Ingreso de datos en tabla CONTEO_INV
 
$dbh =conectarINV();
 
$stmt="INSERT INTO CONTEO_INV (
   FK_CODARTICULO,INV_AGREGADO,FK_CODUSUARIO
   )
   VALUES (
   '"
.$v_carticulo."',
      "
.$v_cantidad.",
   '
$v_user'
   )"
;
 
$q=ibase_query($stmt);
 
$q=ibase_prepare($stmt);
 
ibase_free_query($q);
}
Responder Con Cita
  #6  
Antiguo 08-03-2012
georkis georkis is offline
Miembro
 
Registrado: abr 2008
Ubicación: Cuba
Posts: 39
Poder: 0
georkis Va por buen camino
Hola colega...

Bueno ahora esta más claro el código... a ver si entiendo... tienes dos estructura de SQL update y Insert... me dices que el ejemplo anterior te insertaba pero no actualizaba... bueno el problema puede ser el pase de la variable que debe de recibir el SQL update con el criterio del campo clave para actualizar... he visto que usas el metodo POST... Primer paso que debes hacer y no has hecho aun, eso pienso claro!!... es declarar el recibimiento de las variables $_POST['nombre del campo input']... dime si estoy en lo correcto...
Responder Con Cita
  #7  
Antiguo 08-03-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Hola gracias por tu atención:

Te refieres a esto verdad:

Código PHP:
//Lecturas de parametros
 
if (isset ($_POST['p_carticulo']))
 {
  
$v_carticulo=$_POST['p_carticulo']; //captura el codigo del articulo
 
}
 if (isset (
$_POST['p_cantidad']))
 {
  
$v_cantidadbdg=$_POST['p_cantidad'];// captura cantidad en bodega
 
}
  if (isset(
$_POST['p_cantidadpv']))
  {
  
$v_cantidadpv=$_POST['p_cantidadpv'];// captura cantidad en punto de venta
  
}
  if (isset(
$_POST['p_cantidadag']));
  {
  
$v_cantidadag=$_POST['p_cantidadag'];//Captura cantidad en otros puntos
  

a tambien tengo esta funcion
Código PHP:
//////////Construye sentencia para listar consulta del condigo de la tabla CONTEO_INV
function select_qconteo_inv($v_condicion)
{
$v_consulta="select c.FK_CODARTICULO from CONTEO_INV c";
$v_order=" order by c.FK_CODARTICULO";
if (
$v_condicion<>'') {
 
$v_consulta=$v_consulta." where "$v_condicion;
 }
$v_consulta=$v_consulta.$v_order;
return 
$v_consulta;

Lo extraño es que si no encuentra la consulta FK_CODARTICULO se salta el else (la insersion). aunque mi validación me de un N

Saludos


novato_erick
Responder Con Cita
  #8  
Antiguo 08-03-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
En resumen este es el codigo completo


Código PHP:
<?php
/////////////////////////////////////////////////////////////////////////
/////Erick Castillo ////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//inicia sesion
 
session_start();
 
$v_id1=session_id();
 
$v_id2='0';
 if (isset (
$_POST['p_id']))
   {
   
$v_id2 $_POST['p_id'];
  }
//define inclusiones
//Incluye cabeza y pie template de las paginas
include ("ls_cuerpo_php.php");
//funciones
include("ls_funciones_php.php");
//conexiones DB
include("ls_config.php");
//funciones de control sobre validacion del usuario
include ("ls_valida_acceso_php.php");
//llama usuario
$v_user=$_SESSION['usuario'];
//Proteccion de pagina
validaentrada($v_id2,$v_id1);
///Inicializacion de Variables
$v_carticulo='';
$v_cantidad=0;
$v_cantidadbdg=0;
$v_cantidadpv=0;
$v_cantidadag=0;
$v_accion ='CONTEO';
$v_valida='N';
$v_consulta='';
$v_where '';
$v_wheret '';
$v_varconsulta='';
$v_tcolumnas=5;
//Lectura de Parametros
//  CODIGO ARTICULO
  
if (isset ($_POST['p_carticulo']))
   
///Prepara parametro de consulta para recuperar datos del articulo conforme al codigo
   
$v_carticulo$_POST['p_carticulo'];
   
$v_varconsulta=$v_carticulo;
   
/////Prepara variable de consulta
   
$v_wheret="c.FK_CODARTICULO='".$v_varconsulta."'";
   if (
$v_varconsulta<>'') { {$v_valida='S';
      }
//Si hay valor carga
  
if ($v_varconsulta<>'') {
   
$v_consulta=$v_consulta.$v_varconsulta.'.';
   
$v_valida='S';
   if (
$v_where<>'')  {  $v_where=$v_where." AND ".$v_wheret; }
   else    { 
$v_where=$v_wheret; }
  }
 }
//Lecturas de parametros
 
if (isset ($_POST['p_carticulo']))
 {
  
$v_carticulo=$_POST['p_carticulo'];
 }
 if (isset (
$_POST['p_cantidad']))
 {
  
$v_cantidadbdg=$_POST['p_cantidad'];
 }
  if (isset(
$_POST['p_cantidadpv']))
  {
  
$v_cantidadpv=$_POST['p_cantidadpv'];
  }
  if (isset(
$_POST['p_cantidadag']));
  {
  
$v_cantidadag=$_POST['p_cantidadag'];
  }
?>
<?PHP
//////////INICIA CODIGO
cabeza('Inventario_ajusta_DB');
//Codigos js
//jsformpos('codi','p_carticulo');
//Formato cuerpo
cuerpotag('');
//Contenedor
marco('Usuario Movil');
//contenedor de usuario
marcouser($v_user)
/////////////////////////////////////////////////////////////////////////
/////Erick Castillo ////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
?>
<?PHP
echo '<TABLE border="0" width= "100%" ALIGN=CENTER bgcolor="#dddddd" cellspacing="0" cellpadding="0">';
$v_user=$_SESSION['usuario'];
//////////////CONSULTA PARA CODIGO ARTICULO/////////////////////////////////////////////
echo '<tr><td class="titulotabla">Transaccion para : '.$v_carticulo;
echo 
'</td></tr>';
/////Se activa si se valida que entraron datos por el usuario.
  
if ($v_valida=='S')
  {
/////Carga consulta para conocer su existencia
  
$stmt=select_qconteo_inv($v_where);
///Actualizacion de datos en tabla CONTEO_INV
 
$dbh =conectarINV();
 
$stmt="UPDATE CONTEO_INV SET INV_BODEGA = ".$v_cantidadbdg.",
  FK_CODUSUARIO = '
$v_user' WHERE FK_CODARTICULO = '".$v_carticulo."'";
  
$q=ibase_query($stmt);
 
$q=ibase_prepare($stmt);
 
ibase_free_query($q);
  }
//<?PHP
else
{
//SI EL DATO NO SE ENCUENTRA
///Ingreso de datos en tabla CONTEO_INV
// $stmt=select_qconteo_inv($v_where);
 
$dbh =conectarINV();
 
$stmt="INSERT INTO CONTEO_INV (
   FK_CODARTICULO,INV_BODEGA,FK_CODUSUARIO
   )
   VALUES (
   '"
.$v_carticulo."',
      "
.$v_cantidadbdg.",
   '
$v_user'
   )"
;
 
$q=ibase_query($stmt);
 
$q=ibase_prepare($stmt);
 
ibase_free_query($q);
}
//Actualiza o Ingresa de datos en tabla CONTEO_INV
////////////////////////////////////
// $dbh =conectarINV();
// $stmt="UPDATE OR INSERT INTO CONTEO_INV(FK_CODARTICULO,INV_BODEGA,INV_PVENTA,INV_AGREGADO,FK_CODUSUARIO)
//   VALUES ('".$v_carticulo."',".$v_cantidadbdg.",".$v_cantidadpv.",".$v_cantidadag.",'$v_user')
//      MATCHING (FK_CODARTICULO)";
// $q=ibase_query($stmt);
// $q=ibase_prepare($stmt);
// ibase_free_query($q);
echo '<TR><td class=alerta>';
//echo 'REGISTRO DE '.$v_accion.' HA SIDO ACTUALIZADO';
echo 'REGISTRO DE CONTEO HA SIDO ALMACENADO';
echo 
'</td></TR>';
echo 
'<tr><td class=alerta>';
//boton_sigueinventario($v_id1);
  
echo '<FORM METHOD="POST" ACTION="ls_busca_db_cantidad_bodega.php">';
      echo 
'<input name="p_id" type="hidden" VALUE="'.$v_id1.'" size="14">';
      echo 
'<input class="alerta" type="submit" value="CONTINUAR">';
  echo 
'</form>';
echo 
'</td></tr>';
 
trazalinea('alerta',$v_tcolumnas,4);
echo 
'</table>';
?>
<?PHP
pie
($v_id1,'1');
?>
Espero encontrar solución no se porque estoy bloqueado.


Saludos

novato_erick

Última edición por novato_erick fecha: 08-03-2012 a las 16:12:38.
Responder Con Cita
  #9  
Antiguo 08-03-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por georkis Ver Mensaje
No tengo experiencia sobre Firebird, pero te diré que la variable que almacena el lenguaje SQL hay dos acciones posibles a realizar update e insert... el error que te esta dando es sobre la sintasis de SQL... define bien la instrucción de SQL y clasificala por separado update y insert... maneja las variables por condiciones si es update ejecuta SQL update, sino Insert...
Posiblemente este no es el problema. Precisamente, en su mensaje inicial, novato_erick hace referencia a un enlace donde se explica la introducción de la sentencia conjunta update or insert en Firebird 2.1. Es decir, no es que se haya confundido y puesto el insert y el update en la misma consulta, sino que se trata de una particularidad especial de Firebird.

Erick,

El mensaje original de error indica un término desconocido en la línea 8, caracter 7. Para saber exactamente qué puede dar ese error necesitaríamos ver como queda la consulta una vez sustituídos los valores de las variables.

Prueba poniendo esto justa antes del ibase_query:

Código PHP:
echo '<pre>';
echo 
$stmt;
echo 
'</pre>';
die; 
y pon aquí el texto que obtengas.

// Saludos
Responder Con Cita
  #10  
Antiguo 08-03-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Este es el mensaje que me envia Roman tambien gracias por tu atención:

Cita:
UPDATE OR INSERT INTO CONTEO_INV(FK_CODARTICULO,INV_BODEGA,INV_PVENTA,INV_AGREGADO,FK_CODUSUARIO) VALUES ('0324001069003',8,0,,'ERICK') MATCHING (FK_CODARTICULO)
Saludos

novato_erick

Última edición por novato_erick fecha: 08-03-2012 a las 16:35:06.
Responder Con Cita
  #11  
Antiguo 08-03-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Bueno, pues ahí está el error:

Cita:
UPDATE OR INSERT INTO CONTEO_INV(FK_CODARTICULO,INV_BODEGA,INV_PVENTA,INV_AGREGADO,FK_CODUSUARIO) VALUES ('0324001069003',8,0,,'ERICK') MATCHING (FK_CODARTICULO)
justo después del cero y antes de Erik; falta un valor. Revisa la variable $v_cantidadag que aparentemente está vacía.

Por cierto, soy roman, no casimiro.

// Saludos
Responder Con Cita
  #12  
Antiguo 08-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Por cierto, soy roman, no casimiro.
Que quede claro, porque uno es guapo y el otro es feo, no vayamos a confundirnos
Responder Con Cita
  #13  
Antiguo 08-03-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Disculpa me di cuenta del error de nick pero fue tarde para corregirlo.

de todas manera puse un 0 en donde no me capturaba el dato de la variable para ver si lo enviaba a la tabla pero nada...

Saludos

novato_erick
Responder Con Cita
  #14  
Antiguo 08-03-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Roman por estar concentrado en la sentencia sql no me habia percatado que antes de iniciar una sentencia tenia unas clausulas que siempre me solicitaban actualización, es por eso que jamas me iva a insertar a parte de la variable que me hacia falta declarar con el POST.

Caballeros agradezco mucho su ayuda. ahora aqui sigo el camino, Gracias por todo chicos nuevamente.

Saludos

novato_erick
Responder Con Cita
Respuesta



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
funciones de firebird micayael Firebird e Interbase 6 28-05-2011 22:22:25
Programar una DLL de Funciones para Firebird en D2009 Efren2006 OOP 2 24-11-2009 20:04:24
¿Funciones estadísticas para FireBird 2.0? Angel Fernández Firebird e Interbase 12 16-03-2008 04:25:49
Que api debo utilizar para que mi proyecto me reconozca las funciones de ODBC para My Shidalis API de Windows 1 23-08-2005 16:35:02
UDF funciones / Functions firebird ASAPLTDA Firebird e Interbase 3 01-04-2005 17:38:26


La franja horaria es GMT +2. Ahora son las 00:06:02.


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