Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Porque no viene el Dataset en Delphi for PHP 1.0 ???? (https://www.clubdelphi.com/foros/showthread.php?t=59663)

AGAG4 03-09-2008 22:17:19

Porque no viene el Dataset en Delphi for PHP 1.0 ????
 
Ando investigando como actualizar, borrar registros de una BD de firebird con Delphi-PHP de cualquier componente, porque en la paleta DataAccess y la de Interbase solo veo el StoredProc, no hay algún componente como el DataSet ????

Agradezco cualquier ayuda....

AGAG4 04-09-2008 00:52:31

Ya intente con el Stored Procedure mandandole parametros para actualizar 1 campo cuando menos de una tabla:

Código PHP:

    $params=array();
    
$params['NUMCLI']=$this->$this->edNumCli->Text;
    
$params['DIASCRED']=$this->$this->edDiasCred->Text;
    
$this->IBSPCliente->Params=$params;

    
$this->IBSPCliente->Prepare();

    
$this->IBSPCliente->close();
    
$this->IBSPCliente->open(); 

Dentro del SP en firebird solo tengo un Update a x tabla , pero me marca error al ejecutar ese código

Código:

Catchable fatal error:  Object of class FCliente could not be converted to string in C:\temporal\PHP\Cliente.php on line 57
Alguien ha actualizado tablas de interbase ó firebird con algun componente en Delphi for PHP Versión 1 ó 2 ????

:confused:

TOPX 04-09-2008 02:37:22

Sospecho que tuvo fallas en la instalación de los componentes o modificó la configuración de la paleta, porque no es normal que sólo esté el TStoredProc.

Esta es la mayoría de los componentes de db en la paleta de mi D4PHP:



Y sí, puede ver ejemplos de acceso a bds en los ejemplos, como los que están en las carpetas:
  • ...\vcl\samples\Data Aware\
    -
  • ...\vcl\samples\IBX\
    -

AGAG4 04-09-2008 16:30:22

No me sirven esos ejemplos, no te dicen por código como guardar datos, y lo del Stored Procec me referia que era el unico componente que me podia ayudar para grabar, pero arriba menciono como intente hacerlo por ese componente y no me funciona algo me falta para que funcione y si no viene el dataset, alguien hizo ó encontro cuando menos un componente que se enlace al Query como el UpdateSQL de los ibx que se enlazaba al Query para hacer modificaciones....

Gracias por su sugerencia....

TOPX 04-09-2008 17:31:30

Los ejemplos llamados:
  • Data Aware\Transactions
  • BlogProject
  • SimpleManagement
Tienen inserción de registros por código.

AGAG4 04-09-2008 19:34:14

Gracias por tu sugerencia, pero no me sirve viejo, mira, lo que obliga el Delphi for PHP es que uses el Table y eso es bastante pesado, me gusta mucho usar los Query's y los DAtaset's, estos ultimos los uso más porque puedes hacer busquedas y modificarlos al mismo tiempo, con el table tienes que traerte toda la información y para buscar el registro es bastante pesado usarlo con un Locate, espero me explique .....

TOPX 04-09-2008 21:00:50

Yo le entiendo y disculpará mi insistencia, pero creo que sí le sirve. Pues, nada obliga el uso de TTable, siendo que puede hacer algo así:

Código PHP:

  $this->Query1->Open();
  
$this->Query1->Append();
  
//$this->Query1->CampoX = "0";
  
$this->Query1->Post(); 

Sólo estando pendiente de la propiedad TableName.

AGAG4 04-09-2008 23:46:31

Cita:

Empezado por TOPX (Mensaje 311880)
Yo le entiendo y disculpará mi insistencia, pero creo que sí le sirve. Pues, nada obliga el uso de TTable, siendo que puede hacer algo así:

Código PHP:

  $this->Query1->Open();
  
$this->Query1->Append();
  
//$this->Query1->CampoX = "0";
  
$this->Query1->Post(); 

Sólo estando pendiente de la propiedad TableName.

En primer lugar creo que para un Query no puede usarse para editarse, hice la prueba a como tu lo explicas y no jala de esa forma:
Código PHP:

  //Actualizamos Campo
  
$this->ibQryCliente->Edit;
  
$this->ibQryCliente->DIASCRED $this->edDiasCred->Text;
  
$this->ibQryCliente->Post

Marca el Siguiente Error:

Código:

Application raised an exception class EPropertyNotFound with message 'Trying to access non-existant
property IBQuery->Edit in interbase.inc.php, line 701.'

El error es porque el Query no tiene esa propiedad para editar

Y Ni de esta manera:

Código PHP:

  //Actualizamos Campo quitando ->EDIT
  
$this->ibQryCliente->Fields['DIASCRED'] = $this->edDiasCred->Text;
  
$this->ibQryCliente->Post

Marca el siguiente errror:

Código:


Application raised an exception class EPropertyNotFound with message 'Trying to access non-existant property IBQuery->Post in interbase.inc.php, line 701.'

Por lo tanto creo que un Query no sirve para actualizar registros ....

AGAG4 04-09-2008 23:54:52

Mira, tengo un formulario donde muestro los datos de X cliente, por ejemplo:

Código -> Campo donde se capturará el código del cliente

Nombre,
Dirección,
RFC,
Población,

Dias de Credito,
Limite de Credito

Los 2 ultimos campos son editables es decir solo se pueden modificar, tengo un boton que se llama Consultar, dentro de ese boton tengo lo siguiente para buscar el código del cliente:

Código PHP:

 
  
//Armamos Select
  
$Sql='SELECT NUMCLI,NOMCLI,DIRCLI,RFCCLI,CPCLI,POBCLI,
          DIASCRED,LIMITECR FROM CLIENTES'
;
  
$this->ibQryCliente->Sql=$Sql;
  
$this->ibQryCliente->Filter=" NUMCLI >= ".$this->edNumCli->Text.
            and NUMCLI <="
.$this->edNumCli->Text."";
 
  
//Preparamos Query
  
$this->ibQryCliente->Prepare();
  
  
//Reabrimos Query
  
$this->ibQryCliente->close();
  
$this->ibQryCliente->open();
 
  
//Mostramos Datos del Cliente
  
$this->edNomCli->Text $this->ibQryCliente->Fields['NOMCLI'];
  
$this->edDirCli->Text $this->ibQryCliente->Fields['DIRCLI'];
  
$this->edPobCli->Text $this->ibQryCliente->Fields['POBCLI'];
  
$this->edRFCCli->Text $this->ibQryCliente->Fields['RFCCLI'];
  
$this->edCPCli->Text  $this->ibQryCliente->Fields['CPCLI'];
  
$this->edDiasCred->Text      $this->ibQryCliente->Fields['DIASCRED'];
  
$this->edLimiteCredito->Text $this->ibQryCliente->Fields['LIMITECR']; 

Hasta aqui vamos bien, el Query apunta al registro del cliente, ahora modificar los ultimos 2 campos, como puedo decirle al Query que me guarde las modificaciones ????

:confused:

AGAG4 05-09-2008 17:55:17

Ya probe el siguiente código basandome de un ejemplo del Sr. Andreano y no me jala, no marca error, simplemente no hace nada:

Código PHP:

  $this->ibdbCXC->BeginTrans();

  
$this->ibQryCliente->SQL 
"UPDATE CLIENTES SET DIASCRED =".$this->edDiasCred->Text."   
WHERE  NUMCLI = "
.$this->edNumCli->Text."";

  
$this->ibQryCliente->open();
  
$this->ibQryCliente->close();

  
$this->ibdbCXC->CompleteTrans(); 

Aclaro, el ejemplo del Sr. Andreano usa un Insert into.. para insertar un registro, y no usa el BeginTrans, pero también ya lo probe sin usarlo.

AGAG4 08-09-2008 15:53:04

Ya he investigado en la pagina de codegear, he visto ejemplos de esa pagina, he visto ejemplos que vienen al instalar el Delphi for php y no consigo Modificar un registro de una tabla de firebird 1.5, ya revise la ayuda que trae Delphi PHP y no vienen ejemplos, alguien sabe ????

:confused:

donald shimoda 08-09-2008 16:03:33

Cita:

Empezado por AGAG4 (Mensaje 312105)
Ya probe el siguiente código basandome de un ejemplo del Sr. Andreano y no me jala, no marca error, simplemente no hace nada:

Código PHP:

  $this->ibdbCXC->BeginTrans();

  
$this->ibQryCliente->SQL 
"UPDATE CLIENTES SET DIASCRED =".$this->edDiasCred->Text."   
WHERE  NUMCLI = "
.$this->edNumCli->Text."";

  
$this->ibQryCliente->open();
  
$this->ibQryCliente->close();

  
$this->ibdbCXC->CompleteTrans(); 

Aclaro, el ejemplo del Sr. Andreano usa un Insert into.. para insertar un registro, y no usa el BeginTrans, pero también ya lo probe sin usarlo.

Estas realizando un update, no un insert. Sino existe el registro no hará nada!

AGAG4 08-09-2008 16:15:25

He compilado por partes para saber que valor tiene edNumCli->text y tiene el código a buscar para modificar y el edDiasCred->Text también toma el valor a modificar, por lo tanto, no se que pasa ó que me falta por hacer :eek:

Y eso de que si no esta el registro no hace nada mi chavo, eso ya lo sé, es por eso que ya he compilado por partes para mostrar los valores que toma....

donald shimoda 08-09-2008 16:49:23

Cita:

Empezado por AGAG4 (Mensaje 312407)
He compilado por partes para saber que valor tiene edNumCli->text y tiene el código a buscar para modificar y el edDiasCred->Text también toma el valor a modificar, por lo tanto, no se que pasa ó que me falta por hacer :eek:

Y eso de que si no esta el registro no hace nada mi chavo, eso ya lo sé, es por eso que ya he compilado por partes para mostrar los valores que toma....

Que bueno que lo sepas, te recomiendo que cuando publiques código publiques el que corresponda con lo que quieres hacer de modo que el que lee pueda ayudarte, no somos adivinos y el código que publicaste no hace lo que quieres que haga, por eso lo comente con el fin de ayudarte por si ahi estaba tu error.

Por otro lado no se para que te complicas tanto, para ver si el SQL esta funcionando coloca una sentencia completa en texto, sin agregado de variables, y prueba con el método execute, una sentencia que no devuelve datos no se abre ni se cierra, eso es para conjuntos de datos.

Por si no queda claro lo que digo:

Código PHP:

 $this->ibdbCXC->BeginTrans();

  
$this->ibQryCliente->SQL 
"INSERT INTO CLIENTES 
   (DIASCRED)
  VALUES
   ('01/01/2008')
 FROM
    CLIENTES"
;

  
$this->ibQryCliente->execute();

  
$this->ibdbCXC->CompleteTrans(); 

Por cierto no tengo Delphi for php a mano, por tanto no lo he probado.

Saludos

AGAG4 08-09-2008 17:23:44

Cita:

Empezado por donald shimoda (Mensaje 312420)
Que bueno que lo sepas, te recomiendo que cuando publiques código publiques el que corresponda con lo que quieres hacer de modo que el que lee pueda ayudarte, no somos adivinos y el código que publicaste no hace lo que quieres que haga, por eso lo comente con el fin de ayudarte por si ahi estaba tu error.

Por otro lado no se para que te complicas tanto, para ver si el SQL esta funcionando coloca una sentencia completa en texto, sin agregado de variables, y prueba con el método execute, una sentencia que no devuelve datos no se abre ni se cierra, eso es para conjuntos de datos.

Por si no queda claro lo que digo:

Código PHP:

 $this->ibdbCXC->BeginTrans();

  
$this->ibQryCliente->SQL 
"INSERT INTO CLIENTES 
   (DIASCRED)
  VALUES
   ('01/01/2008')
 FROM
    CLIENTES"
;

  
$this->ibQryCliente->execute();

  
$this->ibdbCXC->CompleteTrans(); 

Por cierto no tengo Delphi for php a mano, por tanto no lo he probado.

Saludos

Si fuistes tan observador creo que te distes cuenta que soy novato en delphi for php, asimilo que es dephi pero ese es mi problema que tengo que pensar que estoy interactuando con php aunque la interfaz sea delphi, y creo que fui claro con mis comentarios de arriba si el código que puse esta mal pues por eso lo publique para ver si alguien me dice en que estoy mal, y veo que tu percepción "No Fue Buena" Mi Chavo, ya encontre la solución de mi problema, estaba bien lo que hacia solo que antes de aplicar la sentencia SQL del Update tengo que cerrar el Query:
Ejemplo:
Código PHP:

   //CERRAMOS
   
$this->ibQryCliente->close();

   
$this->ibQryCliente->SQL 
   
"UPDATE CLIENTES SET DIASCRED =".$this->edDiasCred->Text."   
   WHERE  NUMCLI = "
.$this->edNumCli->Text."";

   
//ABRIMOS
   
$this->ibQryCliente->open(); 

Con tan solo cerrar, tomar sentencia y abrir query ya modifica el registro,
ACLARO:

Sobre el comentario de:
"ESO DE QUE NO SOMOS ADIVINOS"

Alli si te pasastes viejo, creo que he sido my claro en lo que he comentado, mi problema era de que no podía actualizar X registro, si hubieras sido tan observador hubieras encontrado la solución, asi es que no seas tan "drastico" en ayudar a esta comunidad, no todos pensamos igual que tu, a mi solo me faltaba un pequeño empujon, pero gracias a que le estuve insistiendo, haciendo pruebas, moviendo código, etc. etc. pude encontrar la solución....

Aclarando el otro comentario:
"y el código que publicaste no hace lo que quieres que haga,"

Si estas tan seguro de que no hace lo que quiero yo que haga porque no fuistes tan obervador de decirme pon el Close primero y después el open, asimilo que tu sabias la solución del problema, pues veo que no.

P.D. No quiero hacer grilla, ni mucho menos ser tan grosero, pero no me gusta que haya gente que nos vea como pequeños enanos que no sabemos nada, todos empezamos desde abajo.

A pesar de todo....

Gracias por tu ayuda....

donald shimoda 08-09-2008 17:39:39

Cita:

Empezado por AGAG4 (Mensaje 312431)
P.D. No quiero hacer grilla, ni mucho menos ser tan grosero, pero no me gusta que haya gente que nos vea como pequeños enanos que no sabemos nada, todos empezamos desde abajo.

A pesar de todo....

Gracias por tu ayuda....

Debe ser como tu dices, desde ya sabes que contarás con mi ayuda cuando la necesites. Veo que lo de la frase de tu firma lo dices con conocimiento de causa.

Suerte.

AGAG4 08-09-2008 19:14:46

Asi es mi chavo, en este mundo la mayoria nos llevamos como perros y gatos, espero en dios que todo esto cambie para el bien de la humanidad, y disculpa si me exalte :eek: ....


La franja horaria es GMT +2. Ahora son las 10:26: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