Пытаюсь записать что-то в excel таблицу через ADO. Использую для этого компонент TADOTable (в этом есть производственная необходимость).
procedure TForm1.Button1Click(Sender: TObject);
var
ADOTable :TADOTable;
begin
ADOTable := TADOTable.Create( nil );
with ADOTable do
try
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=D:\Temp\P000720.b07.xls;' +
'Mode=ReadWrite;' +
'Extended Properties="Excel 8.0;HDR=Yes;"';
TableName := '[Лист1$]';
Open;
Edit;
AppendRecord( [ '1', '2', '3', '4' ] );
Post; {Dataset not in edit or insert mode}
Close;
finally
if Active then
Close;
end;
end;
Post выдает следующий exception "Dataset not in edit or insert mode". При том, если использовать TADOCommand + SQL, с той же ConnectionString - все нормально.
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
На счет "Insufficient key column information for updating or refreshing"... Дело в том, что инструкция UPDATE включает в себя все поля таблицы (см. св-во TField.ProviderFlags). Если вы добавите в таблицу две одинаковые записи, то сразу получите ошибку. Выход - создать одно ключевое уникальное поле, а остальным полям убрать флаг pfInWhere
procedure TForm1.Button1Click(Sender: TObject);
var
ADOTable :TADOTable;
begin
ADOTable := TADOTable.Create( nil );
with ADOTable do
try
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=D:\Temp\1.xls;' +
'Mode=ReadWrite;' +
'Extended Properties="Excel 8.0;HDR=Yes;"';
TableName := '[Лист1$]';
Open;
AppendRecord( [ 'a', 'b', 'c', 'd' ] );
finally
if Active then
Close;
end;
end;
то после закрытия в табличке никаких изменений не остается.
P.S. Почему-то Refresh после Open выдает "Insufficient key column information for updating or refreshing". Наверняка сдесь скрвается корень проблемы. Но какие ключи могут быть у xls листа... Не понимаю...
Ну не нужен AppendRecord'у Edit...Post! Хелп читать уже не нужно?
Call AppendRecord to create a new, empty record at the end of the dataset, populate it with the field values in Values, and post the values to the database or change log.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.