2013-08-21 1 views
1

У меня есть следующий код, чтобы открыть свой Excel Worksheet, используя TADOConnection и TADOQuery:запрос ячейки Обновление для Excel ADO из 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; 

Когда я запускаю следующий код:

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

Я получаю каждая строка файла, поэтому он работает нормально, но я хочу обновить ячейку. Я использую этот код:

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

Какие-то обновляет каждый «А» ячейку на листе для 555555, но то, что я действительно хочу, чтобы просто установить ячейку A1 в 555555. Любые намеки на то, как включать Раздел WHERE запроса. Благодарю.

+0

Я пробовал запросExcel1.SQL.Text: = 'SELECT * FROM [Hoja1 $ A1: A10]'; даже в инструкции select, и он с ошибкой выходит из строя: «Объект параметра неверно определен» – JoeGalind

ответ

1

Если вы хотите использовать Adoquery, вам придется установить ParamCheck в false, так как вам нужно будет использовать : для диапазона, который вы хотите обновить.
Другой вариант - использовать соединение напрямую.
В приведенном ниже примере диапазон B2: B2 используется с F1, который является именем Jet по умолчанию для первого столбца. (B2 - ячейка, которую мы хотим обновить)

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

Установка paramcheck на false сделала трюк! Теперь отлично. – JoeGalind