PDA

Ver la Versión Completa : update, insert, delete fibplus, ayuda!!!


montesoft
10-12-2012, 21:51:19
Muy buenas tardes, debido a algunos inconvenientes con ibx decidí usar fibplus, la documentación y ejemplos q ofrece el desarrollador no es muy clara o detallada. En delphi puedo realizar una consulta con el tpFIBDataset sin problemas pero a la hora de insertar (INSERT),modificar (UPDATE) o eliminar (DELETE) la instruccion no genera error pero no hace lo q se necesita, el código base q uso es el siguiente:

with tpFIBDataset1 do
begin
Close;
UpdateSQL.Clear;
UpdateSQL.Text := 'UPDATE TABLA SET CAMPO = ' + VALOR + ' WHERE CAMPO = ' + VALOR;
Open;
end;

Alguien me puede ayudar?, de antemano mil gracias.

Casimiro Notevi
10-12-2012, 22:12:25
Si no sabes conducir, al cambiar de coche, sigues sin saber ;). ¿Por qué cambiaste de IBX a FIBplus?, ¿y qué problema es el que tienes?
¿Te podemos ayudar?, anda, léete la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php) ;)

maeyanes
10-12-2012, 22:17:58
Hola...

La mayoría de los componentes para acceso a Firebird/Interbase (y puede que para cualquier base de datos), usan el método ExecSQL cuando lanzas una consulta que modifica los datos en la base de datos.

En tu caso, prueba usando el método ExecSQL (o alguno equivalente para esos componentes) en lugar de Open.



Saludos...

montesoft
10-12-2012, 22:24:40
Los inconvenientes se presentaban al usar la instruccion INSERT INTO con valores string (ya ni me acuerdo lo q decia el error), buscando la posible solucion m dijeron q el problema era en el archivo ibquery.pas y me ofrecieron el codigo para corregirlo pero eso no pasó. Ademas no he encontrado documentación o ejemplos para realizar la relacion maestro - detalle asi q opte x otra alternativa.

