Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SQL Connexion ADODB Excel perdue

1 réponse
Avatar
smr78
Bonjour,
Je cherche, par programme php sur un serveur, à lire/écrire des données dans
un fichier Excel.
Après avoir réussi à me connecter et lire le nom des tables, la première
requête SQL génère un message d'erreur disant que la connexion est perdue!
Pour la connexion au fichier Excel j'utilise :
$conn = new COM("ADODB.Connection")or die("Cannot start ADO");
$dsn="Driver={Microsoft Excel Driver
(*.xls)};DriverId=790;DBQ=".$_SERVER['DOCUMENT_ROOT'].$dbname.";ReadOnly=0" ;
$conn->Open($dsn);

pour lire le nom des tables, j'utilise :

function ExcelTables() {
global $conn; // référence à la connexion ADO
$arr= array();
$adors=$conn->OpenSchema(20);//tables
if ($adors){
$f = $adors->Fields(2);//table/view name
while (!$adors->EOF){
$arr[]=$f->value;
$adors->MoveNext();
}
$adors->Close();
}
return $arr;
}
//---

et le code fautif :

foreach (ExcelTables() as $tabname){
if (eregi($reg,$tabname)){
$tabname=str_replace("'","",$tabname);
$sql ='SELECT * FROM [$tabname]';
$rs = $conn->Execute($sql);//ligne générant le message d'erreur suivant :

Warning: (null)(): Invoke() failed: Une exception s'est produite. Source:
Microsoft OLE DB Provider for ODBC Drivers Description: [Microsoft][Pilote
ODBC Excel] La connexion permettant de visualiser votre feuille de calcul
Microsoft Excel liée est perdue

J'ai ajouté un filtre sur les noms de tables afin de ne tester que celles
qui m'intéressent. Petite curiosité, la deuxième feuille de calcul du
Workbook est lue en premier sous un nom feuillea$ et a un type System Table,
la première feuille de calcul est lue en second et a un type Table et
s'affiche avec un nom 'feuilleb$' entre guillemet simple quote!

j'ai ce message d'erreur même si je supprime la ligne :
$tabname=str_replace("'","",$tabname);
si je mets en clairle nom de la feuille dans la requête SQL,
$sql ="SELECT * FROM [feuilleb$];
ou bien
$sql ="SELECT * FROM ['feuilleb$'];
j'ai un message d'erreur disant que la feuille n'est pas trouvée!

Que veut dire ce message de perte de connexion à la feuille?
Merci pour tout eclaircissement.
Cordialement

1 réponse

Avatar
smr78
Oups, 1000 excuses, mon fichier Excel était coincé! Même si je changeais le
nom des feuilles, mon programme lisait le nom original!
Tout fonctionne avec le filtre des simple quote sur le nom des feuilles.


Bonjour,
Je cherche, par programme php sur un serveur, à lire/écrire des données dans
un fichier Excel.
Après avoir réussi à me connecter et lire le nom des tables, la première
requête SQL génère un message d'erreur disant que la connexion est perdue!
Pour la connexion au fichier Excel j'utilise :
$conn = new COM("ADODB.Connection")or die("Cannot start ADO");
$dsn="Driver={Microsoft Excel Driver
(*.xls)};DriverIdy0;DBQ=".$_SERVER['DOCUMENT_ROOT'].$dbname.";ReadOnly=0" ;
$conn->Open($dsn);

pour lire le nom des tables, j'utilise :

function ExcelTables() {
global $conn; // référence à la connexion ADO
$arr= array();
$adors=$conn->OpenSchema(20);//tables
if ($adors){
$f = $adors->Fields(2);//table/view name
while (!$adors->EOF){
$arr[]=$f->value;
$adors->MoveNext();
}
$adors->Close();
}
return $arr;
}
//---

et le code fautif :

foreach (ExcelTables() as $tabname){
if (eregi($reg,$tabname)){
$tabname=str_replace("'","",$tabname);
$sql ='SELECT * FROM [$tabname]';
$rs = $conn->Execute($sql);//ligne générant le message d'erreur suivant :

Warning: (null)(): Invoke() failed: Une exception s'est produite. Source:
Microsoft OLE DB Provider for ODBC Drivers Description: [Microsoft][Pilote
ODBC Excel] La connexion permettant de visualiser votre feuille de calcul
Microsoft Excel liée est perdue

J'ai ajouté un filtre sur les noms de tables afin de ne tester que celles
qui m'intéressent. Petite curiosité, la deuxième feuille de calcul du
Workbook est lue en premier sous un nom feuillea$ et a un type System Table,
la première feuille de calcul est lue en second et a un type Table et
s'affiche avec un nom 'feuilleb$' entre guillemet simple quote!

j'ai ce message d'erreur même si je supprime la ligne :
$tabname=str_replace("'","",$tabname);
si je mets en clairle nom de la feuille dans la requête SQL,
$sql ="SELECT * FROM [feuilleb$];
ou bien
$sql ="SELECT * FROM ['feuilleb$'];
j'ai un message d'erreur disant que la feuille n'est pas trouvée!

Que veut dire ce message de perte de connexion à la feuille?
Merci pour tout eclaircissement.
Cordialement