Update données Excel avec ADO [Résolu]

snoops71 2 Messages postés lundi 24 mai 2004Date d'inscription 19 décembre 2006 Dernière intervention - 19 déc. 2006 à 15:10 - Dernière réponse : snoops71 2 Messages postés lundi 24 mai 2004Date d'inscription 19 décembre 2006 Dernière intervention
- 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
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
snoops71 2 Messages postés lundi 24 mai 2004Date d'inscription 19 décembre 2006 Dernière intervention - 19 déc. 2006 à 17:00
3
Merci
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.

Merci snoops71 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de snoops71

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.