Categories > TinyButStrong general (FR) >

Pb avec ADODB

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: RiGreuh
Date: 2006-11-21
Time: 15:11

Pb avec ADODB

Bonjour,

Je suis confronté à un problème lié à ADODB et MS SQL.
Je dois préciser que mon code PHP fonctionnait et n'a pas évolué. Par contre j'ai fait des mises à jour serveur (Zmws), PHP, et TBS.

Donc, en ce moment j'obtiens l'erreur suivante :
Fatal error:  Uncaught exception 'com_exception' with message '<b>Source:</b> ADODB.Connection<br/><b>Description:</b> Les arguments sont de type incorrect, en dehors des limites autorisées ou en conflit les uns avec les autres.' in D:\Documents and Settings\thispi\Mes documents\Dev\ZMWS\_web.zmwsc\_vhosts.zmwsc\test.local\mssql\Include\tbs_class.php:370
Stack trace:
#0 D:\.....\_vhosts.zmwsc\test.local\mssql\Include\tbs_class.php(370): com->tbsdb_open(Object(com), 'SELECT *  FROM ...')
#1 D:\.....\_vhosts.zmwsc\test.local\mssql\Include\tbs_class.php(1575): clsTbsDataSource->DataOpen('SELECT *  FROM ...')
#2 D:\.....\_vhosts.zmwsc\test.local\mssql\Include\tbs_class.php(655): clsTinyButStrong->meth_Merge_Block('<!DOCTYPE HTML ...', Array, Object(com), 'SELECT *  FROM ...', false, 0)
#3 D:\.....\_ in D:\Documents and Settings\thispi\Mes documents\Dev\ZMWS\_web.zmwsc\_vhosts.zmwsc\test.local\mssql\Include\tbs_class.php on line 370
Nb : j'ai raccourci les chemins pour plus de commodité).

Mon PHP est le suivant :
<?php
require_once ('Include/tbs_class.php');
require_once ('Include/tbsdb_msadodb.php');

echo '<pre>';
    $usr = 'xx';
    $pwd = '******';
    $dbName = 'DB';
    $srvr = 'serveur';
    $dsn = "PROVIDER=SQLOLEDB;DATA SOURCE=$srvr;INITIAL CATALOG=$dbName;User ID=$usr; Password=$pwd";

//--Declaration Objet
    if (!$conn = new com('ADODB.Connection')) die ('impossible de créer la connection ADODB');
    $conn->Open($dsn, $usr, $pwd);

#-- New Instance of TBS class
    $TBS = new clsTinyButStrong;

#-- Load template file
    $TBS->LoadTemplate('about.tbs.html');

    $sql = "SELECT *  FROM PH8_Version_Infos";
    $TBS->MergeBlock ('blk', $conn, $sql);
   
    $TBS->Show();
?>

J'ajoute que, si au lieu d'utiliser TBS, j'utilise le code ci dessous, j'obtiens bien le contenu de ma table. Donc la connexion à la BdD doit être OK.
    $rs = $conn->Execute("Select * From PH8_Version_Infos");
    $num_columns = $rs->Fields->Count();
    for ($i=0; $i < $num_columns; $i++) {
        $fld[$i] = $rs->Fields($i);
    }
    echo "<table>";
    while (!$rs->EOF)  //carry on looping through while there are records
    {
        echo "<tr>";
        for ($i=0; $i < $num_columns; $i++) {
            echo "<td>" . $fld[$i]->value . "</td>";
        }
        echo "</tr>";
        $rs->MoveNext(); //move on to the next record
    }
    echo "</table>";

Il semble qu'il se passe quelque chose dans tbs_class.php ligne 370, au niveau de la méthode à utiliser pour ouvrir la base :
    case 10: // Custom method
        $this->RecSet = $this->SrcId->tbsdb_open($this->SrcId,$Query);
Comme je ne maitrise pas du tout les objets, je viens donc sur ce forum pour appeler à l'aide.

Merci d'avance
By: Skrol29
Date: 2006-11-22
Time: 00:06

Re: Pb avec ADODB

Salut,

C'est avec quelle version de TBS que tu as ce problème ?
By: RiGreuh
Date: 2006-11-22
Time: 12:02

Re: Pb avec ADODB

Salut,

Désolé, j'ai oublié de joindre les infos élémentaires.
Le TBS utilisé est : Version  : 3.1.1 for PHP >= 5.0 Date     : 2006-06-25
PHP Version 5.1.4

MErci de ton aide
Thierry
By: Skrol29
Date: 2006-11-23
Time: 12:30

Re: Pb avec ADODB

Et quelle était ta version de TBS avec laquelle ça tournait bien ?
By: Skrol29
Date: 2006-11-23
Time: 12:54

Re: Pb avec ADODB

Ok, en fait j'arrive à reproduire le bug (PHP 5.1.2) et pense avoir trouver le problème.

Il se trouve que le fonction method_exists() de PHP retourne toujours TRUE pour l'objet COM.
Par exemple : method_exists($conn,'coucou_cest_moi')
  retourne true.

Un bug similaire est référencé sur le lien
  http://bugs.php.net/bug.php?id=32429
mais il est relatif à une ancienne version en dév de PHP.

En attendant de voir pourquoi nous avons ce comportement, on peut modifier quelques lignes de TBS pour contourner temporairement le pb.
TBS 3.1.1, ligne 151, remplacer
if (method_exists($SrcId,'tbsdb_open')) {
par :
if (false) {
By: RiGreuh
Date: 2006-11-23
Time: 14:00

Re: Pb avec ADODB

Euh,

Etrange : sur la ligne 151 de mon tbs_class, je ne trouve pas la ligne indiquée. Elle se trouve en 147.

Pour être sur, je re téléchargé TBS et je retrouve les mêmes n° de lignes.
Néanmoins, j'ai fait la modif indiquée et j'obtiens le même msg d'erreur.

Je vais tenter de downgrader mon PHP pour voir. Et je te tiens au courant.

Merci pour ton aide.
Thierry
By: Skrol29
Date: 2006-11-23
Time: 14:06

Re: Pb avec ADODB

Heu oui, c'est la ligne 147 pour la version PHP5 de TBS.
Quand je fais cette correction avec l'une ou l'autre des versions de TBS, sous PHP 5.1.2, le bug disparait et le bloc s'affiche correctement.
By: RiGreuh
Date: 2006-11-23
Time: 15:45

Re: Pb avec ADODB

Je confirme ton hypothèse concernant PHP.

J'ai remplacé la version 5.1.4 (qui provoque une erreur chez moi) par celle de ma précédente sauvegarde (5.0.4), et là tout se passe parfaitement. Plus d'erreur.

Je ferais mes mises à jour PHP avec plus de circonspection, désormais.

Merci de ton aide
Thierry
By: Skrol29
Date: 2006-11-28
Time: 00:47

Re: Pb avec ADODB

Salut,

J'ai réussi à contourner le bug PHP.
TBS 3.2.0 gère ce phénomène et tu peux utiliser le plug-in Adodb tranquillou.
By: RiGreuh
Date: 2006-11-28
Time: 10:35

Re: Pb avec ADODB

Magnifique !

Merci beaucoup pour ton aide et encore Félicitations pour ce bel outil qu'est TBS.

Je cours  immédiatement mettre à jour TBS, puis (prudemment) PHP.

Thierry