fonction odbc_connect

arnaudm
Invité n'ayant pas de compte PHPfrance

09 déc. 2006, 12:37

Bonjour,

J'essaye de bien définir la connection odbc pour accéder à mon fichier texte.
J'exécute mon code par étapes pour voir où est mon erreur.

Mon test de connexion (avec mes commentaires) se déroule en plusieurs étapes:

1- Recherche du fichier texte:
Test de connexion au fichier texte<br>

$chemin=realpath(".\Coordonnees.txt");
echo "Chemin: $chemin";
=> Le chemin est affiché donc le fichier est bien trouvé. J'ai le message suivant:

Code : Tout sélectionner

Test de connexion au fichier texte Chemin: C:\Program Files\ZazouMiniWebServer\Apache\ZMWS\_web.zmwsc\GoogleMap\Coordonnees.txt
2- Préparation et affichage de la chaîne ODBC:
Voici la chaîne que je prépare:
$odbc="Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=$chemin;";
echo $odbc;
et voici ce qu'il m'affiche:

Code : Tout sélectionner

Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=C:\Program Files\ZazouMiniWebServer\Apache\ZMWS\_web.zmwsc\GoogleMap\Coordonnees.txt;
3-Test de communication avec l'odbc texte:
Voici mon code de test:
$connexion = odbc_connect($odbc,"","");
if (!$connexion) {
// Échec de la connexion
echo "La connexion au fichier texte a échoué, ";
echo "vérifiez que la connection à l'ODBC texte fonctionne";
die;
}
Le message suivant m'indique que le serveur a bien compris que j'utilise le pilote ODBC texte mais que le chemin n'est pas compris. Pourquoi? Voici le message obtenu pour cette dernière partie:

Code : Tout sélectionner

Warning: odbc_connect() [function.odbc-connect]: SQL error: [Microsoft][Pilote ODBC Texte] '(Inconnu)' n'est pas un chemin d'accès valide. Assurez-vous que le nom du chemin d'accès est correct et qu'une connexion est établie avec le serveur sur lequel réside le fichier., SQL state S1009 in SQLConnect in C:\Program Files\ZazouMiniWebServer\Apache\ZMWS\_web.zmwsc\GoogleMap\test_googleMap.php on line 7 La connexion au fichier texte a échoué, vérifiez que la connection à l'ODBC texte fonctionne
Merci par avance pour vos commentaires qui me permettraient d'avancer.

Arnaud

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 déc. 2006, 12:44

Modération :
Afin d'améliorer la lisibilité de ton message, pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Pour cette fois, j'ai modifié le message pour toi
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 19672 Messages

09 déc. 2006, 13:06

Tu as une erreur ici:
$chemin=realpath(".\Coordonnees.txt");
PHP va "lire" : ".oordonnees.txt" parce que le "\" est un caractère d'échappement.
Donc, essaye en remplaçant par :
$chemin=realpath("./Coordonnees.txt");
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

arnaudm
Invité n'ayant pas de compte PHPfrance

09 déc. 2006, 13:18

Re-Bonjour,

Cela ne change rien (avec / ou \ ou sans l'un des deux). :(
Voici mon code complet: :cry:
Test de connexion au fichier texte<br>
<?
  $adresse="Coordonnees.txt";
  echo "Adresse:$adresse";?></p><?
  $chemin=realpath($adresse);
  echo "Chemin: $chemin";?></p><?
  $odbc="Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=$chemin;";
  echo $odbc;?></p><?
  $connexion = odbc_connect($odbc,"","");
  if (!$connexion) {
    // Échec de la connexion
    echo "La connexion au fichier texte a échoué, ";
    echo "vérifiez que la connection à l'ODBC texte fonctionne";
    die;
  }

?>
merci pour les conseils futurs,

Arnaud

Mammouth du PHP | 19672 Messages

09 déc. 2006, 14:33

As-tu bien créée une ressource ODBC dans les sources de données de ta machine ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

amatard
Invité n'ayant pas de compte PHPfrance

09 déc. 2006, 15:38

Bonjour,

A terme, mon code, en PHP, doit contenir tous les paramètres me permettant d'ouvrir la connexion odbc sans avoir à créer de ressources odbc dans les ressources odbc de la machine.

En ASP, pour me connecter sur une base Acces, j'écris ceci dans mon code et c'est tout:

Code : Tout sélectionner

set fldnew=server.createobject("scripting.dictionary") set cnnl=server.createobject("ADODB.connection") openstr="driver={Microsoft Access Driver (*.mdb)};dbq="&server.mappath("./Enquete.mdb") cnnl.open openstr,"","" sql="select * from Messages;" set rst=server.createobject("ADODB.Recordset") rst.open sql, cnnl, adopenforwardonly,adlockoptimistic,adcmdtext
Je suppose qu'il est possible de faire la même chose en PHP avec un driver texte, d'où mes tests ci-dessus en PHP. Cela ne marche pas. Pourquoi?

Cdt,

Arnaud

ArnaudM
Invité n'ayant pas de compte PHPfrance

09 déc. 2006, 15:55

Il semble manquer des paramètres dans ma chaîne de connection.

En effet, si j'attache le fichier à Access, voici ce qui est précisé au niveau de la chaîne de connection:

Code : Tout sélectionner

Text;DSN=Coordonnees Spécification d'attache;FMT=Delimited;HDR=NO;IMEX=2;CharacterSet=1252;
Quelqu'un peut-il m'aider à compléter mon fichier php.

Merci.

Arnaud

ArnaudM
Invité n'ayant pas de compte PHPfrance

09 déc. 2006, 16:23

Voici la solution et il n'y a aucun paramétrage machine à faire:

Bonne lecture.

Arnaud
Test de connexion au fichier texte<br>
<?
  $adresse="Coordonnees.txt";
  echo "Adresse:$adresse";?></p><?
  $chemin=realpath($adresse);
  $chemin2="C:\Program Files\ZazouMiniWebServer\Apache\ZMWS\_web.zmwsc\GoogleMap";
  echo "Chemin: $chemin";?></p><?
  echo "Chemin: $chemin2";?></p><?
  $odbc="Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=$chemin2;Extensions=asc,csv,tab,txt;Persist Security Info=False";
  echo $odbc;?></p><?
  $connexion = odbc_connect($odbc,"","");
  if (!$connexion) {
    // Échec de la connexion
    echo "La connexion au fichier texte a échoué, ";
    echo "vérifiez que la connection à l'ODBC texte fonctionne";
    die;
  }
  echo "Connection: $connexion";
  $liste_tables = odbc_tables($connexion);
  if (!$liste_tables) {
    // Échec de la lecture des tables
    echo "La connexion aux tables a échoué, ";
    echo "vérifiez que la connection à l'ODBC texte fonctionne";
    die;
  }

   $tables = array();
   while (odbc_fetch_row($liste_tables)){
     if(odbc_result($liste_tables,"TABLE_TYPE")=="TABLE")
       echo"<br>".odbc_result($liste_tables,"TABLE_NAME");

   }


  $result=odbc_do($connexion,"SELECT * FROM Coordonnees.txt");
  if (!$result) {
    // Échec de la lecture de la table
    echo "La lecture de la table a échoué, ";
    echo "vérifiez la syntaxe de votre SQL";
    die;
  }


?>