No updates in grid through acheck

hello,

I have a grid that allows me to click a checkbox (type =acheck) to updte directly my table in my database.
It works fine but as soon as I add a “left join” in my sql query, it seems that my principal ID is not recognized. I hope there is a solution for that.

Find below :

  1. My Grid code
  2. My connector code
  3. my sql query code
    I think the problem is on this line in my sql query left join phs_visite_forfait_realise_mt_rem p2 on p1.id_visite =p2.visite_forfait_realise
    As there is a join on id_visite that is my id used in the grid, it seems that the grid couldn’t find the good primary key.
    If I let all the sql query but if I don’t write the p2.montant_visite_forfait_realise_rem(mt_realise_rem) in the grid (and in the connector), so the checkbox is updated…


$gridConn->render_sql($sql_grid_10,“p1.id_visite(id_visite_1)”,“session_paiement_pec,p10.code(etude_code),p10.nom(etude_nom),p11.libelle(statut_visite),p13.libelle(type_visite),p12.libelle(origine_visite),p1.date_realisee(date_real),p2.montant_visite_forfait_realise_rem(mt_realise_rem)”);


$sql_grid_10=“SELECT
p1.id_visite as id_visite_1,p1.session_paiement,p1.session_paiement_pec,p1. visite_forfait_scenario,
p10.id as id_etude,p10.code as etude_code,p10.nom as etude_nom, p11.libelle as statut_visite, p13.libelle as type_visite, p12.libelle as origine_visite, p1.date_realisee as date_real,
COALESCE(p2.montant_visite_forfait_realise_rem,0) as mt_realise_rem,
COALESCE(p4.montant_visite_forfait_realise_sur,0) as mt_realise_sur,
COALESCE(p6.montant_visite_forfait_realise_frf,0) as mt_realise_frf,
COALESCE(p3.montant_visite_forfait_scenario_rem,0) as mt_scenario_rem,
COALESCE(p5.montant_visite_forfait_scenario_sur,0) as mt_scenario_sur,
COALESCE(p7.montant_visite_forfait_scenario_frf,0) as mt_scenario_frf,
(COALESCE(p2.montant_visite_forfait_realise_rem,0)+COALESCE(p4.montant_visite_forfait_realise_sur,0)+ COALESCE(p6.montant_visite_forfait_realise_frf,0))-(COALESCE(p3.montant_visite_forfait_scenario_rem,0)+COALESCE(p5.montant_visite_forfait_scenario_sur,0)+COALESCE(p7.montant_visite_forfait_scenario_frf,0)) as mt_difference,
p14.nb_erreur as nb_erreur2,
p14.username
FROM phs_visite_forfait_realise p1
left join phs_visite_forfait_realise_mt_rem p2 on p1.id_visite =p2.visite_forfait_realise left join phs_visite_forfait_scenario_mt_rem p3 on p1.visite_forfait_scenario=p3.visite_forfait_scenario
left join phs_visite_forfait_realise_mt_sur p4 on p1.id_visite =p4.visite_forfait_realise left join phs_visite_forfait_scenario_mt_sur p5 on p1.visite_forfait_scenario=p5.visite_forfait_scenario
left join phs_visite_forfait_realise_mt_frf p6 on p1.id_visite =p6.visite_forfait_realise left join phs_visite_forfait_scenario_mt_frf p7 on p1.visite_forfait_scenario=p7.visite_forfait_scenario
join phs_previsionnel p8 on p1.previsionnel=p8.id
join phs_participation p9 on p8.participation=p9.id
join phs_etude p10 on p9.etude=p10.id
join phs_statut_visite_forfait p11 on p1.statut_visite_forfait=p11.code
join phs_origine_visite_forfait p12 on p1.origine_visite_forfait=p12.code
join phs_type_visite_forfait p13 on p1.type_visite_forfait=p13.code
left join phs_session_paiement_erreur p14 on p1.id_visite =p14.visite_forfait_realise
WHERE (p1.statut_visite_forfait = ‘REA’ OR p1.statut_visite_forfait = ‘ERR’) and p10.id=”.$_SESSION[‘id_etude’];

To add informations, I have to mention that tables p2,p3,p4,p5,p6 and p14 are views.
Perhapas it comes form that. In those views there is grouping and sum informations.

I put a log before my render_sql.
I reach this :

====================================
Log started, 17/10/2011 04:10:06