Casimiro Notevi
10-12-2012, 22:27:17
Ufff... has mezclados muchas preguntas, tendrás que ir paso a paso, creo que mejor mira este hilo (http://www.clubdelphi.com/foros/showthread.php?t=68708), es un minitutorial que creó Caral.

Casimiro Notevi
10-12-2012, 22:29:19
Y también te interesa este otro (http://www.intitec.com/varios/Delphi_conexion_firebird_con_ibx.pdf), está en formato pdf.

montesoft
10-12-2012, 22:29:26
No existe una instruccion EXECSQL ni he encontrado un equivalente.

Casimiro Notevi
10-12-2012, 22:38:54
No existe una instruccion EXECSQL ni he encontrado un equivalente.

Entonces es que no has leido nada de lo aconsejado.

montesoft
10-12-2012, 22:46:52
Entonces es que no has leido nada de lo aconsejado.
A ver "Casimiro Notevi", en primera empiezas diciendo q son muchas preguntas, es solo una "xq no funciona el codigo q planteo en fibplus?", 2 - me recomiendan q pruebe la instruccion EXECSQL y le respondo q esa no existe para fibplus, x ultimo tu aconsejas q lea un hilo y un pdf (ya los lei), eso q está allí yo lo se hacer, pero igual no responde a mi inquietud.

Casimiro Notevi
10-12-2012, 22:54:09
Te he pasado enlace a un minitutorial también.
Disculpa, pero si supieras todo eso, como dices, no tendrías estas dudas, es como si dices que sabes multiplicar y preguntas cómo se suma :S

Para select... usa .open
Para update, insert, delete... usa .execsql (tanto con IBX como con FIBplus)

montesoft
10-12-2012, 23:04:14
Te he pasado enlace a un minitutorial también.
Disculpa, pero si supieras todo eso, como dices, no tendrías estas dudas, es como si dices que sabes multiplicar y preguntas cómo se suma :S

Para select... usa .open
Para update, insert, delete... usa .execsql (tanto con IBX como con FIBplus)
Amigo no se q version de fibplus usas (tengo la 6.9.9) pero los TPFIBDATASET no tienen un metodo EXECSQL, ya lo busque y nada. En todo caso agradezco tu paciencia.

maeyanes
10-12-2012, 23:08:04
Hola...

Si vas a usar las propiedades UpdateSQL, InsertSQL y DeleteSQL de TPFIBDataSet, estas no se ejecutan mediante Open, si no usando los métodos Edit, Insert y Delete y en los casos de los dos primeros, tienes que hacer un Post al finalizar de modificar los datos. Esto es de la misma forma en que lo harías usando un TIBDataSet.


Saludos...

Casimiro Notevi
10-12-2012, 23:09:11
El FIBquery, te aconsejo que uses ese.
El FIBdataset úsalo cuando quieras hacer selects y necesites mostrar el resultado en un dbgrid, por ejemplo.

Casimiro Notevi
10-12-2012, 23:12:30
Si leyeras el tutorial, no te ocurriría esas cosas, ni tendrías que cambiar de componentes por desconocimiento, amigo. Hay que leer, mirar lo que hacen otros, probar, etc.
No hay otra forma de aprender.

ecfisa
10-12-2012, 23:18:01
Muy buenas tardes, debido a algunos inconvenientes con ibx decidí usar fibplus, la documentación y ejemplos q ofrece el desarrollador no es muy clara o detallada.
Hola montesoft.

Revisando uno de estos enlaces

FIBPlus Developer's Guide I (http://devrace.com/files/files/devguide1.pdf)
FIBPlus Developer's Guide II (http://devrace.com/files/files/devguide2.pdf)

pude leer:

...

Basic principles of work with datasets

TpFIBDataSet enables developers to select, insert, update and delete data. All these operations are executed by TpFIBQuery components in TpFIBDataSet.

To select data you set the SelectSQL property. It’s similar to setting the SQL property of the QSelect component (TpFIBQuery type). Define the InsertSQL.Text property to insert data, UpdateSQL.Text to update, DeleteSQL.Text to delete and RefreshSQL.Text to refresh the data.

We will use a demo database employee.gdb (or .fdb for Firebird) to show how to write Select
SQL and get a list of all employees. We will write all queries in InsertSQL, UpdateSQL, etc.

with pFIBDataSet1 do
begin
if Active then Close;
SelectSQL.Text := 'select CUST_NO, CUSTOMER, CONTACT_FIRST, CONTACT_LAST from CUSTOMER';
InsertSQL.Text := 'insert into CUSTOMER(CUST_NO, CUSTOMER, CONTACT_FIRST, CONTACT_LAST )'+
' values (:CUST_NO, :CUSTOMER, :CONTACT_FIRST, :CONTACT_LAST)';
UpdateSQL.Text := 'update CUSTOMER set CUSTOMER = :CUSTOMER, '+
'CONTACT_FIRST = :CONTACT_FIRST, CONTACT_LAST = :CONTACT_LAST '+
'where CUST_NO = :CUST_NO';
DeleteSQL.Text := 'delete from CUSTOMER where CUST_NO = :CUST_NO';
RefreshSQL.Text:= 'select CUST_NO, CUSTOMER, CONTACT_FIRST, CONTACT_LAST ' +
'from CUSTOMER where CUST_NO = :CUST_NO';
Open;
end;

...


Saludos.

Casimiro Notevi
10-12-2012, 23:28:04
Es que decir que FIBplus tiene una documentación escasa y poca clara, cuando realmente tiene una impresionante documentación con ejemplos de todos los componentes, tutoriales, etc.
Pues eso, que si no se lee... pasan estas cosas.

montesoft
10-12-2012, 23:29:14
Hola...

Si vas a usar las propiedades UpdateSQL, InsertSQL y DeleteSQL de TPFIBDataSet, estas no se ejecutan mediante Open, si no usando los métodos Edit, Insert y Delete y en los casos de los dos primeros, tienes que hacer un Post al finalizar de modificar los datos. Esto es de la misma forma en que lo harías usando un TIBDataSet.


Saludos...
Ok amigo, muchas gracias (no pensé q seria como paradox) y para "ecfisa" creeme q eso lo intenté pero fijate q todas usan un metodo "open" al final y al parecer solo es util para los "select". Muchas gracias por la ayuda prestada.

montesoft
10-12-2012, 23:36:31
Es que decir que FIBplus tiene una documentación escasa y poca clara, cuando realmente tiene una impresionante documentación con ejemplos de todos los componentes, tutoriales, etc.
Pues eso, que si no se lee... pasan estas cosas.
Hombre, yo en ningun momento dije q fuera escasa. No crees q hubiera sido suficiente con una respuesta como la q m dió "maeyanes" o tu mismo al decir q usara fibquery?. Demos el asunto x terminado no crees.

ecfisa
11-12-2012, 00:14:45
Hola montesoft.

Primeramente tengo que aclararte que no he tenido ni el más mínimo roce con esos componentes.

Pero me estaba preguntando si el componente TpFIBDataSet no tendrá similitud con el TIBDataSet donde, una vez definidas las sentencias SQL basta con ponerlo en modo edición (Edit), o inserción(Append,Insert), realizar los cambios y por último guardarlos con(Post)... :rolleyes:

Saludos.

Casimiro Notevi
11-12-2012, 00:53:55
Hombre, yo en ningun momento dije q fuera escasa. Cierto, dijiste: ... decidí usar fibplus, la documentación y ejemplos q ofrece el desarrollador no es muy clara o detallada.

No crees q hubiera sido suficiente con una respuesta como la q m dió "maeyanes" o tu mismo al decir q usara fibquery?. Demos el asunto x terminado no crees.
No hay ningún problema, montesoft, pero en los dos tutoriales que te he indicado usan IBquery, por eso te indiqué esos, precisamente, para que vieras la diferencia, y no te indiqué otros tutoriales ni hilos donde se ha tratado el tema.