dolibarr-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Dolibarr-dev] Multi-SGBD


From: Laurent Destailleur (Eldy)
Subject: Re: [Dolibarr-dev] Multi-SGBD
Date: Thu, 20 Sep 2007 20:22:06 +0200
User-agent: Thunderbird 2.0.0.6 (Windows/20070728)

Peux-tu essayer avec le code suivant:

$sql = "SELECT sum(f.total) as tot_fht, sum(f.total_ttc) as tot_fttc,";
$sql.= " s.nom, s.rowid as socid,";
$sql.= " p.rowid, p.ref, p.facture, p.fk_statut, p.total_ht, p.total_ttc";
if (!$user->rights->commercial->client->voir && !$socid) $sql .= ",
sc.fk_soc, sc.fk_user ";
$sql.= " FROM ".MAIN_DB_PREFIX."societe AS s, ";
if (!$user->rights->commercial->client->voir && !$socid) $sql .= "
".MAIN_DB_PREFIX."societe_commerciaux as sc, ";
$sql.= " ".MAIN_DB_PREFIX."commande AS p";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."co_fa AS co_fa ON co_fa.fk_commande =
p.rowid";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture AS f ON co_fa.fk_facture =
f.rowid";

J'ai juste mis la table commande en dernier car c'est elle qui est utilisée pour la jointure externe.

Assure toi que j'ai pas d'eereur de syntaxe dans le sql généré.
Et teste la avec et sans parenthese autour des tables du from et avant le left join.
Sous mysql et msqsl.



Régis Houssin a écrit :
par exemple dans /htdocs/compta/index.php on a cette requête :

-------------------------------------------------------------------
$sql = "SELECT sum(f.total) as tot_fht, sum(f.total_ttc) as tot_fttc,";
$sql.= " s.nom, s.rowid as socid,";
$sql.= " p.rowid, p.ref, p.facture, p.fk_statut, p.total_ht, p.total_ttc";
if (!$user->rights->commercial->client->voir && !$socid) $sql .= ",
sc.fk_soc, sc.fk_user ";
$sql.= " FROM (".MAIN_DB_PREFIX."societe AS s, ".MAIN_DB_PREFIX."commande
AS p";
if ($user->rights->commercial->client->voir || $socid) $sql .= ")";
if (!$user->rights->commercial->client->voir && !$socid) $sql .= ",
".MAIN_DB_PREFIX."societe_commerciaux as sc)";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."co_fa AS co_fa ON co_fa.fk_commande =
p.rowid";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture AS f ON co_fa.fk_facture =
f.rowid";
--------------------------------------------------------------------

qui met entre parenthèses les tables après le FROM pour palier au
problème avec LEFT JOIN qu'on avait

avec MSSQL on obtient cette erreur :

---------------------------------------------------------------------
TYPE GESTIONNAIRE DE BASE DE DONNÉE: mssql
REQUETE DERNIER ACCES EN BASE EN ERREUR: SELECT sum(f.total) as
tot_fht, sum(f.total_ttc) as tot_fttc, s.nom, s.rowid as socid,
p.rowid, p.ref, p.facture, p.fk_statut, p.total_ht, p.total_ttc FROM
(llx_societe AS s, llx_commande AS p) LEFT JOIN llx_co_fa AS co_fa ON
co_fa.fk_commande = p.rowid LEFT JOIN llx_facture AS f ON
co_fa.fk_facture = f.rowid WHERE p.fk_soc = s.rowid AND p.fk_statut =
3 AND p.facture=0 GROUP BY p.rowid
CODE RETOUR DERNIER ACCES EN BASE: DB_ERROR_SYNTAX
---------------------------------------------------------------------


si j'enlève les parenthèses et que l'utilisateur n'a pas le droit de voir
tous les clients, j'ai cette erreur sous MYSQL:

---------------------------------------------------------------------
Dolibarr a détecté une erreur technique.
Voici les informations qui pourront aider au diagnostic:

Type gestionnaire de base de donnée: mysqli
Requete dernier acces en base en erreur: SELECT sum(f.total) as tot_fht,
sum(f.total_ttc) as tot_fttc, s.nom, s.rowid as socid, p.rowid, p.ref,
p.facture, p.fk_statut, p.total_ht, p.total_ttc, sc.fk_soc, sc.fk_user FROM
llx_societe AS s, llx_commande AS p, llx_societe_commerciaux as sc LEFT
JOIN llx_co_fa AS co_fa ON co_fa.fk_commande = p.rowid LEFT JOIN
llx_facture AS f ON co_fa.fk_facture = f.rowid WHERE p.fk_soc = s.rowid AND
s.rowid = sc.fk_soc AND sc.fk_user = 1 AND p.fk_statut = 3 AND p.facture=0
GROUP BY p.rowid
Code retour dernier acces en base: DB_ERROR_NOSUCHFIELD
Information sur le dernier accès en base: Unknown column 'p.rowid' in 'on
clause'
----------------------------------------------------------------------


Régis


On Thu, 20 Sep 2007 10:00:53 +0200, "Laurent Destailleur (Eldy)"
<address@hidden> wrote:
La premiere chose a faire est de corriger les pb de requetes trop specifiques. Car si elles ne fonctionne pas avec un autre SGBD, elle ne fonctionneront avec aucune couche d'abstraction (que ce soit PDO, ou
autre).
Il ne devrait pas y avoir de tel code.

As-tu un exemple de tel requete ?


Régis Houssin a écrit :
Bonjour,

Après plusieurs tests sur MSSQL (grace à Simon Desee) il s'avère que
plusieurs requête dans le code sont trop spécifique à mysql et pose
problème, il faudrait qu'on voit pour utiliser soit PDO (qui imposerait
PHP5), soit ADOdb qui est compatible PHP4/PHP5 (PHP4 allant disparaitre
!!!) afin de faire une réelle couche d'abstraction, ce qui permettrait
d'être vraiment Multi-SGBD.

Qu'en pensez-vous ?

Régis



_______________________________________________
Dolibarr-dev mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/dolibarr-dev




--
Laurent Destailleur.
---------------------------------------------------------------
EMail: address@hidden
Web: http://www.destailleur.fr
IM: IRC=Eldy, Jabber=Eldy

AWStats (Author) : http://awstats.sourceforge.net
CVSChangeLogBuilder (Author) : http://cvschangelogb.sourceforge.net
AWBot (Author) : http://awbot.sourceforge.net
Dolibarr (Contributor) : http://www.dolibarr.org





reply via email to

[Prev in Thread] Current Thread [Next in Thread]