SELECT
p1.id_visite as id_visite_1,p1.session_paiement,p1.session_paiement_pec,p1. visite_forfait_scenario,
p10.id as id_etude,p10.code as etude_code,p10.nom as etude_nom, p11.libelle as statut_visite, p13.libelle as type_visite, p12.libelle as origine_visite, p1.date_realisee as date_real,
p2.montant_visite_forfait_realise_rem as mt_realise_rem,
COALESCE(p4.montant_visite_forfait_realise_sur,0) as mt_realise_sur,
COALESCE(p6.montant_visite_forfait_realise_frf,0) as mt_realise_frf,
COALESCE(p3.montant_visite_forfait_scenario_rem,0) as mt_scenario_rem,
COALESCE(p5.montant_visite_forfait_scenario_sur,0) as mt_scenario_sur,
COALESCE(p7.montant_visite_forfait_scenario_frf,0) as mt_scenario_frf,
(COALESCE(p2.montant_visite_forfait_realise_rem,0)+COALESCE(p4.montant_visite_forfait_realise_sur,0)+ COALESCE(p6.montant_visite_forfait_realise_frf,0))-(COALESCE(p3.montant_visite_forfait_scenario_rem,0)+COALESCE(p5.montant_visite_forfait_scenario_sur,0)+COALESCE(p7.montant_visite_forfait_scenario_frf,0)) as mt_difference,
p14.nb_erreur as nb_erreur2,
p14.username
FROM phs_visite_forfait_realise p1
left outer join phs_visite_forfait_realise_mt_rem p2 on p1.id_visite =p2.visite_forfait_realise left join phs_visite_forfait_scenario_mt_rem p3 on p1.visite_forfait_scenario=p3.visite_forfait_scenario
left join phs_visite_forfait_realise_mt_sur p4 on p1.id_visite =p4.visite_forfait_realise left join phs_visite_forfait_scenario_mt_sur p5 on p1.visite_forfait_scenario=p5.visite_forfait_scenario
left join phs_visite_forfait_realise_mt_frf p6 on p1.id_visite =p6.visite_forfait_realise left join phs_visite_forfait_scenario_mt_frf p7 on p1.visite_forfait_scenario=p7.visite_forfait_scenario
join phs_previsionnel p8 on p1.previsionnel=p8.id
join phs_participation p9 on p8.participation=p9.id
join phs_etude p10 on p9.etude=p10.id
join phs_statut_visite_forfait p11 on p1.statut_visite_forfait=p11.code
join phs_origine_visite_forfait p12 on p1.origine_visite_forfait=p12.code
join phs_type_visite_forfait p13 on p1.type_visite_forfait=p13.code
left join phs_session_paiement_erreur p14 on p1.id_visite =p14.visite_forfait_realise WHERE ( (p1.statut_visite_forfait = ‘REA’ OR p1.statut_visite_forfait = ‘ERR’) and p10.id=33)

Done in 0.011097192764282s

====================================
Log started, 17/10/2011 04:10:08

DataProcessor object initialized
141_gr_id => 141
141_c0 => 1
141_c1 => AX98765
141_c2 => S-Collate
141_c3 => Erreur
141_c4 => Visite
141_c5 => Scenario
141_c6 => 2010-11-08
141_c7 => 200
141_!nativeeditor_status => updated
ids => 141

Row data [141]
id_visite_1 => 141
session_paiement_pec => 1
etude_code => AX98765
etude_nom => S-Collate
statut_visite => Erreur
type_visite => Visite
origine_visite => Scenario
date_real => 2010-11-08
mt_realise_rem => 200
!nativeeditor_status => updated

UPDATE phs_visite_forfait_realise p1
left outer join phs_visite_forfait_realise_mt_rem p2 on p1.id_visite =p2.visite_forfait_realise left join phs_visite_forfait_scenario_mt_rem p3 on p1.visite_forfait_scenario=p3.visite_forfait_scenario
left join phs_visite_forfait_realise_mt_sur p4 on p1.id_visite =p4.visite_forfait_realise left join phs_visite_forfait_scenario_mt_sur p5 on p1.visite_forfait_scenario=p5.visite_forfait_scenario
left join phs_visite_forfait_realise_mt_frf p6 on p1.id_visite =p6.visite_forfait_realise left join phs_visite_forfait_scenario_mt_frf p7 on p1.visite_forfait_scenario=p7.visite_forfait_scenario
join phs_previsionnel p8 on p1.previsionnel=p8.id
join phs_participation p9 on p8.participation=p9.id
join phs_etude p10 on p9.etude=p10.id
join phs_statut_visite_forfait p11 on p1.statut_visite_forfait=p11.code
join phs_origine_visite_forfait p12 on p1.origine_visite_forfait=p12.code
join phs_type_visite_forfait p13 on p1.type_visite_forfait=p13.code
left join phs_session_paiement_erreur p14 on p1.id_visite =p14.visite_forfait_realise SET session_paiement_pec=‘1’,p10.code=‘AX98765’,p10.nom=‘S-Collate’,p11.libelle=‘Erreur’,p13.libelle=‘Visite’,p12.libelle=‘Scenario’,p1.date_realisee=‘2010-11-08’,p2.montant_visite_forfait_realise_rem=‘200’ WHERE p1.id_visite=‘141’ AND (( (p1.statut_visite_forfait = ‘REA’ OR p1.statut_visite_forfait = ‘ERR’) and p10.id=33))

Edit operation finished
0 => action:error; sid:141; tid:141;

Done in 0.0099871158599854s


So the error is because of the p2.montant_visite_forfait_realise_rem=‘200’ .p2 is a view and it cannot be updated. In fact, the solution seems to be simple. In this grid I juste want the acheck to be updated. So in my update query, I should find only : session_paiement_pec`=‘1’. I don’t want to update the other fields. Do you know how I can do that please ?
Thanks