2013-08-21 4 views
1

je le code suivant pour ouvrir mon Excel feuille de calcul, en utilisant TADOConnection et TADOQuery:Mise à jour requête de cellule pour Excel ADO de Delphi

conExcel.ConnectionString := 'Provider=Microsoft.JET.OLEDB.4.0;Data Source="D:\temp\file.xls";Extended Properties="Excel 8.0;HDR=No"'; 
conExcel.Connected := true; 

Quand je lance le code suivant:

queryExcel1.SQL.Text := 'SELECT * FROM [Hoja1$]'; 
queryExcel1.Open; 
while not queryExcel1.eof do 
begin 
    showmessage(queryExcel1.Fields.Fields[0].AsString); 
    queryExcel1.Next; 
end; 

Je reçois chaque ligne du fichier, donc ça marche bien, mais je veux mettre à jour une cellule. J'utilise ce code:

queryExcel2.SQL.Text := 'UPDATE [Hoja1$] SET F1 = 555555'; 
queryExcel2.ExecSQL; 

qui met à jour en quelque sorte tous les « Une » cellule sur la feuille de calcul à 555555, mais ce que je veux vraiment est juste régler la cellule A1 à 555555. Toutes les indications sur la façon d'inclure les WHERE section de la requête. Merci.

+0

J'ai essayé queryExcel1.SQL.Text: = 'SELECT * FROM [Hoja1 $ A1: A10]'; même dans l'instruction select et il échoue avec une erreur: 'L'objet du paramètre est incorrectement défini' – JoeGalind

Répondre

1

Si vous souhaitez utiliser une Adoquery, vous devrez définir la valeur de ParamCheck sur false, car vous devrez utiliser : pour la plage que vous souhaitez mettre à jour.
Une autre option consisterait à utiliser la connexion directement.
Dans l'exemple ci-dessous, la plage B2: B2 est utilisée avec F1, qui est le nom par défaut de Jet pour la première colonne. (B2 est la cellule que nous voulons mettre à jour)

Q.SQL.Text := 'UPDATE [Hoja1$B2:B2] SET [F1] = 555555'; 
    Q.ExecSQL; 
    // or: 
    //AdoConnection1.Execute('UPDATE [Hoja1$B2:B2] SET [F1] = 555555'); 
+0

La définition du paramcheck à false a fait l'affaire! Travailler parfaitement maintenant. – JoeGalind

Questions connexes