Update données Excel avec ADO

Résolu
snoops71 Messages postés 2 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 19 décembre 2006 - 19 déc. 2006 à 15:10
snoops71 Messages postés 2 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 19 décembre 2006 - 19 déc. 2006 à 17:00
Bonjour,

J'ai un souci avec une requete UPDATE utilisant ADO (ADOQuery) sur un fichier Excel (moteur Jet)
Je developpe sous C++ Builder mais mes problèmes concernent ADO et de plus, C++ Builder utilisant la VCL et le BDE comme Delphi, je pense obtenir des infos sur ce forum. On trouve malheureusement peu de sites et forums sur C++Builder...

Ma question : est-il possible de mettre à jour (via une requête UPDATE donc) un fichier xls via ADO?
Mon code  :
CBTable : ComboBox sélection feuille du fichier Excel
ADOQuery1 précedemment ouvert avec SQL= "SELECT * FROM [" + CBTable->Items->Strings[CBTable->ItemIndex]+ "] "

  AnsiString sMessage="UPDATE  [" + CBTable->Items->Strings[CBTable->ItemIndex]+ "] SET ["+ ADOQuery1->Fields->Fields[0]->DisplayName +"]=? WHERE ["+ ADOQuery1->Fields->Fields[0]->DisplayName +"]=?";

  AnsiString sField=ADOQuery1->Fields->Fields[0]->DisplayName;

 ADOQuery1->SQL->Clear();
 ADOQuery1->SQL->Add(sMessage);
ADOQuery1->Parameters->Clear();

ADOQuery1->Parameters->AddParameter();
PCount = ADOQuery1->Parameters->Count - 1;
ADOQuery1->Parameters->Items[PCount]->Name=sField;
ADOQuery1->Parameters->Items[PCount]->DataType = ftString;
ADOQuery1->Parameters->Items[PCount]->Direction = pdInput;
ADOQuery1->Parameters->Items[PCount]->Value = QuotedStr("Mon Agence");

 ADOQuery1->Parameters->AddParameter();
PCount = ADOQuery1->Parameters->Count - 1;
ADOQuery1->Parameters->Items[PCount]->Name=sField;
ADOQuery1->Parameters->Items[PCount]->DataType = ftString;
ADOQuery1->Parameters->Items[PCount]->Direction = pdInput;
ADOQuery1->Parameters->Items[PCount]->Value = QuotedStr("Mes Agences");

ADOQuery1->ExecSQL();

Résultats:
avec SQL="UPDATE  [" + CBTable->Items->Strings[CBTable->ItemIndex]+ "]
SET "+ ADOQuery1->Fields->Fields[0]->DisplayName +"=? WHERE
["+ ADOQuery1->Fields->Fields[0]->DisplayName +"]=?";
-> Message d'erreur : Aucune valeur donnée pour un ou plusieurs paramétres requis.

avec SQL="UPDATE  " + CBTable->Items->Strings[CBTable->ItemIndex]+ "]
SET "+ ADOQuery1->Fields->Fields[0]->DisplayName +"=? WHERE
["+ ADOQuery1->Fields->Fields[0]->DisplayName +"]=?";

-> Message d'erreur : Mise entre crochets non valide du nom '[ Agence]" (=ADOQuery1->Fields->Fields[0]->DisplayName)

Je vous épargne mes tentatives avec ADOTable du genre Fields[0 ]->AsString=QuotedStr(NewValue), ADOCommand...mais pas moyen de mettre à jour ces données Excel. Et je n'ai pas du tout envie de réutiliser Ole!

Alors tout conseil sera le bienvenu!
Merci
Manu

1 réponse

snoops71 Messages postés 2 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 19 décembre 2006
19 déc. 2006 à 17:00
J'ai fini par trouver ce qui provoquait l'erreur. Le problème venait que dans le fichier Excel le champ s'appelait " Agence" (avec 1 espace avant le nom) ce qui ne plaisait pas du tout à ADO
Voilà le genre d'erreur qui fait perdre du temps, beaucoup de temps...
Pour info : j'ai du virer le QuotedStr pour les valeurs des paramétres pourtant je l'ai vu dans plusieurs sources Delphi. Peut-être du au fait que le délimiteur de chaine est " en C++ et ' en Delphi.
3
Rejoignez-nous