demande d'infos sur le composant IBDataSet
Bonjour,
Je suis un peu perplexe face au fonctionnement du composant IBDataSet
Dans la propriété SelectSql, on doit mettre la requete permettant de garnir le DataSet
Je vois qu il existe également des propriétés :
InsertSql
ModifySql
DeleteSql
RefreshSql
Logiquement, il me semble que l'on devrait y mettre les requetes sql permettant l insertion, la modification et la suppression de données du DataSet.
Il serait alors utile d'avoir plusieurs requetes dans certaines propriétés...
comment faire appel a une certaine méthode en particulier si on a par exemple 5 requêtes d'UPDATE, 3 INSERT et 4 DELETE FROM ?
Comment utilisez vous l IBDataSet?
vous garnissez en cours de programme les propriété permettant d executer des requetes sur le contenu du dataset?
( 1. ouvrir le dataset avec un requete Select rappatriant 5 table
2. dans certains cas, effacer la requete select, mettre une requete
UPDATE precise et l executer via la méthode execSql
ect ... )
On va migrer une base de donnée Paradox vers FireBird aussi on cherche par quel composant remplacer TTable, Tquery,.. dans les programmes accédant au données
Merci d'avance pour votre aide
[FireBird] Utilisation du composant [IBDataSet]
Je recopie un extrait du manuel des FIB Free Interbase de Gregory Deatz :
10.2 Making a TFIBDataSet updatable
Making a TFIBDataSet updatable is extremely easy. The primary SQL property of
TFIBDataSet is SelectSQL, but there are four other SQL properties that allow the user
to treat a query as an updatable data set: DeleteSQL, InsertSQL, RefreshSQL, and
UpdateSQL.
Each of these queries allow the user to delete a row, insert a row, refresh a row, and
update a row.
Let’s assume that you have a table in your database called t1:
create table t1 (
f1 integer constraint primary key,
f2 integer,
f3 varchar(128)
);
Now, your SelectSQL property says:
select * from t1
To be capable of deleting data, just make the DeleteSQL property say this:
delete from t1
where f1 = ?old_f1
To be capable of inserting data, just make the InsertSQL property say this:
insert into t1
(f1, f2, f3)
values
(?f1, ?f2, ?f3)
To be capable of refreshing data, just set the RefreshSQL to
select f1, f2, f3
from t1
where f1 = ?f1
To be capable of updating data, just set the UpdateSQL property to
update t1
set f1 = ?f1,
f2 = ?f2,
f3 = ?f3
where f1 = ?old_f1
It’s that easy! You will notice the use of “OLD ” and “NEW ”. This is to refer to the
“old” field value or the “new” field value, respectively.
You should also note that this convention for setting up “live” queries is a bit more
complicated than merely setting a RequestLive property, but it oers complete flexibility.
For example, you might want to set it up so that users don’t have the option to modify the
primary key, so you could set the UpdateSQL property to the following
update t1
set f2 = ?f2,
f3 = ?f3
where f1 = ?old_f1
As you explore using this method for establishing “live queries”, you will find that this
is rather simple and intuitive.
>>> Selon les besoins envisagés on renseigne toutes ou parties des propriétés SQL et l'on appelle celle dont on a besoin :
IBDS.UpdateSQL ...
IBDS.SelectSQL .... etc
>>> Personnellement pour ne pas tout ré-écrire quand j'accède à des tables de structures semblables je change seulement le nom de la table accédée ; pour ça je place toujours le nom en deuxième ligne :
Delete from
ART_ACT
where Code=?old_Code
>>> Le composant étant compatible "dataset", une fois les propriétés SQL renseignées correctement on peut utiliser la syntaxe dataset.
IBDS.Edit + IBDS.Post utilise IBDS.UpdateSQL pour mettre à jour la BD
>>> ATTENTION le symbole pour les paramétres n'est peut être pas le point d'interrogation pour les IBDS actuels (peut être *)
Le portage est relativement simple puisque l'on retrouve toutes les fonctions et la syntaxe des datasets précédents, une fois les propriétés SQL renseignées.
a++ 8O
[FireBird] [IBDataSet] [FIB]
Correction message précédent ne pas utiliser '*' pour préfixer paramétres
Pour le passage des paramétres dans les xxxSQL de IBDataSet, les paramétres doivent être préfixés par ':' (deux points).
Pour les DataSet des FIB Free Interbase Components on utilise (utilisait)
'?' (point d'interrogation).
Exemple pour les IBDataSet :
Insert into MaTable (nom, prenom) Values (:nom, :prenom)
a++ 8O