Topic: copier un champ d'une base a une autre base

Bonjour a tous

J'ai besoin de votre aide, seule je n'arrive pas (débutant).

procedure Frmservices_Button3_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if ( Frmservices.TableGrid1.SelectedRow >= 0 ) then
    SQLExecute('INSERT INTO devis(prix)VALUES("'+ SQLEXecute('SELECT prix FROM services WHERE id='+Frmservices.TableGrid1.sqlValue)+'")');
Frmdevisfiche1.TableGrid1.dbUpdate;
end;

]Insert rajoute une ligne a la base

Je ne veux pas une ligne de plus mais remplacer le champ de la ligne sélectionné.

Merci
Niko

2 (edited by pavlenko.vladimir.v 2023-06-08 10:20:14)

Re: copier un champ d'une base a une autre base

SQLExecute('UPDATE devis SET prix="'+ SQLEXEcute('SELECT prix FROM services WHERE id='+Frmservices.TableGrid1.sqlValue)+'" WHERE id='+ YOU_ID );

Re: copier un champ d'une base a une autre base

Bonjour Vladimir

Merci de ton aide mais dans script erreur ligne rouge.

Il manque quelque chose !

Tu peux vérifier ?

Niko

Re: copier un champ d'une base a une autre base

Salut Nikomax,
It's much better if you can attach your project so the problem can be seen.in context.
Derek.

Re: copier un champ d'une base a une autre base

Salut Derek

Le projet est trop long pour t'envoyer par msg.

procedure Frmservices_Button3_OnClick (Sender: TObject; var Cancel: boolean);
begin 
if ( Frmservices.TableGrid1.SelectedRow >= 0 ) then
    SQLExecute('INSERT INTO devis(prix)VALUES("'+ SQLEXecute('SELECT prix FROM services WHERE id='+Frmservices.TableGrid1.sqlValue)+'")');
Frmdevisfiche1.TableGrid1.dbUpdate;
end;

Ca fonctionne bien il copie la valeur prix sur le champ sauf que me rajoute une ligne a chaque fois sur la base quand je click sur le button.

Donc je veux la même chose sans la insertion d'une ligne dans la base.

Si tu peux m'aider je te remercie.

Niko

Re: copier un champ d'une base a une autre base

La commande INSERT INTO va toujours ajouter une ligne, c'est une commande SQL pour ajouter des lignes. Pour mettre à jour une ligne déjà existante, il faut utiliser "UPDATE" comme montré au post #2 par pavlenko.vladimir.v sauf qu'il faut enlever le deuxième "WHERE ID= your id" parce qu'on ne peut pas mettre deux fois "where" dans une requête SQL.

UPDATE table SET column = 'value' WHERE condition

https://www.sqlite.org/lang_update.html

if ( Frmservices.TableGrid1.SelectedRow >= 0 ) then
    SQLExecute('UPDATE devis SET prix="'+ SQLEXecute('SELECT prix FROM services WHERE id='+Frmservices.TableGrid1.sqlValue)+'")');

Re: copier un champ d'une base a une autre base

Tcoton,

Why are you confusing people?
Vladimir correctly wrote everything except that the request can be simplified.
The UPDATE request contains a subquery to get the value. One WHERE refers to the subquery, the second to the UPDATE.
In Vladimir's example, the row with the ID specified in the second WHERE will receive the update, in your example, all rows in the "devis" table in the "prix" column will receive the same value.
Everything can be done with a single SQLExecute.

SQLExecute('UPDATE devis SET prix=(SELECT prix FROM services WHERE id='+Frmservices.TableGrid1.sqlValue+') WHERE id='+ YOU_ID );